【问题标题】:Looping a Student T-Test and Chi-Squared with Missing Data in R在 R 中使用缺失数据循环学生 T 检验和卡方
【发布时间】:2014-07-24 18:46:37
【问题描述】:

我正在尝试使用 R 对大型数据集进行学生 t 检验和卡方检验。由于我对 R 相当陌生,我的经验不足一直阻碍我自己的代码取得很大成功。

两个数据集都缺少数据,看起来像这样:

 AA               assayX activity        assayY1 activity      assayY2 activity
  chemical 1           TRUE                       0                12.2    
  chemical 2           TRUE                                        0
  chemical 3                                      45.2             35.6
  chemical 4           FALSE                      0                0 

 AB                assayX activity        assayY1 activity       assayY2 activity
 chemical 1           TRUE                       FALSE             TRUE
 chemical 2           TRUE                                         FALSE
 chemical 3                                      TRUE              TRUE  
 chemical 4           FALSE                      FALSE             FALSE 

由于它是一个大型数据集,我正在尝试创建一个代码,我可以在其中将assayX 与所有assayY 进行比较。我希望为第一个数据集创建一个学生 t 检验循环,并为第二个数据集创建一个卡方循环。我之前成功地为相关分析创建了一个循环代码,所以我的代码基于这个想法。

x<- na.omit(mydata1[, c(assayX)])
y<- na.omit(mydata1[, c(assayY1:assayYend)])
lapply(y, function(x)t.test(y~x))

x<-na.omit(mydata2[, c(assayX)])
y<- na.omit(mydata2[, c(assayY1:assayYend)]
lapply(y, x=x, chisq.test)

第一个代码的问题是: 无效变量 y

第二个代码的问题是: x 和 y 必须具有相同的长度

我在这里和那里进行了一些小调整,只是遇到了不同类型的错误,比如没有足够的 'y' 观察值等等。我一直主要使用这个网站来了解 R 是如何工作的,所以我希望你们能为新人提供一个聪明的小解决方案。

【问题讨论】:

    标签: r loops chi-squared


    【解决方案1】:

    经过很长时间并获得了 R 的经验,我可以回答我自己的问题。首先是将数据文件更改为 NA 空白。

    df1 <- read.csv("data2.csv", header=T, na.strings=c("","NA"))
    

    那么对于学生.t

    df1.p= rep(NA, 418) 
     for (i in length(df1$Assays)){
    test= t.test(df1[,c(i)]~df1$assay.activity)
    current.p.val= test$p.value
    p.df1[i]=current.p.val
     }
    

    然后添加 Pearson's 或 Chi sq(实际上并不适合此数据集,但只是作为 ex)

    df1.p.2= rep(NA, length(df1$Assays))
    df1.r.2= rep(NA, length(df1$Assays))
     for (i in length(df1$Assays)){
       test2= cor.test(df1$assay.activity, df1[,c(i)], mehtod='pearson')
       current.p.val2= test2$p.value
       current.rval = test2$estimate
       df1.p.2[i] = current.p.val2
       df1.r.2[i] = current.rval
     }
    df2= cbind(df1$Assays, df1.p, df1.p.2, df1.r.2)
    

    然后我将其过滤为仅具有 0.1 显着性的化验,但这不是这里的问题。如果你想知道,只要问一个问题,我会在那里发布答案:)

    【讨论】:

      【解决方案2】:

      我认为您的数据未正确传递给测试。 t.test 有关于数据是否配对的参数(默认为 false)以及如果您想从默认值更改如何处理 NA。您可能应该使用这些而不是预先省略 NA。数据中包含 NA 的示例:

      set.seed(1)
      y <- runif(30, 0, 1)
      y.NA <- c(3,24,27)
      y[y.NA] <- NA
      x <- runif(30, 0, 1)
      x.NA <- c(1,3,8,12,21)
      x[x.NA] <- NA
      t.test(x,y)
      

      对于 chisq.test,您可以使用 table 函数。 chisq.test(table(x,y))$p.value

      【讨论】:

      • 感谢您的回复。我得到一个卡方检验的错误,说 x 和 y 值必须是相同的长度,而可变长度对于 t 检验也有不同的错误。反正就在附近?
      • 我认为问题在于如何构建数据集并发送到假设检验。我将使用测试数据集进行更新。
      猜你喜欢
      • 1970-01-01
      • 2013-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-13
      • 2021-06-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多