我想知道为什么在 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 看起来更像是一个单方面的测试。
scipy 版本被记录为返回单侧 p 值。 (我的文档网站目前已关闭,因此我无法提供链接,但如果您查看
mannwhitneyu
函数的帮助,您可以看到它。)R 函数已记录,允许您指定侧面,默认为双面。
scipy 中的 MW 测试不适用于小于 20 的样本量。请参阅其文档中的注释。因此你的 python 结果不准确。
从下面的链接
https://docs.scipy.org/doc/scipy/reference/ generated/scipy.stats.mannwhitneyu.html
” 备注
仅当每个样本中的观察数量 > 20 并且您有 2 个独立的秩样本时才使用。如果获得的 u 小于或等于 U 的临界值,则 Mann-Whitney U 显着。
此测试校正连接,并且默认使用连续性校正。 ”
要在 R 和 Python 之间对齐 Mann-Whitney U 测试的结果,请确保指定双边测试并在 Python 的 mannwhitneyu 函数中使用精确计算。
mannwhitneyu(t,g,替代='双面',方法='精确')