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