生信分析工作室
TCGA
肺腺癌
WGCNA
ssGSEA
Hallmark
随机生存森林
OncoPrint

TCGA-LUAD 多组学预后建模实战(下)

WGCNA · 免疫微环境 · Hallmark 通路 · 分子亚型 · 模型验证 · miRNA 网络 · 突变景观

18 分钟阅读
TCGA-LUAD 多组学预后建模实战(下)

上一篇我们把 LUAD 的预后骨架搭好了:13 基因 LASSO 风险评分,在 504 例 TCGA-LUAD 患者上能稳定区分高低风险(log-rank p << 0.001),并在多因素 Cox 中保持独立预后意义。但仅有一个评分还不够支撑一篇『故事完整』的预后论文。本篇会沿着 7 条独立的轴线展开,每一条都对应论文中的一个独立 Figure:(1)WGCNA 找与 risk 相关的共表达模块;(2)肿瘤免疫微环境与免疫检查点;(3)Hallmark 50 通路的单样本活性;(4)分子亚型(无监督共识聚类);(5)模型可信度评估(C-index / DCA / 随机生存森林);(6)miRNA-mRNA 调控网络;(7)驱动突变景观与样本流向。

第六步 · WGCNA:把上千个基因压成 10 个模块

WGCNA 的核心动作只有两步:① 选合适的 soft-threshold 让基因相关性矩阵近似 scale-free;② 通过 TOM 距离 + dynamic tree cut 把基因聚成模块,再用 module eigengene(每个模块的代表)与临床性状做相关。我们在 top-5000 MAD 基因上构网,最终聚出 10 个模块。

R · 06_WGCNA.R
sft <- pickSoftThreshold(datExpr, networkType = "signed",
                          powerVector = c(1:10, seq(12, 20, 2)))
net <- blockwiseModules(datExpr, power = sft$powerEstimate,
                        networkType = "signed", TOMType = "signed",
                        minModuleSize = 30, mergeCutHeight = 0.25)
modCor <- cor(MEs, traits)         # module x trait correlation

6.1 模块识别:基因聚类树 + 颜色条

WGCNA gene dendrogram
Figure 1. WGCNA gene dendrogram. 颜色条为最终模块归属,10 个模块均拥有 30+ 成员,turquoise 与 brown 是体量最大的两个。

6.2 模块-性状相关热图(核心结果)

Module-trait correlation heatmap
Figure 2. Module-trait correlation heatmap. 每格上方为 Pearson r,下方为对应 p。MEturquoise 与 risk score 强烈负相关 (r = -0.64),MEbrown 强烈正相关 (r = +0.48)。

6.3 Hub gene:MM × GS 双轴筛选

Module Membership x Gene Significance
Figure 3. Module Membership (MM) × Gene Significance (GS) 散点。横轴是基因与 ME 的相关性,纵轴是基因与 risk score 的相关性。标注的 12 个基因满足 |MM|>0.8 & |GS|>0.2,即模块内中心 + 和性状高度相关。

6.4 关键模块的 GO-BP 功能

MEturquoise 模块 GO-BP enrichment
Figure 4. MEturquoise 模块的 GO-BP enrichment。顶部条目以肺/上皮分化、纤毛运动、表面活性物质合成为主 —— 高风险患者『丢失了肺正常生理功能』这一画面在 WGCNA 上再次被印证。

第七步 · 肿瘤免疫微环境(ESTIMATE + ssGSEA + 检查点)

TIME 我们从三个角度切入:(a)ESTIMATE 用 141 个基因签名估 stromal / immune / 综合得分,顺带导出 tumor purity;(b)ssGSEA 在 Bindea 23 套免疫细胞签名上给每个样本打分;(c)22 个免疫检查点基因(PD1, PD-L1, CTLA-4, BTLA, TIGIT, …)分别与 risk score 算相关 / 与 risk group 做差异。

R · 07_immune_infiltration.R
# ESTIMATE
filterCommonGenes(input.f = expr_in, output.f = cg, id = "GeneSymbol")
estimateScore(input.ds = cg, output.ds = scoreFile, platform = "illumina")

# ssGSEA on Bindea 23 immune cell signatures
gp  <- ssgseaParam(exprData = mrna_t, geneSets = bindea, normalize = TRUE)
ssg <- gsva(gp)

7.1 ESTIMATE 三种评分:High vs Low risk

ESTIMATE scores by risk group
Figure 5. ESTIMATE 三种评分在高低风险组的对比。Stromal / Immune / ESTIMATE score 均在低风险组显著更高,提示高风险患者 TIME 偏冷 / tumor purity 偏高。

7.2 ESTIMATE vs Risk score 连续相关

ESTIMATE vs Risk score 相关图
Figure 6. ESTIMATE 三种评分与连续 risk score 的相关图。三条回归线均显著向下倾斜(all r < -0.2, p < 1e-5)。

7.3 ssGSEA 23 套免疫细胞签名热图

ssGSEA 免疫细胞浸润热图
Figure 7. ssGSEA 免疫细胞浸润热图。高/低风险组在 B、Mast、TFH、Eosinophil 等浸润上呈现明显梯度差异。

7.4 差异最显著的免疫细胞 Top 12 / Top 6

Top 12 免疫细胞条形图
Figure 8. 差异最显著的 12 种免疫细胞条形图(按 logFC 排序)。TFH、B cells、Mast、Eosinophil 在高风险组显著下降;Th2 显著上升。
最显著 6 种免疫细胞 boxplot
Figure 9. 最显著的 6 种免疫细胞 boxplot(Wilcoxon test)。全部 p < 1e-9。

7.5 免疫检查点基因与 risk score 的相关性

22 个免疫检查点基因相关图
Figure 10. 22 个免疫检查点基因与连续 risk score 的 Pearson 相关图。BTLA / CD27 / CD28 / CD80 / ICOS 等共刺激分子与 risk 显著负相关。
最显著 6 个免疫检查点基因表达差异
Figure 11. 最显著的 6 个免疫检查点基因在高低风险组的表达差异。

第八步 · Hallmark 50 通路的单样本活性(GSVA / ssGSEA)

ssGSEA 给每个样本一个 pathway activity vector,再用 limma 跑高低风险组的差异通路,比传统 GSEA 多两个优势:(1)每位患者都有个体水平的通路分数;(2)可以直接放进相关 / Cox / 聚类等其他分析。

R · 08_GSVA_pathway.R
hallmark <- msigdbr(species = "Homo sapiens", category = "H")
gp  <- ssgseaParam(mrna_t, hallmark_geneSets, normalize = TRUE)
ssg <- gsva(gp)

design <- model.matrix(~ risk_group)
fit    <- eBayes(lmFit(ssg, design))

8.1 差异最显著的 Hallmark 通路

差异最显著的 25 个 Hallmark 通路条形图
Figure 12. 差异最显著的 25 个 Hallmark 通路条形图。高风险组上调:GLYCOLYSIS / MTORC1 / G2M_CHECKPOINT / E2F_TARGETS / MYC_TARGETS_V2 等增殖与代谢通路;下调:脂肪酸代谢、雌激素响应。

8.2 整体热图

Hallmark 通路 × 样本热图
Figure 13. 全部 FDR<0.05 Hallmark 通路 × 样本热图。

8.3 与 risk score 相关性 Top 20

与 risk score 相关性最高的 Hallmark 通路
Figure 14. 与 risk score 相关性最高(正 / 负各 10)的 Hallmark 通路。正相关 Top 命中 GLYCOLYSIS、MYC、MTORC1;负相关 Top 命中 FATTY_ACID_METABOLISM、KRAS_SIGNALING_DN、ESTROGEN_RESPONSE。

8.4 两条代表性通路的散点示例

GLYCOLYSIS / FATTY_ACID 通路 vs risk score
Figure 15. GLYCOLYSIS(左)随 risk score 单调上升;FATTY_ACID_METABOLISM 类似通路(右)随 risk score 单调下降。

第九步 · 分子亚型(ConsensusClusterPlus)

前面的工作都是『把 risk score 作为先验来分组』。本节反其道而行:完全不看生存信息,只用预后基因(uni-Cox p<0.01)的表达做无监督共识聚类,看 LUAD 患者会自然分成几个分子亚型,再回头与 risk group / 生存 / Stage 做关联。

9.1 最佳 K:PAC (proportion of ambiguous clustering)

PAC vs K
Figure 16. PAC vs K. K=2 时 PAC = 0.068 最低,说明 2 个亚型最稳定。

9.2 亚型 KM 生存曲线

KM by molecular subtype
Figure 17. KM by molecular subtype. 两个共识亚型的总生存差异显著(log-rank p < 0.001),与 risk group 给出的结论平行。

9.3 亚型与 risk group / Stage 的组成关系

亚型在 risk group / Stage 上的组成
Figure 18. 两个亚型在 risk group / Stage 上的组成。卡方检验 p << 0.001,亚型与已知预后分层强相关。

9.4 亚型间的 risk score 差异

Risk score by cluster
Figure 19. Risk score by cluster. 两个亚型 risk score 分布差异显著 (Wilcoxon p < 1e-30)。

9.5 亚型 × LASSO 基因热图

13 个 LASSO 基因 × 亚型热图
Figure 20. 13 个 LASSO 基因在两个亚型间的 Z-score 热图。亚型与 LASSO 基因方向高度一致,互为印证。

第十步 · 模型可信度:C-index / DCA / 随机生存森林

审稿人最常问的三个问题:① 你的模型相对临床变量到底加了多少 predictive power?② 在『临床决策阈值』上有没有 net benefit?③ 用一个完全不同(非线性)的算法回测,13 个基因还是 Top 重要变量吗?本节用 C-index 自助法 + DCA + 随机生存森林(RSF)一次性给出答案。

10.1 C-index 自助法 500 次:5 个模型对比

500 次 bootstrap 的 C-index 比较
Figure 21. 500 次 bootstrap 的 C-index 比较。Risk + Clinical = 0.769,Risk-only = 0.756,远高于 Clinical-only 0.675 / Stage-only 0.663 / Age 0.510。Risk score 贡献了大部分判别力。

10.2 决策曲线分析 (DCA, 1 / 3 / 5 年)

Decision curve analysis
Figure 22. Decision curve analysis. 在大多数阈值上,Risk + Clinical(coral)和 Risk-only(teal)的 net benefit 都明显高于 Clinical-only(blue)与两个极端策略(treat all / treat none)。

10.3 随机生存森林:非线性反向验证 LASSO

RSF 变量重要性
Figure 23. RSF 变量重要性(permutation VIMP),填色为 LASSO 系数符号。OOB C-index = 0.687。RGS20、RHOV、ESYT3 等 LASSO 顶级基因同时是 RSF Top 重要变量,方法间高度一致。

10.4 LASSO score vs RSF score 的一致性

LASSO risk score vs RSF score 相关
Figure 24. LASSO risk score 与 RSF 预测分数的相关。Spearman ρ 接近 0.8,两套截然不同的算法给出几乎同向的预测。

第十一步 · miRNA-mRNA 调控网络

miRNA 通过结合 mRNA 3'UTR 抑制翻译 —— 因此一个『真实』的 miRNA-mRNA 调控对应当具备三个特征:① 二者在肿瘤 vs 正常中方向相反;② 在多个权威数据库中有实验验证的结合证据;③ 在同一队列里表达呈显著负相关。本节我们用 multiMiR 拉取 miRTarBase / TarBase / miRecords 的验证数据,经过三重筛选最终保留 5955 条高置信 miRNA-mRNA 边。

R · 11_miRNA_mRNA_network.R
mm <- get_multimir(mirna = top_mir, table = "validated",
                   legacy.out = FALSE)
# Keep validated + opposite DE direction + tumor r < -0.15 (FDR<0.05)
net <- filter_validated_opposite_negative(mm, mrna_deg, mir_deg, expr)

11.1 Hub miRNA:靶基因最多的 Top 15

Hub miRNAs
Figure 25. Hub miRNAs。miR-17-5p、let-7a、miR-21-5p、miR-210-3p、miR-93、miR-130b、miR-183 等经典 LUAD oncomiR / 抑癌 miRNA 全部入榜,靶向 mRNA 数 300+。

11.2 Top 8 hub miRNA 的可视化网络

Top 8 hub miRNA-mRNA 调控网络
Figure 26. Top 8 hub miRNA-mRNA 调控网络(ggraph FR 布局)。coral 大节点为 Up miRNA,teal 大节点为 Down miRNA,灰色小节点为 mRNA 靶基因。边宽 ∝ |r|。

11.3 Top 6 高置信单对的散点验证

最显著 6 对 miRNA-mRNA 负相关散点
Figure 27. 最显著的 6 对 miRNA-mRNA 在肿瘤样本中的负相关散点。每张图的回归线斜率显著为负 (p < 1e-10),方向 / 强度均与生物学预期一致。

第十二步 · 驱动基因突变景观 + 样本流向图

TCGA 临床矩阵自带了 18 个 LUAD 高频驱动基因的氨基酸级注释(KRAS、EGFR、BRAF、STK11、PIK3CA、…),我们把 'none' 编码为 WT、其他编码为 MUT,形成最小可视化的突变景观;并用 Fisher 检验比较高/低风险组的突变频率。

12.1 OncoPrint:突变 + 临床 + LASSO 表达 一张图

TCGA-LUAD OncoPrint
Figure 28. TCGA-LUAD OncoPrint。顶部是 risk group / cluster / Stage / 性别 + 连续 risk score;中部是 9 个驱动基因突变;底部是 3 个 LASSO 顶级基因的 Z-score。高风险段(右侧)多个驱动基因 + LASSO 基因表达整体偏深。

12.2 突变频率:高 vs 低风险组

9 个驱动基因在高低风险组的突变频率
Figure 29. 9 个驱动基因在高低风险组的突变频率。KRAS / STK11 / EGFR 三大驱动均在 5%~13% 之间;BRAF / EGFR 在两组间有提示性趋势(nominal p < 0.05),但 FDR 校正后不显著 —— 说明驱动突变本身并不能完全替代 risk score 的预后信息。

12.3 Sankey / Alluvial:从 Stage 到生死结局的患者流

Stage → Cluster → Risk → Vital status 流向图
Figure 30. Stage → Cluster → Risk → Vital status 流向图。Stage I 患者多被分到 Cluster 1 / 低风险 / 存活;Stage III-IV 患者向 Cluster 2 / 高风险 / 死亡富集。

下篇总结 · 一份范式的迁移指南

把上下两篇拼起来,整套 LUAD 工作流是 12 个 R 脚本 + 73 张图 + 26 个结果表,可以在 504 例 TCGA-LUAD 样本上端到端跑完。故事的主线是:

① 从 4430 个肿瘤 DEG 精炼到一个 13 基因的 LASSO 预后评分;

② 风险评分与 Stage / TNM / 吸烟史显著关联,是多因素 Cox 中的独立预后因子;

③ WGCNA / 免疫浸润 / Hallmark 通路三种不同维度都印证了『高风险 = 增殖与糖酵解上调 + 免疫冷化 + 肺正常功能丢失』;

④ 无监督分子亚型 + 随机生存森林 + DCA 三条独立路径互相确认,整体可信度强;

⑤ miRNA-mRNA 网络 + 驱动突变 OncoPrint 把『分子→通路→预后』的因果链路全部串起来。

整套脚本结构清晰(00_setup / 01-05 基础 + 06-12 进阶),换一个癌种(COAD / STAD / HNSC …)只需要换原始矩阵路径 + 改预处理脚本的几行字段名,其余 11 个脚本几乎零修改即可复用。

本文相关服务

生存分析 / 数据库挖掘

想把类似的分析跑在你自己的数据上?可以直接看服务详情或发起咨询。

更多案例