使用scipy的片面Wilcoxon符号排名测试

时间:2013-04-30 09:13:20

标签: python statistics scipy

我想对我的配对数据执行单侧wilcoxon等级测试,因为我很感兴趣,如果一个样本明显大于另一个样本。

Scipy提供

scipy.stats.wilcoxon(x,y)

使用成对的样本x和y执行双侧测试。由于我不能假设正态(对称)分布,我不能从双侧p值导出单侧p值。

现在有人用python方法获得单侧测试的p值吗?

谢谢!

2 个答案:

答案 0 :(得分:14)

scipy.stats.wilcoxon返回的P值与xy的分布无关,也与它们之间的差异无关。它由Wilcoxon检验统计量(W在http://en.wikipedia.org/wiki/Wilcoxon_signed-rank_test中,或者在scipy中)确定,假设它遵循正态分布。如果检查源(在~python_directory \ site-packages \ scipy \ stats \ morestats.py中),你会发现def 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.)

countxy之间非零差异的数量。

因此,要获得单边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

答案 1 :(得分:1)

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