t 检验错误
Posted
技术标签:
【中文标题】t 检验错误【英文标题】:Error with t-test 【发布时间】:2013-08-07 04:15:53 【问题描述】:我在正常的 t 检验中遇到错误:
data <- read.table("/Users/vdas/Documents/RNA-Seq_Smaples_Udine_08032013/GBM_29052013/UD_RP_25072013/filteredFPKM_matrix.txt",sep="",header=TRUE,stringsAsFactors=FALSE)
PGT <- cbind(data[,2],data[,7],data[,24])
PDGT <- cbind(data[,6],data[,8])
pval2 <- NULL
for(i in 1:length(PGT[,1]))
pval2 <- c(pval2,t.test(as.numeric(PDGT[i,]),as.numeric(PGT[i,]))$p.value)
print(i)
错误:
Error in t.test.default(as.numeric(PDGT[i, ]), as.numeric(PGT[i, ])) :
not enough 'x' observations
我无法理解向量出了什么问题。你能告诉我吗?我一直无法弄清楚。
【问题讨论】:
向我们展示您的数据的样子。使用str
和summary
。如果您通过一个简单的示例使您的错误可重现,那就太好了。
NAs 与否(请参阅下面的 cmets),如果我的代码正确,您似乎正在对长度为 2(行在 PDGT 中)针对长度为 3 的 'y 向量(PGT 中的行)。相当小的样本。如果我错了,请纠正我。
是的,这是真的,它是 3 对 2,但是是的,在我对某些行运行 t.test 之后,我有很多值 NaN,如果我必须删除低丰度表达式值那么矩阵大小会减小..
一个小注解:没有必要将您的数据框一分为二并遍历行。您可以对原始数据逐行应用您的函数:pvals <- apply(X = data, MARGIN = 1, function(dd) t.test(x = dd[c(6, 8)], y = dd[c(2, 7, 24)])$p.value)
【参考方案1】:
您的数据很可能具有NA
值。例如:-
x<-rep(NA,4)
t.test(x)
Error in t.test.default(x) : not enough 'x' observations
【讨论】:
是的,在我的数据中,我有 NaN 值,实际上这些是基因的表达值,所以有些非常低,所以它们的值为 0。你认为这是这个错误的原因吗?如果是这样,在这种情况下,我将无法执行 t.test,因为某些行在一个条件下有 3 个字段为 0,而在第二个条件下的其他字段有值。我说的对吗? 在我看来,缺失值是t.test
失败的原因。最好的办法是跳过所有具有任何 NA
值的行。【参考方案2】:
根据您的评论,错误似乎是由于缺少值。您可以通过设置na.rm=TRUE
排除缺失值。参考:-Missing value。在发布 R 问题之前,请查看 How to make a great R reproducible example?
【讨论】:
【参考方案3】:要删除 NA
值,请执行以下操作:
> a <- sample(c(NA, 1:5), 20, replace = TRUE)
> a
[1] NA 1 2 NA 1 5 4 4 3 3 2 4 NA 4 NA NA 1 2 NA 5
> b <- na.omit(a)
> b
[1] 1 2 1 5 4 4 3 3 2 4 4 1 2 5
【讨论】:
以上是关于t 检验错误的主要内容,如果未能解决你的问题,请参考以下文章