0

这是我之前提出的一个问题所激发的一个问题:使用tapply/dapply等进行t.tests

我有一个来自 interlab 研究的数据框,如下http://pastebin.com/AD57AYD1

本质上lab=Laboratory,mat=material,fab=strength,thick=thickness

我想要 t.test 数据来比较每种材料的每个实验室。即,对于 mat=v,我想运行一个 t.test 来比较实验室 B 和实验室 S。同样对于材料 c、n 和 l。

我之前的问题是关于使用 plyr 允许我为这些组合中的每一个运行 t.tests 。然而,有人指出,需要考虑多重比较的问题。

我曾尝试对我的数据使用paired.t.test 函数,但它进行了太多比较(即,它对lab B 腈与lab 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 函数,但可以在调用 p.adjust 函数时使用来自@droopy 的先前解决方案:

 
> 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 在这方面的帮助。

4

1 回答 1

2

没有办法按照您的要求进行操作,但您可以做的是分别运行 4 个 t 检验,或者从pairwise.t.test调整设置为无时提取您想要检查的 p 值,并使用该函数p.adjust来纠正它们。

运行 pairwise.t.test 与单独测试的决定归结为使用所有组的汇总方差估计或单独的方差。你应该事先决定。

顺便说一句,您是否进行了方差分析?从您的 p 值的外观来看,我打赌您不需要运行任何这些测试来简单地从 ANOVA 结果中说明发现的模式。

于 2013-04-22T13:01:26.750 回答