Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R和Python中Wilcoxon测试的区别_Python_R_Scipy - Fatal编程技术网

R和Python中Wilcoxon测试的区别

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

我试图在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.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吗?如果在这里有一个链接,那就太棒了。