我在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测试的任何建议?如果您需要更多信息,请告诉我们。
答案 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"