为什么 R 和 Python Mann Whitney 不同?

问题描述 投票:0回答:3

我想知道为什么在 python 和 R 中进行 mann Whitney u 测试时我的答案如此不同。在 python 中:

from scipy.stats import mannwhitneyu
t = [1,2,3]
g = [4,5,6,7,8,9]
mannwhitneyu(t,g)
(0.0, 0.014092901073953692)

在 R 中:

t = c(1,2,3)
g = c(4,5,6,7,8,9)
wilcox.test(t,g, paired = FALSE)

   Wilcoxon rank sum test

data:  t and g
W = 0, p-value = 0.02381
alternative hypothesis: true location shift is not equal to 0

我想知道为什么 python 看起来更像是一个单方面的测试。

python r statistics
3个回答
7
投票

scipy 版本被记录为返回单侧 p 值。 (我的文档网站目前已关闭,因此我无法提供链接,但如果您查看

mannwhitneyu
函数的帮助,您可以看到它。)R 函数已记录,允许您指定侧面,默认为双面。


0
投票

scipy 中的 MW 测试不适用于小于 20 的样本量。请参阅其文档中的注释。因此你的 python 结果不准确。

从下面的链接

https://docs.scipy.org/doc/scipy/reference/ generated/scipy.stats.mannwhitneyu.html

” 备注

仅当每个样本中的观察数量 > 20 并且您有 2 个独立的秩样本时才使用。如果获得的 u 小于或等于 U 的临界值,则 Mann-Whitney U 显着。

此测试校正连接,并且默认使用连续性校正。 ”


0
投票

要在 R 和 Python 之间对齐 Mann-Whitney U 测试的结果,请确保指定双边测试并在 Python 的 mannwhitneyu 函数中使用精确计算。

mannwhitneyu(t,g,替代='双面',方法='精确')

© www.soinside.com 2019 - 2024. All rights reserved.