14

我想对我的配对数据进行单边 wilcoxon 秩检验,因为我感兴趣的是一个样本是否明显大于另一个样本。

Scipy 提供

scipy.stats.wilcoxon(x,y)

使用配对样本 x 和 y 执行双边测试。由于我不能假设一个正态(对称)分布,我不能从两侧 p 值推导出一侧 p 值。

现在有人用 python 方法来获取单边测试的 p 值吗?

谢谢!

4

2 回答 2

17

返回的 P 值与orscipy.stats.wilcoxon的分布无关,也与它们之间的差异无关。它由 Wilcoxon 检验统计量确定(W 在http://en.wikipedia.org/wiki/Wilcoxon_signed-rank_test中,或 T 在 中),假设遵循正态分布。如果你检查源代码(在 ~python_directory\site-packages\scipy\stats\morestats.py 中),你会发现最后几行:xyscipydef wilcoxon()

se = sqrt(se / 24)
z = (T - mn) / se
prob = 2. * distributions.norm.sf(abs(z))
return T, prob

和:

mn = count*(count + 1.) * 0.25
se = count*(count + 1.) * (2. * count + 1.)

其中是和count之间的非零差数。xy

因此,要获得一侧的 p 值,您只需要prob/2.1-prob/2.

示例:在Python

>>> y1=[125,115,130,140,140,115,140,125,140,135]
>>> y2=[110,122,125,120,140,124,123,137,135,145]
>>> ss.wilcoxon(y1, y2)
(18.0, 0.5936305914425295)

R

> wilcox.test(y1, y2, paired=TRUE, exact=FALSE, correct=FALSE)

        Wilcoxon signed rank test

data:  y1 and y2 
V = 27, p-value = 0.5936
alternative hypothesis: true location shift is not equal to 0 

> wilcox.test(y1, y2, paired=TRUE, exact=FALSE, correct=FALSE, alt='greater')

        Wilcoxon signed rank test

data:  y1 and y2 
V = 27, p-value = 0.2968
alternative hypothesis: true location shift is greater than 0
于 2013-09-23T18:30:14.997 回答
2

如果您有足够的观察结果(和其他假设),我记得 scipy Mann-Withney 测试是片面的:http ://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.mannwhitneyu.html

于 2013-04-30T09:22:17.667 回答