Yuanclaw / docs /BACKGROUND_GENE_SET_FIX.md
huashu's picture
Export YuanSeq to Hugging Face without binary assets
7e6a9d1

背景基因集(Universe)修复说明

问题背景

根据 Genome Biology 2015 文章指出,GO/KEGG富集分析中如果不设置背景基因集(universe),会导致:

  1. 统计幻觉:几乎所有分析都能跑出显著通路
  2. 假阳性率高:结果反映检测偏倚而非真实生物学
  3. 可重复性差:不同实验间结果不一致

修复内容

1. 差异分析模块 (differential_analysis.R)

  • 新增函数get_filtered_expr_genes() - 保存过滤后的表达矩阵基因列表
  • 修改返回值get_deg_results() 现在返回包含两个元素的列表:
    • deg_df: 差异分析结果
    • background_genes: 过滤后的基因列表(用于背景基因集)
  • 智能处理
    • 对于counts数据:自动提取检测到的基因
    • 对于上传的差异基因文件:返回NULL(无法获取原始表达矩阵)

2. GO分析模块 (go_analysis.R)

  • 基于差异基因的GO分析
    • 自动使用检测到的基因作为背景基因集
    • 将基因符号转换为ENTREZID用于 clusterProfiler::enrichGO
    • 添加 universe 参数到 enrichGO() 调用
  • 单列基因GO分析
    • 添加选项让用户选择是否使用背景基因集
    • 选项1:不使用背景(警告假阳性风险)
    • 选项2:使用全基因组作为背景(虽然不是最理想,但比没有好)

3. KEGG分析模块 (kegg_enrichment.R)

  • 基于差异基因的KEGG分析
    • 自动使用检测到的基因作为背景基因集
    • 支持两种KEGG分析方法:
      1. biofree.qyKEGGtools::enrich_local_KEGG(如果可用)
      2. clusterProfiler::enrichKEGG(备用方案)
    • 动态检测函数是否支持 universe 参数
  • 单列基因KEGG分析
    • 添加背景基因集选项
    • 与主KEGG分析使用相同的逻辑

4. 其他模块的适配

  • GSEA分析模块 (gsea_analysis.R):更新以处理新的 deg_results 结构
  • 转录因子活性模块 (tf_activity.R):更新以处理新的 deg_results 结构

技术实现细节

背景基因集获取流程

原始表达矩阵 → 过滤低表达基因 → 获取基因符号 → 转换为ENTREZID → 作为universe参数

错误处理和兼容性

  1. 优雅降级:如果背景基因集不可用,使用NULL(全基因组)
  2. 用户反馈:显示通知说明使用的背景基因数量
  3. 包兼容性:动态检测函数参数支持
  4. 错误恢复:完善的tryCatch错误处理

统计改进效果

  1. 减少假阳性:基于实际检测到的基因进行富集
  2. 提高准确性:反映实验条件下的真实富集
  3. 增强可比性:不同实验间结果更一致
  4. 符合标准:满足顶刊(如 Genome Biology)的统计要求

使用说明

对于新用户

  1. 上传counts矩阵进行差异分析
  2. 系统自动保存检测到的基因作为背景
  3. 进行GO/KEGG分析时自动使用背景基因集
  4. 查看结果中的背景基因统计信息

对于单列基因分析

  1. 上传基因列表文件
  2. 选择是否使用背景基因集:
    • 不使用:快速分析,但可能有假阳性
    • 使用全基因组:更准确,但计算稍慢
  3. 系统会显示相应的警告/提示信息

对于上传差异基因文件的用户

由于无法获取原始表达矩阵,系统会:

  1. 显示警告信息
  2. 使用全基因组作为背景(如果用户选择)
  3. 提醒结果可能有偏倚

验证测试

已创建测试脚本 test_background_fix.R 验证:

  1. 差异分析模块能正确保存背景基因
  2. GO分析模块能正确处理背景基因集
  3. KEGG分析模块能兼容不同分析方法
  4. 各模块间数据传递正常

注意事项

  1. 包依赖:需要安装 clusterProfiler 用于 enrichKEGG 备用方案
  2. 性能影响:使用背景基因集可能稍微增加计算时间
  3. 内存使用:保存背景基因列表增加少量内存占用
  4. 向后兼容:修改后的代码保持原有API,不影响其他功能

参考文献

  1. Timmons et al. (2015) Genome Biology - "系统指出几乎所有富集分析都能跑出显著通路——无论你输入什么基因"
  2. 背景基因集的重要性:universe = rownames(expr_filtered)
  3. 三种偏倚来源:技术偏倚、检测偏倚、生物学偏倚

版本历史

  • v1.0 (2025-12-07): 初始实现,修复背景基因集缺陷
  • 关键改进:所有富集分析现在支持正确的统计背景设置