R和Python中Wilcoxon测试的区别
我试图在R和python的scipy.stats包中运行Wilcoxon测试。但是我得到的结果不同,有人能解释吗 我的R代码R和Python中Wilcoxon测试的区别,python,r,scipy,Python,R,Scipy,我试图在R和python的scipy.stats包中运行Wilcoxon测试。但是我得到的结果不同,有人能解释吗 我的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.3
> 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代码:
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值相差3个数量级,我无法理解为什么在计算p值时,scipy的实现总是使用正常近似值。这当然适用于大样本量
n
,但对于小样本量,p值可能会偏离真实的p值
在scipy
的注释中,您可以找到:
由于计算中使用了法线近似,因此
使用的样品应该是大的。典型的规则是要求n>
二十,
R
的实现为小样本量计算精确的p值,并仅对足够大的n
使用正态近似
让我们告诉你:
默认情况下(如果未指定精确),将计算精确的p值
如果样本包含少于50个有限值且没有
领带。否则,将使用法线近似值
因此,简而言之:当两个p值不同时,
R
的p值应该是首选。scipy的文档告诉我们:因为计算使用的是正态近似值,所以使用的样本应该是大的
-wilcox的文档。test说:默认情况下(如果没有指定精确值),如果样本包含少于50个有限值且不存在联系,则计算精确的p值。否则,将使用正态近似值。
不确定这是否是唯一的区别。我使用Wilcox是因为我不想要正态近似值……因此我应该使用R版本,对吗?R的测试不近似p值。这对于小样本来说至关重要。@cel您的评论可能就是答案。scipy没有精确的测试(但是在github上的pull请求中有一些工作要做)。@WarrenWeckesser,你知道票证id吗?如果在这里有一个链接,那就太棒了。