我有一个来自 interlab 研究的数据框,如下http://pastebin.com/AD57AYD1
本质上lab=Laboratory,mat=material,fab=strength,thick=thickness
我想要 t.test 数据来比较每种材料的每个实验室。
即,对于 mat=v,我想运行一个 t.test 来比较实验室 B 和实验室 S。
对于材料 c、n 和 l 也是如此。
由于我无法弄清楚如何有效地做到这一点,我使用 intaraction 函数创建了一个列(我知道必须有更简单的方法!)然后为我感兴趣的每个组合运行 t.tests。
# create a new column with lab/mat factors combined
interlab$allfacts<-interaction(interlab$lab,interlab$mat)
tv<-with(interlab, t.test(fab[allfacts == "S.v"],
fab[allfacts == "B.v"],var.equal=FALSE))
tv
tl<-with(interlab, t.test(fab[allfacts == "S.l"],
fab[allfacts == "B.l"],var.equal=FALSE))
tl
... etc etc
我确信我应该能够使用其中一个 plyr 函数,也许是这样的:
tapply(interlab$fab, list(interlab$lab,interlab$mat), t.test)
但这行不通。
非常感谢任何帮助。皮特
编辑:除了下面的评论之外,我还查看了 pairwise.t.test 在这方面的功能,但它进行了太多的比较(即,它对实验室 B 腈与实验室 S 乙烯基进行了 t 检验——即无关紧要。我这样称呼它:
pairwise.t.test(interlab$fab,interaction(interlab$mat,interlab$lab),paired=FALSE, pool.sd=FALSE)
它给了我
> pairwise.t.test(interlab$fab,interaction(interlab$mat,interlab$lab),paired=FALSE, pool.sd=FALSE)
Pairwise comparisons using t tests with non-pooled SD
data: interlab$fab and interaction(interlab$mat, interlab$lab)
c.B l.B n.B v.B c.S l.S n.S
l.B 0.54484 - - - - - -
n.B 3.8e-07 1.9e-06 - - - - -
v.B 0.93881 0.22393 3.6e-07 - - - -
c.S 0.00576 0.93881 1.2e-05 0.00026 - - -
l.S 0.00067 0.48601 2.5e-05 4.6e-05 0.89883 - -
n.S 4.3e-12 2.2e-10 0.92366 5.4e-12 6.7e-10 7.7e-10 -
v.S 0.93881 0.93881 1.9e-06 0.31885 0.01217 0.00169 1.3e-10
P value adjustment method: holm
我理解进行多重比较和必须调整显着性标准的问题。我只是无法得到成对的调用来只做我感兴趣的测试。