在R中循环学生T检验和Chi-Squared

时间:2014-07-24 18:46:37

标签: r loops chi-squared

我正在尝试使用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与所有化学分析进行比较。我希望为第一个数据集创建一个学生t检验循环,并为第二个数据集创建一个chi平方循环。我以前成功地创建了一个用于相关性分析的循环代码,因此我将我的代码基于该想法。

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必须具有相同的长度

我已经在这里和那里做了一些小的调整,并且有不同类型的错误,例如不够的&#39; y&#39;观察等。我一直主要使用这个网站来弄清楚R的工作方式,所以我希望你们能为一个新人提供一个聪明的小解决方案。

2 个答案:

答案 0 :(得分:1)

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

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

然后是student.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或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显着性的测定,但这不是问题。如果您想知道这一点,只需提出一个问题,我会在那里发布答案:)

答案 1 :(得分:0)

我认为您的数据没有正确传递给测试。 t.test有关于数据是否配对的参数(默认为false)以及如果要从defalt更改,如何处理NA。您可能应该使用这些而不是预先省略NAs。数据中使用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,您可以使用表函数。 chisq.test(表(X,Y))$ p.value