当前位置: 首页 > news >正文

代码分享】“基因集单通路的泛癌GSEA富集分析

【代码分享]基因集单通路的泛癌GSEA富集分析#资料 如图

最近在整理TCGA多组学数据时,发现不少小伙伴对通路活性评估有需求。今天分享一个快速实现泛癌GSEA分析的方法,特别适合需要观察某个特定通路在多个癌症类型中激活状态的情况。这个方法不需要复杂的编程基础,咱们用R语言手把手走流程。

先看核心代码结构(完整脚本见文末github仓库):

library(clusterProfiler) library(org.Hs.eg.db) # 示例数据预处理 pancan_data <- read.csv("tcga_pancan_expression.csv", row.names=1) gene_list <- pancan_data$log2FC names(gene_list) <- rownames(pancan_data) gene_list <- sort(gene_list, decreasing=TRUE) # 执行GSEA分析 gsea_res <- gseGO(geneList = gene_list, ont = "BP", OrgDb = org.Hs.eg.db, keyType = "SYMBOL", pvalueCutoff = 0.05)

这段代码的玄机在geneList参数的构造。注意这里用的是排序后的基因列表(我习惯用log2FC降序排列),这样GSEA算法才能正确计算富集得分。遇到过新手直接把差异基因扔进去跑,结果出不来富集通路的情况,多半是这个排序步骤被忽略了。

可视化部分推荐用阶梯图展示核心富集区域:

library(enrichplot) gseaplot2(gsea_res, geneSetID = "GO:0007049", title = "Cell Cycle Pathway", color = "#E64B35", base_size = 12)

这里geneSetID需要替换成自己关注的通路编号。有个小技巧:用color参数指定颜色时,建议避开默认的红色系,特别是在需要区分上下调通路时,用对比色更直观。

【代码分享]基因集单通路的泛癌GSEA富集分析#资料 如图

实际操作时发现不同癌症类型的数据结构差异较大,建议在循环分析前统一格式:

cancer_types <- unique(meta_data$cancer_type) for (ctype in cancer_types) { subtype_data <- filter(pancan_data, cancer_type == ctype) # 后续分析步骤... saveRDS(gsea_res, paste0("gsea_",ctype,".rds")) }

这个循环框架可以扩展到33种TCGA癌症类型。注意保存中间结果时建议用.rds格式,比.csv节省空间且保留数据结构完整。

遇到过最坑的报错是基因ID转换问题。当使用不同的注释数据库时,一定要确认keyType参数与实际数据匹配。比如从ENSEMBL转SYMBOL时经常会有版本号问题,这时需要:

library(AnnotationDbi) gene_symbol <- mapIds(org.Hs.eg.db, keys=rownames(expr_matrix), column="SYMBOL", keytype="ENSEMBL")

这种ID映射的细节处理直接影响分析结果的可靠性,建议每次转换后都做缺失值检查。

最后说下结果解读。GSEA的NES(标准化富集分数)绝对值大于1通常认为有生物学意义,但具体阈值需要结合样本量调整。个人经验是泛癌分析中NES>1.5的通路更值得关注。附上一个结果速查表制作方法:

signif_res <- gsea_res[gsea_res$qvalues < 0.1 & abs(gsea_res$NES) >1.5,] DT::datatable(signif_res[,c("ID","Description","NES","qvalue")], options=list(pageLength=10))

用交互式表格呈现结果,点击表头还能按列排序,比静态表格方便得多。这套流程跑完,基本就能快速锁定目标通路在不同癌种中的激活模式了。完整代码和测试数据已上传到github(见评论区),遇到报错欢迎带图踢我。

http://www.jsqmd.com/news/579110/

相关文章:

  • AI 生码:RAG 落地量化实践与体系搭建
  • 【HFP】规范精讲[17]: HFP链路控制:LM/LC交互与设备类型适配逻辑
  • 如何基于OpenAI进行Function Calling调用
  • 小红书内容保存难题,这款Python工具如何实现一键无水印下载?
  • SEO_ 从零开始学习SEO的完整步骤与实战案例
  • 【急诊科影像秒级加载黑科技】:基于C++20协程与CUDA Unified Memory的实时渲染框架设计(附GitHub可运行代码)
  • OpenClaw配置文件详解:Qwen3.5-9B高级参数调优手册
  • 仅用200行代码重构内存管理模块:某AI平台将GPU服务器月成本压至$1,840的独家策略(限时开源)
  • OpenClaw压力测试:千问3.5-9B持续运行24小时稳定性
  • 飞机喷涂废气治理厂家丨一场看不见的“废气治理战”如何打响?
  • 从YAML配置文件入手,5分钟搞懂如何定制你的YOLOv5s/m/l/x模型
  • 其他重要思想:滑动窗口、双指针、位运算、随机化算法
  • LZ算法:数据压缩技术的革命与影响
  • OpenClaw环境隔离方案:Phi-3-vision-128k-instruct多模态任务专用沙箱配置
  • k8s静态pod资源清单存放位置
  • 如何实现 SEO 优化与广告投放的协同效果
  • 长尾关键词的SEO提交技巧有哪些
  • C++内存池线程局部存储(TLS)失效真相:当__thread变量遭遇CPU核心迁移,如何用__builtin_ia32_rdtscp实现亚微秒级绑定校验
  • 数字化转型难落地?一文读懂数字精益工厂的本质与实践
  • 2026年靠谱的瓶盖厂家哪家好 - 品牌宣传支持者
  • 基于SpringBoot + Vue的实验室共享预约系统(角色:学生、教师、管理员)
  • Claude Code 源码泄漏的元凶.map暴露
  • OpenClaw开发提效:Qwen3-4B辅助代码审查实战
  • 千问3.5-27B模型微调:定制OpenClaw专属指令集
  • ESP-IDF专用SHT4X温湿度传感器驱动组件
  • OpenClaw家庭相册:Qwen3.5-9B-VL自动识别人物与场景分类
  • 腾讯云轻量服务器部署OpenClaw实战:打造智能日程管理助手
  • 从产品经理视角看STM32 IWDG:你的嵌入式设备真的需要‘看门狗’吗?如何配置最合理?
  • Java车载OS调试实战:3步定位CAN总线通信中断,92%工程师忽略的JVM参数配置
  • SEO_ 详解SEO优化中内容与外部链接的建设策略