1

我正在尝试使用 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 是如何工作的,所以我希望你们能为新人提供一个聪明的小解决方案。

4

2 回答 2

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 显着性的分析,但这不是这里的问题。如果你想知道,只要问一个问题,我会在那里发布答案:)

于 2015-12-03T12:53:22.270 回答
0

我认为您的数据未正确传递给测试。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

于 2014-07-24T20:48:06.553 回答