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

我无法理解向量出了什么问题。你能告诉我吗?我一直无法弄清楚。

【问题讨论】:

向我们展示您的数据的样子。使用strsummary。如果您通过一个简单的示例使您的错误可重现,那就太好了。 NAs 与否(请参阅下面的 cmets),如果我的代码正确,您似乎正在对长度为 2(行在 PDGT 中)针对长度为 3 的 'y 向量(PGT 中的行)。相当小的样本。如果我错了,请纠正我。 是的,这是真的,它是 3 对 2,但是是的,在我对某些行运行 t.test 之后,我有很多值 NaN,如果我必须删除低丰度表达式值那么矩阵大小会减小.. 一个小注解:没有必要将您的数据框一分为二并遍历行。您可以对原始数据逐行应用您的函数:pvals &lt;- 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 检验错误的主要内容,如果未能解决你的问题,请参考以下文章

python数据分析之卡方检验T检验方差分析

python数据分析之卡方检验T检验方差分析

常用检验方法

Pairwise T检验:complete.cases(x,y)中的错误:并非所有参数的长度都相同吗?

方差分析

T检验与F检验的区别