当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python SciPy stats.dunnett用法及代码示例


本文简要介绍 python 语言中 scipy.stats.dunnett 的用法。

用法:

scipy.stats.dunnett(*samples, control, alternative='two-sided', random_state=None)#

Dunnett 检验:将平均值与对照组进行多重比较。

这是 Dunnett 原始 single-step 测试的实现,如 [1] 中所述。

参数

sample1, sample2, … 一维数组

每个实验组的样本测量值。

control 一维数组

对照组的样本测量值。

alternative {‘双面’,‘less’, ‘greater’},可选

定义备择假设。

原假设是样本和对照的分布均值相等。可以使用以下替代假设(默认为“双面”):

  • “双面”:样本和对照的分布均值不相等。

  • ‘less’:样本基础分布的均值小于对照基础分布的均值。

  • ‘greater’:样本基础分布的均值大于控件基础分布的均值。

random_state {无,整数, numpy.random.Generator },可选

如果random_state是 int 或 None,一个新的numpy.random.Generator是使用创建的np.random.default_rng(random_state).如果random_state已经是一个Generator实例,然后使用提供的实例。

随机数生成器用于控制 multivariate-t 分布的随机 Quasi-Monte 卡罗积分。

返回

res DunnettResult

包含属性的对象:

统计 浮点数数组

每次比较的测试的计算统计量。索引i 处的元素是组i 与对照组之间比较的统计数据。

p值 浮点数数组

每次比较的检验的计算 p 值。索引 i 处的元素是组 i 与对照之间比较的 p 值。

以及以下方法:

confidence_interval(confidence_level=0.95):

计算对照组平均值的差异+-津贴。

注意

与 independent-sample t-test 一样,Dunnett 检验 [1] 用于推断样本的分布均值。然而,当在固定显著性水平下执行多个t-tests时,“family-wise错误率”(在至少一次检验中错误拒绝零假设的概率)将超过显著性水平。 Dunnett 的测试旨在执行多重比较,同时控制 family-wise 错误率。

邓尼特检验将多个实验组的平均值与单个对照组的平均值进行比较。 Tukey 的诚实显著差异测试是另一个控制 family-wise 错误率的 multiple-comparison 测试,但是scipy.stats.tukey_hsd施行全部组间的两两比较。当不需要实验组之间的成对比较时,邓尼特检验因其较高的功效而更可取。

该测试的使用依赖于几个假设。

  1. 观察在组内和组间是独立的。

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

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

参考

[1] (1,2,3)

查尔斯·W·邓尼特。 “将几种治疗方法与对照进行比较的多重比较程序。”美国统计协会杂志,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()
scipy-stats-dunnett-1_00_00.png

注意药物 A 组和对照组的重叠四分位数范围以及药物 B 组和对照组之间的明显分离。

接下来,我们将使用 Dunnett 检验来评估组均值之间的差异是否显著,同时控制 family-wise 错误率:做出任何错误发现的概率。令零假设为实验组与对照组具有相同的均值,而替代假设为实验组与对照组不具有相同的均值。我们认为 5% family-wise 错误率是可以接受的,因此我们选择 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 组的平均值与对照组不同。

相关用法


注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.stats.dunnett。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。