Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 使用tapply/dapply等进行t试验_R - Fatal编程技术网

R 使用tapply/dapply等进行t试验

R 使用tapply/dapply等进行t试验,r,R,我有一个来自interlab研究的数据帧,如下所示 基本上实验室=实验室,材料=材料,工厂=强度,厚度=厚度 我想要测试数据来比较每种材料的每个实验室 也就是说,对于mat=v,我想运行一个t检验来比较实验室B和实验室S 材料c、n和l也是如此 由于我无法有效地解决这个问题,我使用intAction函数创建了一个列(我知道一定有更简单的方法!),然后对我感兴趣的每个组合运行t.tests # create a new column with lab/mat factors combined in

我有一个来自interlab研究的数据帧,如下所示

基本上实验室=实验室,材料=材料,工厂=强度,厚度=厚度

我想要测试数据来比较每种材料的每个实验室

也就是说,对于mat=v,我想运行一个t检验来比较实验室B和实验室S

材料c、n和l也是如此

由于我无法有效地解决这个问题,我使用intAction函数创建了一个列(我知道一定有更简单的方法!),然后对我感兴趣的每个组合运行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
但这是行不通的

非常感谢您的帮助。 皮特

编辑:除了下面的评论,我还研究了pairwise.t.test函数在这方面的功能,但它做了太多的比较(即,它对lab B腈和lab S乙烯基进行了t-test,这是不相关的。我这样称呼它:

tapply(interlab$fab, list(interlab$lab,interlab$mat), t.test)
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 

我理解进行多重比较和调整显著性标准的问题。我只是无法让成对调用只进行我感兴趣的测试。

有一个使用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)

FUN您至少应该调整p值以进行重复测试。但是,混合效果模型可能更适合您的问题。当然,我应该提到我确实尝试过成对比较(请参见上面的编辑).我不能完全理解你答案的第一部分,但第二部分我能理解,并给出了与“手动”相同的值。非常好-非常感谢。