0

我有一个来自 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 

我理解进行多重比较和必须调整显着性标准的问题。我只是无法得到成对的调用来只做我感兴趣的测试。

4

1 回答 1

1

有一个使用包 plyr 的解决方案

FUN <- function(x) {
 mat <- matrix(numeric(), 1, 2)
 colnames(mat) <- tail(colnames(x),2)
 for (i in 1:ncol(mat)) {
    mat[1,i] <- t.test(x[,"thick"]~x[,"lab"])$p.value
    mat[1,i] <- t.test(x[,"fab"] ~ x[,"lab"])$p.value
  }
  mat  
}
# if you are only interested by fab :
 FUN <- function(x) {
   t.test(x[,"fab"] ~ x[,"lab"])$p.value  
  }

ddply(tab, .(mat), FUN)

高温高压

于 2013-04-22T09:28:24.647 回答