【问题标题】:Perform chisq or fisher test on grouped data frame in r对 r 中的分组数据帧执行 chisq 或 Fisher 测试
【发布时间】:2019-12-02 16:04:05
【问题描述】:

我有一个数据框,我想在其中执行组内的 Fisher 精确检验。例如,

df <- data.frame(
  grouping = rep(c('a', 'b', 'c', 'd'), each = 2),
  factor = rep(c('healthy', 'sick'), 4), 
  increase = sample(1:10, 8, replace = T),
  decrease = sample(0:10, 8, replace = T))

对于每个“分组”变量,我想要一个用于 Fisher 精确检验的 p 值,比较健康与生病的每个因素的“增加”和“减少”列。我该如何格式化,并为每个 p 值创建一个新列?我生成的数据框应该是 4 行,总结了“分组”列和 Fisher 检验 p 值?

【问题讨论】:

  • 到目前为止你有什么尝试?

标签: r dataframe


【解决方案1】:

一个简单的循环就可以解决问题:

output<-lapply(unique(df$grouping), function(letter){
  testdf<-df[df$grouping==letter,]
  pvalue<-fisher.test(testdf[,c("increase", "decrease")])$p
  out<-data.frame(letter, pvalue)
})

do.call(rbind, output)

#  letter     pvalue
#1      a 0.67276888
#2      b 0.02941176
#3      c 0.04076367
#4      d 0.41971014

如果有多个分组列,则通过将分组列粘贴在一起来创建一个新列,并使用上面的例程或使用 dplyr 包来执行多个分组:

library(dplyr)
 df %>% group_by(grouping, grouping2) %>%
   summarize(pvalue=fisher.test(matrix(c(increase, decrease), nrow =2))$p)

【讨论】:

  • 实际上我意识到在我的真实数据中我有两个分组变量。如果它们被称为 grouping1 和 grouping2,我该如何修改您的回复以兼顾两者?
猜你喜欢
  • 2013-02-05
  • 1970-01-01
  • 1970-01-01
  • 2015-05-12
  • 2019-03-05
  • 2017-12-26
  • 2012-09-13
  • 1970-01-01
  • 2022-07-22
相关资源
最近更新 更多