Cover Image

那天我数了一下,发现事情不太对

做肿瘤免疫生信分析几年了,我一直觉得自己的 R 环境越来越臃肿是正常的——毕竟术业有专攻嘛。

直到那天我打算从零复现一套分析流程,顺手列了个清单:

  • 载数据得自己写 GEOquery 脚本
  • 去批次得配 sva 的 Combat
  • 做免疫浸润得去装 CIBERSORT 的 R 脚本(还得手动改源码里的路径)
  • 算 TIDE 得分得去官网下载那个 Python 版
  • 画生存曲线得 survival + survminer
  • 跑机器学习得 caret 或者 mlr3
  • 画图还得 ggplot2 调半天 theme

列到一半我就放弃了。这不是做分析,这是拼乐高——而且每个零件还来自不同的玩具厂。

更要命的是,等你好不容易把每个包都配好了,版本又冲突了。Matrix 1.6 vs 1.5,Seurat v5 vs v4,一个 install.packages 就能让你回到解放前。

“要是有个包,能把肿瘤免疫分析从头到尾包圆了就好了。”

朋友,tigeR 就是你要找的那个包。

tigeR 是什么来头?

先交个底:tigeR 是南方医科大学余光创教授团队开发的 R 包,2024 年发在国产高起点期刊 iMeta 上(DOI: 10.1002/imt2.229)。

说人话就是:肿瘤免疫分析最核心的四件事——数据清洗、微环境解构、Biomarker 验证、疗效预测模型——它全包了。而且用的是同一套接口,同一个数据格式,你不用在包之间来回倒腾。

安装就两行:

devtools::install_github("YuLab-SMU/tigeR")
devtools::install_github("YuLab-SMU/tigeR.data")

按做一套完整分析的顺序,一个个说。

第一关:数据预处理——从几天的活到几分钟

这是我最有感触的模块。因为我吃过太多洗数据的苦了

tigeR 用 SummarizedExperiment 做数据容器,表达矩阵和临床信息永远对齐。删了个样本后 colData 错位?不存在的,这个容器天然帮你管好了。

内置的 Dataloader 能规范化临床信息列名。Treatmentresponseoverall.survival..days.vital.status,你以后看到这些统一的名字,心里会特别踏实。

但真正的王炸是 remove_BE()。Combat、limma、DWD 四种去批次算法,一行:

SE_clean <- remove_BE(SE_merged, method = "Combat")

跑完再用 browse_BE() 画个 PCA——原本因为测序平台不同分成两坨的样本,现在完美融合。那种强迫症被满足的快感,你跑一次就懂。

第二关:TME 解构——10 种算法,一个入口

肿瘤微环境分析是刚需。问题是市面上的去卷积算法实在太多了:CIBERSORT、TIMER、xCell、MCPCounter、EPIC、ESTIMATE、quanTIseq… 每个安装方法不一样,输入格式不一样,输出也不一样。

tigeR 用一个函数 deconv_TME() 统一了全部 10 种算法:

frac_timer  <- deconv_TME(SE, method = "TIMER")
frac_ciber  <- deconv_TME(SE, method = "CIBERSORT")
frac_xcell  <- deconv_TME(SE, method = "xCell")

想换算法?改一下 method 参数就行了。对比不同算法的结果变得 so easy。

还有一个让我眼前一亮的功能:如果你手头有单细胞数据,tigeR 能帮你从 scRNA-seq 构建自定义 Reference 矩阵,然后用 deconv_TME() 做精准去卷积。这意味着你可以获得癌种特异的免疫细胞比例,而不是用别人泛癌的 Reference 凑合。

打通单细胞和 Bulk,这一步直接让你的分析上升一个档次。

第三关:Biomarker 评估——23 种签名,别再手算了

如果你曾经手动复现过别人的免疫 Signature,你一定懂那种”公式输错了一个括号,结果全白算”的崩溃。

tigeR 内置了 23 种主流免疫治疗相关 Signature:TIDE、IFNG、T cell-inflamed GEP、Angiogenesis、Teffector、IPS、TLS、EMT… 一个 score_biomk() 全部搞定:

sig_res <- score_biomk(SE)

一个 score_biomk() 干完,然后就是差异分析、生存分析、ROC 曲线,一个接一个跑下去。

integrate_analysis(SE, geneSet = "CD274"),一行出差异 + 生存结果。 diff_biomk(SE, gene = "CD274", type = "Response"),直接出发表级箱线图。 roc_biomk(),把你的基因和 23 种签名一起比 AUC。

以前这一套下来要干几天,现在十分钟。人生苦短,别把时间花在重复造轮子上。

第四关:预测模型——零代码也能上机器学习

这是最让我意外的一趴。

听到”机器学习”四个字就想关窗口?我理解。但 build_Model() 把这件事做成了搭积木

mymodel <- build_Model(Model = "NB", 
                       SE = train_set, 
                       feature_genes = my_genes, 
                       response_NR = TRUE)

NB、SVM、RF、Logitboost,四种算法任选,tigeR 自动处理标准化和缺失值填充。建好模型后用 test_Model() 在独立验证集上画 ROC,一条龙。

更狠的是 pred_response():你甚至不需要自己建模。tigeR 内置了预训练模型(比如 ipt 签名),直接把你的新数据扔进去,预测每个患者是 Responder 还是 Non-Responder。

从数据到可用模型,一条路走到黑。

一句话总结

tigeR 不只是一个”这里好用、那里方便”的工具,它改变了你做肿瘤免疫分析的工作方式:从”花80%时间洗数据、拼工具链”,变成”花80%时间思考科学问题本身”。

GitHub 仓库在这:https://github.com/YuLab-SMU/tigeR

赶紧 install,然后回来感谢我。


Li, N., et al. (2024). tigeR: An R package for tumor immune microenvironment analysis and immunotherapy response prediction. iMeta, e229. http://doi.org/10.1002/imt2.229