R-x中的Wilcoxon检验必须是数字误差

时间:2015-05-04 14:50:59

标签: r

我在R中的wilcox.test有问题 我的数据对象是一个矩阵,其中第一列包含一个名称,所有其他列包含一个(基因表达式)度量,它是数字:

str(myMatrix)
'data.frame':   2000 obs. of  143 variables:
$ precursor               : chr  "name1" "name2" "name3" "name4" ...
$ sample1: num  1.46e-03 2.64e+02 1.46e-03 1.46e-03 1.46e-03 ...
$ sample2: num  1.46e-03 1.91e+02 1.46e-03 1.46e-03 1.46e-03 ...
$ sample3: num  1.46e-03 3.01e+02 1.46e-03 1.46e-03 4.96 ...

对于所有2000行,我想测试矩阵的2个给定部分之间是否存在差异。我尝试了4种不同的方法:

wilcox.test(as.numeric(myMatrix[i,2:87],myMatrix[i,88:98]))$p.value
#[1] 1.549484e-16

wilcox.test(myMatrix[i,2:87],myMatrix[i,88:98])$p.value
#Error in wilcox.test.default(myMatrix[i, 2:87], myMatrix[i, 88:98]) : 
#'x' must be numeric

t.test(as.numeric(myMatrix[i,2:87],myMatrix[i,88:98]))$p.value
#[1] 0.2973957

t.test(myMatrix[i,2:87],myMatrix[i,88:98])$p.value
#[1] 0.3098505

正如您所看到的,只有当我对已经数字值使用as.numeric()时,我才会得到一个没有Wilcoxon测试错误消息的结果,但结果完全不同于t.test结果,即使他们不应该。

使用在线工具手动验证表明使用t.test值的as.numeric()结果是错误的。

有关如何解决此问题并进行正确的Wilcoxon测试的任何建议?如果您需要更多信息,请告诉我们。

1 个答案:

答案 0 :(得分:1)

实际上,myMatrix [i,2:87]仍然是data.frame。请参阅以下示例。

> myMat  
    fir X1 X2 X3 X4  
1 name1  1  5  9 13  
2 name2  2  6 10 14  
3 name3  3  7 11 15  
4 name4  4  8 12 16  
> class(myMat[1, 2:4])  
[1] "data.frame"  
> as.numeric(myMat[1, 2:4])  
[1] 1 5 9  

将您的数据更改为真实的Matrix将解决您的问题。

> myMat_01 <- myMat[, 2:5]  
> rownames(myMat_01) <- myMat$fir  
> myMat_01 <- as.matrix(myMat_01)  
> class(myMat_01[1, 2:4])  
[1] "integer"