【问题标题】:reducing the number of comparisons in pairwise.t.test减少pairwise.t.test中的比较次数
【发布时间】:2013-04-22 12:28:06
【问题描述】:

这是我之前提出的一个问题:using tapply/dapply etc for 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 函数,但它进行了太多比较(即,它对实验室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 的 cmets 之后

虽然似乎无法以这种方式使用 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 在这方面的帮助。

【问题讨论】:

    标签: r


    【解决方案1】:

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

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

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

    【讨论】:

    • 否 - 尚未运行方差分析。接下来会看。回复:p.adjust,我会设置 n=4 吗? (即,我在每个实验室中测试了 4 种材料)。还是应该使用 5 个(4 个材料 + 2 个实验室 -1)?
    • 这只是 p 值的数量。在您的情况下,它似乎是 4。
    • 感谢@John - 如果将所有 p 值传递给函数,您不需要该参数:res$adjpvalue&lt;-p.adjust(res$V1) 会做到这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-30
    • 1970-01-01
    • 2017-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多