tukey_hsd#
- scipy.stats.tukey_hsd(*args)[source]#
对多种处理的均值相等性执行 Turkey 的 HSD 检验。
Turkey 的诚实显著差异 (HSD) 检验对一组样本的均值进行成对比较。ANOVA(例如
f_oneway
)评估每个样本的底层均值是否相同,而 Turkey 的 HSD 是一种事后检验,用于将每个样本的均值与其他每个样本的均值进行比较。原假设是,样本的底层分布具有相同的均值。检验统计量(计算每个样本的所有成对配对)只是样本均值之间的差异。对于每对样本,p 值是在原假设(及其他假设;见注释)下观察到该统计量的极端值(考虑到正在执行许多成对比较)的概率。
- 参数:
- sample1, sample2, …array_like
每组的样本测量值。至少要有两个参数。
- 返回:
- result
TukeyHSDResult
实例 返回值是具有以下属性的对象
- statisticfloat ndarray
每个比较测试的计算统计数据。索引
(i, j)
元素是组i
和j
之间的比较统计数据。- pvalue浮点型数组
每个比较测试的计算 p 值。索引
(i, j)
元素是组i
和j
之间的比较 p 值。
该对象具有以下方法
- confidence_interval(confidence_level=0.95)
计算指定置信水平的置信区间。
- result
参见
dunnett
执行均值与控制组的比较。
备注
使用此测试依赖于几个假设。
各组内和之间的观察值相互独立。
每组内的观察值呈正态分布。
从其抽取样本的分布具有相同的有限方差。
该测试的最初公式适用于样本大小相等的情况 [6]。对于样本大小不相等的情况,测试采用图基-克雷默方法 [4]。
参考
[1]NIST/SEMATECH 统计方法电子手册,“7.4.7.1. 图基本法”。https://www.itl.nist.gov/div898/handbook/prc/section4/prc471.htm,2020 年 11 月 28 日。
[2]阿布迪,埃尔韦 & 威廉姆斯,琳恩。(2021 年)。“图基的显著性差异 (HSD) 检验”。https://personal.utdallas.edu/~herve/abdi-HSD2010-pretty.pdf
[3]“使用 SAS PROC ANOVA 和 PROC GLM 进行单因素 ANOVA”。SAS 教程,2007 年,www.stattutorials.com/SAS/TUTORIAL-PROC-GLM.htm。
[4]克雷默,克莱德·杨。“将多重范围检验扩展到组均值,具有不均等的重复数”。生物测量学,第 12 卷,第 3 期,1956 年,第 307-310 页。JSTOR,www.jstor.org/stable/3001469。于 2021 年 5 月 25 日访问。
[5]NIST/SEMATECH 统计方法电子手册,“7.4.3.3. ANOVA 表和关于均值的假设检验”https://www.itl.nist.gov/div898/handbook/prc/section4/prc433.htm, 2021 年 6 月 2 日。
[6]图基本,约翰·W。“在方差分析中比较个体均值”。生物测量学,第 5 卷,第 2 期,1949 年,第 99-114 页。 JSTOR,www.jstor.org/stable/3001913。于 2021 年 6 月 14 日访问。
示例
这里有一些数据比较三种品牌的止痛药的缓解时间,以分钟为单位报告。数据根据 [3] 改编。
>>> import numpy as np >>> from scipy.stats import tukey_hsd >>> group0 = [24.5, 23.5, 26.4, 27.1, 29.9] >>> group1 = [28.4, 34.2, 29.5, 32.2, 30.1] >>> group2 = [26.1, 28.3, 24.3, 26.2, 27.8]
我们想看看任何两组的平均值是否存在显著差异。首先,使用箱线图进行目视检查。
>>> import matplotlib.pyplot as plt >>> fig, ax = plt.subplots(1, 1) >>> ax.boxplot([group0, group1, group2]) >>> ax.set_xticklabels(["group0", "group1", "group2"]) >>> ax.set_ylabel("mean") >>> plt.show()
从箱形图中,我们可以看到第 1 组到第 2 组与第 3 组的四分位区间重叠,但我们可以应用
tukey_hsd
测试来判断均值差是否显著。我们设定显着性水平为 .05 来拒绝零假设。>>> res = tukey_hsd(group0, group1, group2) >>> print(res) Tukey's HSD Pairwise Group Comparisons (95.0% Confidence Interval) Comparison Statistic p-value Lower CI Upper CI (0 - 1) -4.600 0.014 -8.249 -0.951 (0 - 2) -0.260 0.980 -3.909 3.389 (1 - 0) 4.600 0.014 0.951 8.249 (1 - 2) 4.340 0.020 0.691 7.989 (2 - 0) 0.260 0.980 -3.389 3.909 (2 - 1) -4.340 0.020 -7.989 -0.691
零假设是每组的均值相同。
group0
和group1
之间的比较以及group1
和group2
之间的比较的 p 值没有超过 .05,因此我们拒绝均值相同的零假设。group0
和group2
之间的比较的 p 值超过 .05,因此我们接受均值之间没有显著差异的零假设。我们还可以计算与我们选择的置信水平相关联的置信区间。
>>> group0 = [24.5, 23.5, 26.4, 27.1, 29.9] >>> group1 = [28.4, 34.2, 29.5, 32.2, 30.1] >>> group2 = [26.1, 28.3, 24.3, 26.2, 27.8] >>> result = tukey_hsd(group0, group1, group2) >>> conf = res.confidence_interval(confidence_level=.99) >>> for ((i, j), l) in np.ndenumerate(conf.low): ... # filter out self comparisons ... if i != j: ... h = conf.high[i,j] ... print(f"({i} - {j}) {l:>6.3f} {h:>6.3f}") (0 - 1) -9.480 0.280 (0 - 2) -5.140 4.620 (1 - 0) -0.280 9.480 (1 - 2) -0.540 9.220 (2 - 0) -4.620 5.140 (2 - 1) -9.220 0.540