scipy.stats.

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 分布的随机准蒙特卡罗积分。

返回:
resDunnettResult

包含以下属性的对象

statisticfloat ndarray

每个比较的检验计算出来的统计量。索引i处的元素是第i组和控制组之间的比较统计量。

pvaluefloat ndarray

每个比较的检验计算出的 p 值。索引i处的元素是第i组和控制组之间的比较 p 值。

和以下方法

confidence_interval(confidence_level=0.95)

计算具控制组+-允许范围的各个组的均值差。

另请参见

tukey_hsd

执行平均数的成对比较。

注意

与独立样本 t 检验类似,邓尼特检验[1]用于推断从中抽样的分布的均值。但是,当在固定显著性水平上执行多个 t 检验时,“家族错误率”(至少在一个检验中错误拒绝原假设的概率)将超过显著性水平。邓尼特检验设计用来控制家族错误率,同时执行多个比较。

邓尼特检验将多个实验组的均值与单个控制组的均值进行比较。Tukey 的诚实显著性差异检验是另一种控制家族错误率的多重比较检验,但tukey_hsd执行组之间的所有成对比较。当实验组之间的成对比较不需要时,由于其较高的判定力,邓尼特检验更为可取。

此测试的使用基于几个假设。

  1. 同一组内和不同组间的观察相互独立。

  2. 每组内的观察值服从正态分布。

  3. 样本所抽取的分布具有相同的有限方差。

参考资料

[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()
../../_images/scipy-stats-dunnett-1_00_00.png

请注意药物 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 的均值与对照组不同。