dunnett#
- scipy.stats.dunnett(*samples, control, alternative='two-sided', random_state=None)[源代码]#
邓尼特检验:与控制组进行多重均值比较。
这是邓尼特原版单步检验的实现,如 [1] 所示。
- 参数:
- sample1、sample2、…1D 类似数组
每个实验组的样本测量值。
- control1D 类似数组
控制组的样本测量值。
- alternative{‘two-sided’, ‘less’, ‘greater’},可选
定义备选假设。
原假设是样本和对照背后的分布均值相等。可选备选假设如下(默认是‘two-sided’)
‘two-sided’:样本和对照背后的分布均值不等。
‘less’:样本背后的分布均值小于对照背后的分布均值。
‘greater’:样本背后的分布均值大于对照背后的分布均值。
- random_state{None, int,
numpy.random.Generator
}, 可选 如果random_state是一个 int 或 None,那么新的
numpy.random.Generator
使用np.random.default_rng(random_state)
创建。如果random_state已经是Generator
实例,那么将使用提供的实例。使用随机数发生器控制多变量 t 分布的随机准蒙特卡罗积分。
- 返回:
- res
DunnettResult
包含以下属性的对象
- statisticfloat ndarray
每个比较的检验计算出来的统计量。索引
i
处的元素是第i
组和控制组之间的比较统计量。- pvaluefloat ndarray
每个比较的检验计算出的 p 值。索引
i
处的元素是第i
组和控制组之间的比较 p 值。
和以下方法
- confidence_interval(confidence_level=0.95)
计算具控制组+-允许范围的各个组的均值差。
- res
另请参见
tukey_hsd
执行平均数的成对比较。
注意
与独立样本 t 检验类似,邓尼特检验[1]用于推断从中抽样的分布的均值。但是,当在固定显著性水平上执行多个 t 检验时,“家族错误率”(至少在一个检验中错误拒绝原假设的概率)将超过显著性水平。邓尼特检验设计用来控制家族错误率,同时执行多个比较。
邓尼特检验将多个实验组的均值与单个控制组的均值进行比较。Tukey 的诚实显著性差异检验是另一种控制家族错误率的多重比较检验,但
tukey_hsd
执行组之间的所有成对比较。当实验组之间的成对比较不需要时,由于其较高的判定力,邓尼特检验更为可取。此测试的使用基于几个假设。
同一组内和不同组间的观察相互独立。
每组内的观察值服从正态分布。
样本所抽取的分布具有相同的有限方差。
参考资料
[1] (1,2,3)Charles W. Dunnett。“一种比较多项处理和对照的复比较程序”。美国统计协会杂志,50:272, 1096-1121, DOI:10.1080/01621459.1955.10501294,1955 年。
示例
在 [1] 中,研究了药物对三组动物血液计数测量值的影响。
下表总结了实验结果,其中两组接受了不同的药物,而一组作为对照组。记录了血液计数(百万个细胞/立方毫米)
>>> import numpy as np >>> control = np.array([7.40, 8.50, 7.20, 8.24, 9.84, 8.32]) >>> drug_a = np.array([9.76, 8.80, 7.68, 9.36]) >>> drug_b = np.array([12.80, 9.68, 12.16, 9.20, 10.55])
我们希望了解任意两组之间的均值是否有显着差异。首先,直观地检查箱型图。
>>> import matplotlib.pyplot as plt >>> fig, ax = plt.subplots(1, 1) >>> ax.boxplot([control, drug_a, drug_b]) >>> ax.set_xticklabels(["Control", "Drug A", "Drug B"]) >>> ax.set_ylabel("mean") >>> plt.show()
请注意药物 A 组和对照组的四分位间距重叠,而药物 B 组和对照组之间明显分离。
接下来,我们将使用邓尼特检验来评估组均值之间的差异是否显着,同时控制全组错误率:得出任何错误发现的可能性。假设零假设为实验组与对照组的均值相同,而备择假设为实验组与对照组的均值不同。我们认为 5% 的全组错误率是可接受的,因此我们选择 0.05 作为显著性阈值。
>>> from scipy.stats import dunnett >>> res = dunnett(drug_a, drug_b, control=control) >>> res.pvalue array([0.62004941, 0.0059035 ]) # may vary
与组 A 和对照组之间的比较对应的 p 值超过 0.05,因此对于该比较,我们不拒绝零假设。然而,与组 B 和对照组之间的比较对应的 p 值小于 0.05,因此我们认为实验结果为支持备择假设,反对零假设的证据:组 B 的均值与对照组不同。