R 中的 Mann-Whitney-Wilcoxon 检验给出错误

Mann-Whitney-Wilcoxon test in R giving Error

我正在尝试 运行 跨大型数据集的 Mann-Whitney 测试。这是我输入的摘录:

GeneID  GeneID-2    GeneName    TSS-ID  Locus-ID    TAp73fTfTAAdEmp TAp73fTfTFAdEmp TAp73fTfTJAdEmp TAp73fTfTAAdCre TAp73fTfTFAdCre TAp73fTfTJAdCre
ENSMUSG00000028180  ENSMUSG00000028180  Zranb2  TSS1050,TSS17719,TSS52367,TSS53246,TSS72833,TSS73222    3:157534159-157548390   11.32013333 11.66344    11.87956667 13.01974667 14.70944667 10.94043867
ENSMUSG00000028184  ENSMUSG00000028184  Lphn2   TSS23298,TSS2403,TSS74519   3:148815585-148989316   15.0983 15.09572    14.03578667 17.00742667 17.90735333 14.69675333
ENSMUSG00000028187  ENSMUSG00000028187  Rpf1    TSS66485    3:146506347-146521423   12.34542667 14.11470667 10.493766   14.57954    11.93746667 11.07405867
ENSMUSG00000028189  ENSMUSG00000028189  Ctbs    TSS36674,TSS72417   3:146450469-146465849   1.288003867 1.435658    1.959620667 1.427768    1.502116667 1.243928267
ENSMUSG00000020755  ENSMUSG00000020755  Sap30bp TSS14892,TSS218,TSS54781,TSS58430   11:115933281-115966725  31.91070667 31.68585333 26.86939333 39.05116667 30.62916667 27.22893333
ENSMUSG00000020752  ENSMUSG00000020752  Recql5  TSS26689,TSS42686,TSS60902,TSS75513,TSS9111 11:115892594-115933477  10.55415467 9.373216667 8.315984    7.255579333 7.022178    8.553787333
ENSMUSG00000020758  ENSMUSG00000020758  Itgb4   TSS23937,TSS28540,TSS29211,TSS34600,TSS36953,TSS4070,TSS6591,TSS68296   11:115974708-116008412  130.2124    117.3862    129.323 134.1108667 134.8743333 165.3330667
ENSMUSG00000069833  ENSMUSG00000069833  Ahnak   TSS54612    19:8989283-9076919  116.3223333 135.2628    130.1286    147.045 142.8164    127.2352
ENSMUSG00000033863  ENSMUSG00000033863  Klf9    TSS87300    19:23141225-23166911    23.23418667 27.46006    26.56143333 21.09004667 18.47022    16.63767333
ENSMUSG00000069835  ENSMUSG00000069835  Sat2    TSS71535,TSS9615    11:69622023-69623870    0.975045133 0.886760067 1.593631333 1.469496    1.2373384   1.292182733
ENSMUSG00000028233  ENSMUSG00000028233  Tgs1    TSS24151,TSS28446,TSS50213,TSS68499,TSS79096    4:3574874-3616619   4.221024667 4.212087333 4.160574    5.113266667 6.917347333 5.22148
ENSMUSG00000028232  ENSMUSG00000028232  Tmem68  TSS12134,TSS25773,TSS25778,TSS49743,TSS7797 4:3549040-3574853   4.048868    3.906129333 6.024607333 4.613682    6.292972    4.287184

我为 t-test 编写了相同的脚本并且它有效。但是 "wilcox" 的替换测试给我错误:

Error in wilcox.test.default(x[i, 1:3], x[i, 4:6], var.equal = TRUE) : 
  'x' must be numeric

我的代码是:

library(preprocessCore)
err <-file("err.Rout", open="wt")
sink(err, type="message")
x <- read.table("Data.txt", row.names=1, header=TRUE, sep="\t",        na.strings="NA")
x<-x[,5:ncol(x)] 
p<-matrix(0,nrow(x),3)
for (i in 1:nrow(x)) { 
myTest <- try(wilcox.test(x[i,1:3], x[i,4:6], var.equal=TRUE))
if (inherits(myTest, "try-error"))
{ p[i,2]=1 } 
else 
{p[i,2]=myTest$p.value; num=rowMeans(x[i,1:3], na.rm = FALSE);    den=rowMeans(x[i,4:6], na.rm = FALSE); ratio=num/den; p[i,1]=ratio }
}
p[,3] = p.adjust(p[,2], method="none")
colnames(p) <- c("FoldChange", "p-value", "Adjusted-p")
write.table(p, file = "tmpPval-fold.txt", append = FALSE, quote = FALSE, sep = "\t", row.names = FALSE, col.names = TRUE)
sink()

非常感谢你在这件事上的帮助。正如我所说,如果我使用测试而不是 'wilcox',它会完美地工作。

目前您的代码有(至少)两个问题,其中之一是导致该错误的原因。 x[i,1:3] 返回的对象的 class 是 data.frame,它是一个列表对象,在 wilcox.test 中未通过 is.numeric 测试。尝试强制:

wilcox.test(as.numeric(x[1,(1:3)]), as.numeric(x[1,(4:6)]), var.equal=TRUE)

但是 what-the-F 是 var.equal 在调用 non-parametric 测试时所做的,该测试不会有任何等方差假设? (实际上它正在发生的事情被忽略了。)当你只给出 3 个项目而不是 3 个项目时,你如何期望从测试中获得有用的信息。那绝不是 "significant" 甚至是特别有用的信息。我怀疑 t.test 在 3 比 3 时是否可以提供信息,但是基于值排序的 non-parametric 测试更不可能给出 [=21= 的统计信号].