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) 是基础分布的累积分布函数 x 和 y ,分别为。然后,可以使用以下替代假设:
“双面”:分布不相等,即 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 ,则样本对应的统计量 y 是 U2 = ` 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] 不应用由执行的连续性校正mannwhitneyu
;mannwhitneyu
减小测试统计数据与平均值之间的距离 \(\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 -值将低到足以拒绝零假设,转而支持替代方案。