2015-11-07 85 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值應該是首選。

相關問題