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

在R中对数据框各位点逐行执行Fisher精确检验的技术求助

针对每个基因座执行Fisher精确检验的解决方案

你的数据是长格式(每个基因座对应norm和tum两行),需要先构建每个位点的2×2列联表,再执行Fisher检验并校正p值。以下是修正后的代码和步骤:

必要依赖包

先加载所需的R包:

library(dplyr)
library(tidyr)
library(broom)

核心代码

Fisher_result <- tumNorm_dt_merged_long %>%
  # 按基因座唯一标识分组
  group_by(chromosome, start, end) %>%
  summarise(
    # 构建当前位点的2×2列联表矩阵(行:norm/tum;列:未甲基化/甲基化计数)
    cont_table = list(cbind(count_unmethylated, count_methylated)),
    # 执行Fisher检验并整理结果为数据框格式
    fisher_res = list(tidy(fisher.test(cont_table[[1]]))),
    .groups = "drop"
  ) %>%
  # 展开检验结果列
  unnest_wider(fisher_res) %>%
  # 移除临时的列联表列(可选)
  select(-cont_table) %>%
  # 对所有p值执行BH校正
  mutate(p.adjust = p.adjust(p.value, method = "BH"))

代码说明

  1. 分组与列联表构建:group_by锁定每个唯一基因座,cbind将当前组的count_unmethylated和count_methylated合并为2×2矩阵,完全匹配你示例中的列联表结构。
  2. Fisher检验与结果整理:fisher.test处理列联表,broom::tidy将检验结果(p值、优势比OR、置信区间等)转换为结构化数据框,方便后续分析。
  3. p值校正:最后用p.adjust统一执行BH法校正,得到校正后的p值p.adjust。

结果示例

运行后Fisher_result会包含每个基因座的关键信息:

  • 基因座标识:chromosome、start、end
  • Fisher检验原始结果:p.value、estimate(优势比OR)、conf.low/conf.high(OR的95%置信区间)
  • 校正后p值:p.adjust

内容的提问来源于stack exchange,提问作者sahuno

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 21:07:26