事后成对fisher精确检验

事后成对fisher精确检验,r,R,我曾经做过2因素2水平的实验,后来变成了3因素2水平的实验 通过使用浆糊,我可以从我的两个因子中选出4个独特的组,并进行Fisher测试,结果是一个生物体是否存活或死亡 fisher.test(mortal$alv.dead,paste(mortal$Strain,mortal$capsule)) 但是,当我想调查各组之间的两两比较时,我不得不进行一些不雅观的过滤,以便一次只有两组人进入分析。现在我有了更多的组,手工编写每个配对的代码太单调了。这是一个Fisher检验,在一个分析中测试所有的组

我曾经做过2因素2水平的实验,后来变成了3因素2水平的实验

通过使用浆糊,我可以从我的两个因子中选出4个独特的组,并进行Fisher测试,结果是一个生物体是否存活或死亡

fisher.test(mortal$alv.dead,paste(mortal$Strain,mortal$capsule))
但是,当我想调查各组之间的两两比较时,我不得不进行一些不雅观的过滤,以便一次只有两组人进入分析。现在我有了更多的组,手工编写每个配对的代码太单调了。这是一个Fisher检验,在一个分析中测试所有的组

fisher.test(mortal$alv.dead,paste(mortal$Strain,mortal$capsule,mortal$cassette))

如何设置创建和测试所有可能配对的方法?

使用函数combn()相当简单。您应该考虑的唯一一点是,当您将fisher.test()调用放入函数中时,combn不会正确返回组的名称

因此,我们需要相应地调整列表中的元素:

一些玩具数据:

mortal <- data.frame(
      alv.dead = sample(c("alv","dead"),30,replace=T),
      train = sample(letters[1:3],30,replace=T),
      capsule = sample(letters[4:5],30,replace=T),
      cassette = sample(letters[6:7],30,replace=T)
      )

mortal Try of@mbq:这确实是一个编程问题,所以这里也可以回答。我不打算谈论方法的正确性,这不是问题的真正重点。@Joris我同意;这是一则广告。亲爱的乔里斯,你是个天才!哇,效果很好。我不知道combn函数。我能想到这么多的应用。简化论点很有趣。如果设置为False,那么阅读和从容地思考数据是很好的,但是当想要快速比较数据时,simplify=TRUE是令人惊讶的,因为它将所有数据放在一个数组中。
mortal$groups <- paste(mortal$train,mortal$capsule,mortal$cassette,sep="")
unique.groups <- unique(mortal$groups)
combn(unique.groups,2,function(x){
    id <- mortal$groups %in% x
    test <- fisher.test(table(mortal$alv.dead[id],mortal$groups[id]))
    test$data.name <-
      paste(
        unique(
          as.character(mortal$groups[id])
        ),collapse="-")
    return(test)}
  ,simplify=FALSE)