2015-11-07 121 views
1

我试图在R和python的scipy.stats包中运行Wilcoxon测试。但是我得到不同的结果任何人都可以解释?R和Python中Wilcoxon测试的区别

test = [6.2151308, 4.7956451, 4.7473738, 5.4695828, 6.3181463, 2.8617239, -0.8105824, 3.9456856, 4.6735000, 4.1067193, 5.7656002, 2.2237666, 1.0354143, 4.9547707, 5.3156348, 4.8163154, 3.4024776, 4.2876854, 6.1227500] 
z_statistic, p_value = wilcoxon(np.array(test) - np.log(1.0)) 
print "one-sample wilcoxon-test", p_value 


one-sample wilcoxon-test 0.000155095772796 

即使他们两人的p值足够低,以拒绝零假设,p值:

我的R中

> des2 
[1] 6.2151308 4.7956451 4.7473738 5.4695828 6.3181463 2.8617239 
[7] -0.8105824 3.9456856 4.6735000 4.1067193 5.7656002 2.2237666 
[13] 1.0354143 4.9547707 5.3156348 4.8163154 3.4024776 4.2876854 
[19] 6.1227500 
> wilcox.test(des2, mu=0, conf.int = T) 

    Wilcoxon signed rank test 

data: des2 
V = 189, p-value = 7.629e-06 
alternative hypothesis: true location is not equal to 0 
95 percent confidence interval: 
3.485570 5.160925 
sample estimates: 
(pseudo)median 
     4.504883 

我的代码在Python代码有3个数量级的差异,我不明白为什么

+3

scipy的文档告诉我们:'因为正常的近似值用于计算,所用的样本应该很大 - 'wilcox.test'的文档说:'默认情况下(如果确切没有指定),如果样本包含少于50个有限值并且没有关系,则计算精确的p值。否则,会使用正常的近似值。“不过,不确定这是否唯一的区别。 – cel

+0

我使用Wilcox,因为我不想要一个正常的近似...因此我应该使用R版本吗? – user1871528

+1

R的测试不接近p值。这对小样本量至关重要。 – cel

回答

1

scipy的实施总是在计算p值时使用正常的近似值。尽管这适用于大样本量n,但对于小样本量,p值可能偏离真实的p值。

scipy的的笔记docs你会发现:

因为正常近似用于计算,使用的 样品要大。典型的规则是需要是n> 20.


R的实现计算用于小样本的精确p值,并使用仅对于足够大的n正常近似。

的r docs告诉你:

默认情况下(如果确切未指定),精确的p值计算 如果样品中含有小于50的有限值,也没有 联系。否则,使用正常的近似值。

所以简而言之:当两个p值不同时,R的p值应该是首选。

相关问题