【问题标题】:Error with t-testt 检验错误
【发布时间】: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)

标签: r bioinformatics hypothesis-test


【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-19
      • 2020-04-09
      • 2012-11-04
      • 1970-01-01
      • 2018-05-17
      • 2018-02-28
      相关资源
      最近更新 更多