如何进行学生t测试包含多个观察

时间:2016-04-25 18:51:05

标签: r statistics apply

这是我的数据,900个9个变量的obs。 我尝试了apply函数但无法在apply函数中提供参数。 数据看起来像这样。

ID A1 A2 A3 A4 A5 B1 B2 B3 B4
1  10 12 11 13 15 50 55 56 57
2  20 22 23 21 20 60 76 78 71
3  10 12 13 15 14 50 55 52 53
...
90000 11 12 13 15 12 21 22 23 24

我需要进行900000次两次样本学生t检验,从这9个变量分为2组(A组和B组)。 任何人都可以在这里发布代码吗?

编辑:感谢您的评论,我做了以下更改。 样本数据

testx <- structure(list(RAS = c(0.554246173201929, 0.292104162206435, 
0.201932255556074), RASSYX2 = c(0.673628450549317, 0.370730964566956, 
0.240868661848041), RASSYX3 = c(0.592972062397773, 0.387737676651884, 
0.258971711587807)), .Names = c("RAS", "RASSYX2", "RASSYX3"), row.names =c(NA, 
3L), class = "data.frame")

testy <- structure(list(test2 = c(0.682230776398731, 0.299007374701463, 
0.21735652533812), test3 = c(0.660308325914822, 0.340956947569367, 
0.255153956615115), test4 = c(0.625506839884405, 0.281695127521423, 
0.265769288207206)), .Names = c("test2", "test3", "test4"), row.names = c(NA, 
3L), class = "data.frame")

testx的row1应该与testy的row1进行比较,并且将有900000行,我只需要将此测试自动化900000次。 所以我希望做双边等方差t检验,置信水平为95%。

我试过这个,但显然y并不是我想要测试的。

apply(testx,1,t.test,testy)

1 个答案:

答案 0 :(得分:0)

感谢您澄清您的问题。在使用模拟数据进行澄清之前,我写了以下解决方案。

这是模拟数据集。如果你的数据是广泛的,你应该考虑把它变成长形式...除非你正在做一个你没有提到的配对测试。

set.seed(1)

d<-data.frame(PatID=1:100, 
              group=rep(c('A','B'),50),
              Var1=rnorm(100, 500, 20),
              Var2=rnorm(100, 500, 20),
              Var3=rnorm(100, 500, 20),
              Var4=rnorm(100, 500, 20))

现在我们遍历我们要测试的列名列表并执行测试。

vars_to_test<-c('Var1','Var2','Var3','Var4')

t_res<-lapply(vars_to_test, function(var){ t.test( d[,var] ~ d[,'group'])})

names(t_res)<-vars_to_test

t_res现在是一个列表列表...每个t-test一个元素。因为我命名了t_res的元素,所以我可以轻松访问任何变量的测试结果:

在这种情况下,我访问A组和B组之间平均Var1的t检验测试差异的p值:

> t_res[['Var1']]$p.value
[1] 0.3373045