scipy.stats.

dunnett#

scipy.stats.dunnett(*samples, control, alternative='two-sided', rng=None)[source]#

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

这是 Dunnett 最初的单步检验的实现,如 [1] 中所述。

参数:
sample1, sample2, …一维类数组

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

control一维类数组

对照组的样本测量值。

alternative{‘two-sided’, ‘less’, ‘greater’}, 可选

定义备择假设。

零假设是样本和对照组的基础分布的均值相等。以下备择假设可用(默认为 ‘two-sided’)

  • ‘two-sided’:样本和对照组的基础分布的均值不相等。

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

  • ‘greater’:样本的基础分布的均值大于对照组的基础分布的均值。

rngnumpy.random.Generator, 可选

伪随机数生成器状态。当 rng 为 None 时,将使用来自操作系统的熵创建一个新的 numpy.random.Generator。除 numpy.random.Generator 之外的类型将传递给 numpy.random.default_rng 以实例化 Generator

在版本 1.15.0 中更改: 作为从使用 numpy.random.RandomState 过渡到 numpy.random.GeneratorSPEC-007 的一部分,此关键字从 random_state 更改为 rng。在过渡期间,两个关键字将继续工作,但一次只能指定一个。在过渡期结束后,使用 random_state 关键字的函数调用将发出警告。在弃用期结束后,random_state 关键字将被删除。

返回值:
resDunnettResult

一个包含以下属性的对象

statisticfloat ndarray

每次比较的检验的计算统计量。索引 i 处的元素是组 i 和对照组之间比较的统计量。

pvaluefloat ndarray

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

以及以下方法

confidence_interval(confidence_level=0.95)

计算组与对照组的均值差异 +- 允许量。

参见

tukey_hsd

执行均值的成对比较。

Dunnett 检验

扩展示例

注释

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

Dunnett 检验将多个实验组的均值与单个对照组进行比较。Tukey 的诚实显著性差异检验是另一个控制家族误差率的多重比较检验,但 tukey_hsd 执行组之间的所有成对比较。当不需要实验组之间的成对比较时,Dunnett 检验因其更高的功效而更可取。

此检验的使用依赖于几个假设。

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

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

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

参考文献

[1] (1,2)

Dunnett, Charles W. (1955) “A Multiple Comparison Procedure for Comparing Several Treatments with a Control.” Journal of the American Statistical Association, 50:272, 1096-1121, DOI:10.1080/01621459.1955.10501294

[2]

Thomson, M. L., & Short, M. D. (1969). Mucociliary function in health, chronic obstructive airway disease, and asbestosis. Journal of applied physiology, 26(5), 535-539. DOI:10.1152/jappl.1969.26.5.535

示例

我们将使用来自 [2],表 1 的数据。零假设是样本和对照组的基础分布的均值相等。

首先,我们检验样本和对照组的基础分布的均值不相等(alternative='two-sided',默认值)。

>>> import numpy as np
>>> from scipy.stats import dunnett
>>> samples = [[3.8, 2.7, 4.0, 2.4], [2.8, 3.4, 3.7, 2.2, 2.0]]
>>> control = [2.9, 3.0, 2.5, 2.6, 3.2]
>>> res = dunnett(*samples, control=control)
>>> res.statistic
array([ 0.90874545, -0.05007117])
>>> res.pvalue
array([0.58325114, 0.99819341])

现在,我们检验样本的基础分布的均值大于对照组的基础分布的均值。

>>> res = dunnett(*samples, control=control, alternative='greater')
>>> res.statistic
array([ 0.90874545, -0.05007117])
>>> res.pvalue
array([0.30230596, 0.69115597])

有关更详细的示例,请参见 Dunnett 检验