【问题标题】:Post-hoc pairwise fisher exact test事后成对 Fisher 精确检验
【发布时间】:2010-09-23 04:20:34
【问题描述】:

我以前有 2 因子 x 2 水平的实验,后来变成了 3 因子 x 2 水平的实验。

通过使用 paste,我可以从我的两个因素中创建 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))

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

【问题讨论】:

  • @mbq :这确实是一个编程问题,所以也可以在这里回答。我不打算谈论这种方法的正确性,这并不是问题的重点。
  • @Joris 我同意;这更像是一个广告。

标签: r


【解决方案1】:

使用函数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$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)

【讨论】:

  • 亲爱的乔里斯,你是个天才!哇,效果很好。我不知道 combn 功能。我能想到很多应用。简化论证很有趣。如果保留为 False,则可以轻松阅读并悠闲地思考数据,但是当想要快速比较它们时,simplify=TRUE 非常棒,因为它将所有数据放在一个数组中。
猜你喜欢
  • 2021-11-11
  • 1970-01-01
  • 1970-01-01
  • 2016-04-29
  • 1970-01-01
  • 2017-07-29
  • 1970-01-01
  • 1970-01-01
  • 2014-01-26
相关资源
最近更新 更多