scipy.stats.mannwhitneyu

scipy.stats.mannwhitneyu(x, y, use_continuity=True, alternative='two-sided', axis=0, method='auto', *, nan_policy='propagate')[源代码]

对两个独立样本进行Mann-Whitney U秩检验。

Mann-Whitney U检验是零假设的非参数检验,即样本下的分布 x 与样本下的分布相同 y 。它经常被用来测试分布之间的位置差异。

参数
x, y类似阵列的

n-d个样本阵列。数组必须是可广播的,除非沿 axis

use_continuity布尔值,可选

是否应应用连续性校正(1/2)。出现以下情况时,默认值为True method'asymptotic' 在其他方面没有任何效果。

alternative{‘双面’,‘少’,‘大’},可选

定义了另一种假设。默认值为“双面”。让我们 F(u)G(u) 是基础分布的累积分布函数 xy ,分别为。然后,可以使用以下替代假设:

  • “双面”:分布不相等,即 F(U)≠G(U) 至少一个人的 u

  • “Less”:潜在的分布 x 随机性小于基础的分布 y ,即 F(u) > G(u) 为了所有人 u

  • “更大”:潜在的分布 x 随机大于下面的分布 y ,即 F(u) < G(u) 为了所有人 u

在一组更具限制性的假设下,可选择的假设可以用分布的位置来表示;请参见 [5] 第5.1节。

axis整型或无,默认值:0

如果为int,则为要沿其计算统计信息的输入轴。输入的每个轴切片(例如行)的统计将出现在输出的相应元素中。如果 None ,则在计算统计数据之前将分解输入。

method{‘auto’,‘渐近’,‘精确’},可选

选择用于计算 p -价值。默认值为‘AUTO’。以下选项可用。

  • 'asymptotic' :将标准化检验统计数据与正态分布进行比较,并对平局进行校正。

  • 'exact' :计算精确的 p -通过比较观察到的 \(U\) 的精确分布的统计数据 \(U\) 零假设下的统计量。不会对平局进行更正。

  • 'auto' :选择 'exact' 当其中一个样本的大小小于8并且没有关联时;选择 'asymptotic' 不然的话。

nan_policy{‘传播’,‘省略’,‘提升’}

定义如何处理输入NAN。

  • propagate :如果沿其计算统计的轴切片(例如行)中存在NaN,则输出的相应条目将为NaN。

  • omit :执行计算时将省略NAN。如果沿其计算统计数据的轴片中剩余的数据不足,则输出的相应条目将为NaN。

  • raise :如果存在NaN,则 ValueError 都会被举起。

退货
resMannwhitneyuResult

包含属性的对象:

统计数据浮动

与样本相对应Mann-Whitney U统计量 x 。样本对应的测试统计见备注 y

p值浮动

关联的 p -对所选对象的价值 alternative

注意事项

如果 U1 统计量是否与样本对应 x ,则样本对应的统计量 yU2 = ` x.shape [axis] *Y.Shape [axis] -U1`

mannwhitneyu 是针对独立样品的。对于相关/配对样本,请考虑 scipy.stats.wilcoxon

method 'exact' 当没有平局并且任一样本量小于8时,建议使用 [1]. 该实现遵循最初在 [1] 如中所述 [3]. 请注意,确切的方法是 not 修正了领带,但是 mannwhitneyu 如果数据中有关联,则不会引发错误或警告。

Mann-Whitney U检验是独立样本的t检验的非参数版本。当总体样本的均值为正态分布时,考虑 scipy.stats.ttest_ind

参考文献

1(1,2)

H.B.Mann和D.R.Whitney,“关于两个随机变量中的一个是否随机大于另一个的检验”,“数理统计年鉴”,第18卷,第50-60页,1947年。

2

曼-惠特尼U测试,维基百科,http://en.wikipedia.org/wiki/Mann-Whitney_U_test

3

Di Bucchianico,“组合学、计算机代数和Wilcoxon-Mann-Whitney检验”,“统计规划与推理杂志”,第79卷,第349-364页,1999年。

4(1,2,3,4,5,6,7)

罗西·希尔,“统计学:2.3曼-惠特尼U测验”,数学学习支持中心,2004年。

5

迈克尔·P·费伊和迈克尔·A·普罗尚。“Wilcoxon-Mann-Whitney或t-test?对假设检验和对决策规则的多重解释。”“统计调查”,第4卷,第1-39页,2010年。https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2857732/

示例

我们遵循下面的示例 [4]: 随机抽样的9名年轻人在以下年龄被诊断为II型糖尿病。

>>> males = [19, 22, 16, 29, 24]
>>> females = [20, 11, 17, 12]

我们使用Mann-Whitney U检验来评估男性和女性的诊断年龄是否有统计学意义上的差异。零假设是男性诊断年龄分布与女性诊断年龄分布相同。我们决定需要95%的置信水平来拒绝零假设,而支持分布不同的备选方案。由于样本数量很少,而且数据之间没有联系,我们可以将观察到的测试统计数据与 精确 零假设下检验统计量的分布。

>>> from scipy.stats import mannwhitneyu
>>> U1, p = mannwhitneyu(males, females, method="exact")
>>> print(U1)
17.0

mannwhitneyu 始终报告与第一个样本(在本例中为男性)相关的统计数据。这一点与 \(U_M = 17\) 报告时间: [4]. 可以计算与第二个统计量相关联的统计量:

>>> nx, ny = len(males), len(females)
>>> U2 = nx*ny - U1
>>> print(U2)
3.0

这一点与 \(U_F = 3\) 报告时间: [4]. 双面的 p -可以根据任一统计数据计算值,并且通过以下方式生成的值 mannwhitneyu 同意 \(p = 0.11\) 报告时间: [4].

>>> print(p)
0.1111111111111111

测试统计量的精确分布是渐近正态的,因此该示例通过比较精确的 p -相对于 p -使用法线近似生成的值。

>>> _, pnorm = mannwhitneyu(males, females, method="asymptotic")
>>> print(pnorm)
0.11134688653314041

这里 mannwhitneyu 的报告 p -值似乎与值冲突 \(p = 0.09\)[4]. 原因是 [4] 不应用由执行的连续性校正 mannwhitneyumannwhitneyu 减小测试统计数据与平均值之间的距离 \(\mu = n_x n_y / 2\) 0.5以校正将离散统计与连续分布进行比较的事实。在这里, \(U\) 使用的统计量小于平均值,因此我们通过在分子中添加0.5来减小距离。

>>> import numpy as np
>>> from scipy.stats import norm
>>> U = min(U1, U2)
>>> N = nx + ny
>>> z = (U - nx*ny/2 + 0.5) / np.sqrt(nx*ny * (N + 1)/ 12)
>>> p = 2 * norm.cdf(z)  # use CDF to get p-value from smaller statistic
>>> print(p)
0.11134688653314041

如果需要,我们可以禁用连续性校正以获得与中报告的结果一致的结果 [4].

>>> _, pnorm = mannwhitneyu(males, females, use_continuity=False,
...                         method="asymptotic")
>>> print(pnorm)
0.0864107329737

无论我们执行的是精确的还是渐近的检验,检验统计量为极端或更极端的概率偶然超过5%,因此我们不认为结果具有统计学意义。

假设在看到数据之前,我们假设女性往往比男性更早被诊断出来。在这种情况下,提供女性年龄作为第一个输入是很自然的,我们将使用 alternative = 'less' :女性被诊断的年龄随机小于男性。

>>> res = mannwhitneyu(females, males, alternative="less", method="exact")
>>> print(res)
MannwhitneyuResult(statistic=3.0, pvalue=0.05555555555555555)

同样,在零假设下偶然获得足够低的测试统计值的概率大于5%,因此我们不会拒绝零假设,而是支持我们的替代方案。

如果假设总体样本的均值是正态分布是合理的,我们可以使用t检验来进行分析。

>>> from scipy.stats import ttest_ind
>>> res = ttest_ind(females, males, alternative="less")
>>> print(res)
Ttest_indResult(statistic=-2.239334696520584, pvalue=0.030068441095757924)

在这个假设下, p -值将低到足以拒绝零假设,转而支持替代方案。