You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

批量对多列执行Fisher精确检验的R代码实现需求

批量执行Fisher精确检验的R代码方案

数据集

提供的数据集如下:

df<-data.frame(ID=c(1:5),P1=c("A","A","A","B","B"),P2=c("T","T","C","N","R"),P3=c("G","G","G","B","B"),A1=c("Present","Present","Present","absent","absent"),
               B1=c("absent","Present","Present","absent","absent"),C1=c("absent","absent","Present","absent","absent") )
df

需求

需批量验证以下变量对的关联并执行Fisher精确检验:

  • P1分别与A1、B1、C1
  • P2分别与A1、B1、C1
  • P3分别与A1、B1、C1

单组检验示例代码:

fisher<-with(df, table(P1, A1))
fisher
fisher_test(fisher)

批量实现方案

以下提供两种高效的批量处理方案,适配大规模数据集:

方案1:基础R循环实现

# 定义分组变量(P开头)和结果变量(A/B/C1)
group_vars <- c("P1", "P2", "P3")
result_vars <- c("A1", "B1", "C1")

# 创建空列表存储检验结果
fisher_results <- list()

# 双重循环遍历所有变量对
for (group in group_vars) {
  for (result in result_vars) {
    # 生成列联表
    tab <- table(df[[group]], df[[result]])
    # 执行Fisher精确检验(若使用rstatix包的fisher_test,替换fisher.test即可)
    test_res <- fisher.test(tab)
    # 以"分组变量-结果变量"为名称存储结果
    fisher_results[[paste(group, result, sep = "-")]] <- test_res
  }
}

# 查看完整检验结果
fisher_results

# 提取关键指标生成结构化表格
result_summary <- do.call(rbind, lapply(fisher_results, function(res) {
  data.frame(
    p_value = res$p.value,
    odds_ratio = res$estimate,
    conf_low = res$conf.int[1],
    conf_high = res$conf.int[2]
  )
}))
rownames(result_summary) <- names(fisher_results)
result_summary

方案2:tidyverse风格实现(更简洁)

依赖tidyverse和broom包实现整洁化批量处理:

library(tidyverse)
library(broom)

# 生成所有变量对组合
var_combinations <- crossing(group_var = group_vars, result_var = result_vars)

# 批量执行检验并整理结果
tidy_fisher_results <- var_combinations %>%
  mutate(
    # 生成对应列联表
    contingency_table = map2(group_var, result_var, ~table(df[[.x]], df[[.y]])),
    # 执行检验并转换为整洁数据框
    test_output = map(contingency_table, ~broom::tidy(fisher.test(.x)))
  ) %>%
  unnest(test_output) %>%
  select(-contingency_table) # 按需保留列联表列

# 查看整理后的结构化结果
tidy_fisher_results

注意事项

  • 若使用示例中的fisher_test(rstatix包函数),只需将代码中的fisher.test替换为fisher_test即可。
  • 若部分列联表不满足检验条件(如单元格全为0),代码会自动抛出提示,可根据实际情况调整变量筛选逻辑。

内容的提问来源于stack exchange,提问作者Marwah Al-kaabi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 00:35:20