这是前一个问题刺激的问题:using tapply/dapply etc for t.tests
我有一个来自interlab研究的数据框如下http://pastebin.com/AD57AYD1
基本实验室=实验室,垫=材料,工厂=强度,厚=厚度
我希望t.test数据比较每种材料的每个实验室。即,对于mat = v,我想运行t.test来比较实验室B和实验室S.类似于材料c,n和l。
我之前的问题是关于使用plyr允许我为每个组合运行t.tests。但是,有人指出,需要考虑多重比较的问题。
我试图在我的数据上使用paired.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
我担心调整后的p值是错误的,因为我们没有将材料n与l或l与c进行比较 - 在两个实验室中测试时,我们总是使用相同的材料(即材料') l'在实验室“B”和“S”)。
有没有办法对数据进行子集/分组,以便适当调用 pairwise.t.test只给我以下比较?
c.B l.B n.B v.B c.S l.S n.S
l.B - - - - - - -
n.B - - - - - - -
v.B - - - - - - -
c.S 0.00576 - - - - - -
l.S - 0.48601 - - - - -
n.S - - 0.92366 - - - -
v.S - - - 0.31885 - - -
此致 皮特
编辑:@John的评论之后虽然似乎不可能以这种方式使用pairwise.t.test函数,但@droopy中的先前解决方案可用于调用p.adjust函数:
> FUN<- function(x) {
t.test(x[,"fab"] ~ x[,"lab"])$p.value
}
res<-ddply(interlab, .(mat), FUN)
res$adjpvalue<-p.adjust(res$V1)
res
mat V1 adjpvalue
1 c 0.0004798071 0.001919228
2 l 0.0607510365 0.121502073
3 n 0.1847312857 0.184731286
4 v 0.0354274420 0.106282326
感谢@John和@droopy对此的帮助。
答案 0 :(得分:2)
没有办法按照你的要求做,但你可以做的是分别运行你的4个t测试,或者当调整设置为无时,从pairwise.t.test
中提取你想要检查的p值,并使用函数p.adjust
来纠正它们。
运行pairwise.t.test与单独测试的决定归结为使用所有组中的汇总方差估计或单独的差异。你应该事先做出决定。
顺便说一下,你有没有运行ANOVA?从你的p值的外观来看,我打赌你不需要运行任何这些测试就可以简单地从ANOVA结果中找出调查结果的模式。