上一篇我们把 TCGA-SARC 的临床、生存、亚型差异和通路富集都讲清楚了。结论之一是:临床因子(残留肿瘤、远处转移)已经能解释相当一部分预后差异,但能否用转录组本身再多榨一些预后信息?这一篇我们做 5 件事:(1)用 LASSO-Cox 构建多基因预后评分;(2)共识聚类发现新的分子亚型;(3)ESTIMATE + ssGSEA 看肿瘤微环境差异;(4)WGCNA 找与生存相关的共表达模块;(5)miRNA Cox 筛选 + miRNA-mRNA 调控网络。
第六步 · LASSO-Cox 预后模型:从 18 637 个基因到 22 个
流程:取 top 3000 高方差基因 → 单变量 Cox p<0.01 筛 281 个 → 7:3 随机切训练 / 验证 → LASSO-Cox 10-fold CV 选 λ.min → 拿到 22 个稳健预后基因 → 训练集中位数切高低风险 → 在验证集和全队列验证。
R · 06_lasso_cox_model.R
cvfit <- cv.glmnet(train_expr, Surv(OS.month, OS),
family = "cox", alpha = 1, nfolds = 10)
co_df <- coef(cvfit, s = "lambda.min") # 22 个非零系数
risk <- train_expr %*% co_df$coef # 线性风险评分
risk_group <- ifelse(risk > median(risk), "High", "Low")
6.1 LASSO 交叉验证曲线 + 系数路径
Figure 1. LASSO 10-fold CV,partial likelihood deviance 随 log(λ) 变化。左侧虚线为 λ.min。Figure 2. LASSO 系数路径,珊瑚色虚线标出选定的 λ.min(22 个非零基因)。6.2 训练集 KM:高/低风险组完美分离
Figure 3. Training cohort(n=179)KM 曲线。高风险组(珊瑚)与低风险组(蓝)差异极显著,log-rank p < 0.0001。6.3 验证集 KM:模型外推稳健
Figure 4. Validation cohort(n=78)KM 曲线。同样的中位数切点,高低风险组依然显著分离。6.4 全队列 KM
Figure 5. Whole cohort(n=257)KM 曲线,进一步确认风险评分的判别能力。6.5 时间依赖 ROC(1/3/5 年)
Figure 6. Training cohort time-dependent ROC, 1/3/5 年。AUC > 0.85,模型在训练集表现极强。Figure 7. Validation cohort time-dependent ROC,外部验证 AUC 同样保持高位。6.6 风险评分散点 + 生存状态
Figure 8. 全队列患者按风险评分从低到高排列:上图 = 风险评分(蓝/红),下图 = 各患者的 OS 时间与死亡事件。高风险组死亡事件明显集中。6.7 临床 + 风险综合 Nomogram 与 3 年校准
Figure 9. 整合年龄 + 性别 + 亚型 + 风险评分的 Nomogram,可直接预测 1/3/5 年 OS。Risk score 贡献的 score 区间最大,说明它独立于临床因素提供预后信息。Figure 10. 3 年 OS 的 Bootstrap 校准曲线,预测值 vs 实际观测吻合良好。第七步 · ConsensusClusterPlus 分子分型
组织学亚型是病理科医生在显微镜下的判断,分子分型则用转录组本身去聚类,可能发现『跨亚型』的预后/治疗共性。我们用 top 1500 MAD 基因做 ConsensusClusterPlus,对 k=2-6 全部跑一遍,用 PAC(Proportion of Ambiguous Clustering)选最优 k。
7.1 PAC 选 k = 2
Figure 11. PAC 在 k=2 处最低(0.20),表明二分类是最稳定的解。7.2 KM by Consensus Cluster
Figure 12. C1 vs C2 的 OS 曲线,分子分型自带预后差异。7.3 分子簇 vs 组织学亚型对应关系
Figure 13. 每个分子簇的组织学亚型构成。C1 富集某些亚型,C2 富集另一些,但都不是 1:1 对应 —— 这说明分子分型确实在组织学之上提供了新的信息维度。7.4 UMAP 可视化
Figure 14. UMAP on top-MAD genes,颜色 = 分子簇,形状 = 组织学亚型。第八步 · 肿瘤微环境:ESTIMATE + ssGSEA
肉瘤是『冷』肿瘤还是『热』肿瘤一直存在争议。我们同时用两个工具看:ESTIMATE 估计基质 / 免疫 / 肿瘤纯度得分;ssGSEA 用 25 种免疫细胞签名看具体浸润谱。
8.1 ESTIMATE 按亚型
Figure 15. StromalScore / ImmuneScore / ESTIMATEScore 按亚型箱图。UPS 与 MFS 免疫评分最高,DDLPS 最低 —— 提示前者更适合免疫治疗。8.2 ESTIMATE 按风险组
Figure 16. 低风险组的 Stromal 与 Immune 评分系统性高于高风险组(Wilcoxon p<0.05),提示 LASSO 风险评分捕捉到了一部分 TME 信号。8.3 ssGSEA 免疫细胞热图
Figure 17. 25 种免疫细胞 ssGSEA 得分热图,按亚型分割。可以看到 UPS / MFS 在 macrophage / CD8 T cell 等抗肿瘤免疫细胞上系统性升高。8.4 ssGSEA 高低风险组对比
Figure 18. 25 种免疫细胞按风险组的箱图 + 星号标记显著性。多种细胞毒性/抗原递呈细胞在低风险组显著富集。8.5 免疫检查点基因表达
Figure 19. 9 个免疫检查点基因(PD-L1/PD-1/CTLA-4/TIM-3/LAG-3/TIGIT/PD-L2/IDO1/VISTA)按亚型的表达水平。Figure 20. 同上,按风险组对比。低风险组多数检查点表达显著较高 —— 意味着该组患者可能更受益于免疫检查点抑制剂治疗。第九步 · WGCNA 共表达模块 + 模块-性状关联
WGCNA 在 top 5000 MAD 基因上构 signed 网络,自动选定 power=8,得到 6 个模块。然后把每个模块的 eigengene 与年龄、性别、OS 事件、风险评分、亚型 dummy 做相关。
9.1 软阈值选择
Figure 21. Scale-free topology R² vs power,power = 8 时 R² 接近 0.92。9.2 基因树状图 + 模块颜色
Figure 22. WGCNA dendrogram,6 个模块(turquoise / blue / brown / green / yellow / grey)。9.3 模块 - 性状关系热图
Figure 23. 模块-性状相关热图。MEbrown 与 Risk score(r 显著正相关,p=1.5e-26)、OS event(p=3.9e-4)双双相关,是最值得追的模块。第十步 · miRNA Cox 筛选 + miRNA-mRNA 调控网络
最后一步走 miRNA 层。对 top 300 高方差 miRNA 做单变量 Cox,拿到 40 个 p<0.01 的预后 miRNA;再与全转录组做 Pearson 相关,保留 |r|>0.4 的负相关(miRNA 抑制靶基因的经典方向),得到 5 410 条候选调控关系。
10.1 Top 30 预后 miRNA 森林图
Figure 24. Top 30 prognostic miRNAs forest plot,MIMAT0015085 / MIMAT0000688 居首(HR≈1.55, p<3e-7)。10.2 Top miRNA 热图(按 OS 时间排序)
Figure 25. Top prognostic miRNAs 跨样本热图,列按 OS 时间排序,顶端标注亚型与生存状态。可以看到部分 miRNA 在死亡事件密集的左侧显著上调。10.3 Top 6 miRNA-mRNA 负相关散点
Figure 26. Top 6 负相关 miRNA-mRNA 对的散点图(Pearson |r|>0.7)。颜色按亚型着色,红线为线性拟合。这些 miRNA-mRNA 对可以作为 ceRNA 网络的核心节点继续追问机制。两篇总结 · 一份可直接套用的 SARC 范式
上下篇拼起来,TCGA-SARC 给我们的完整画面是这样的:
① 临床层:残留肿瘤 + 远处转移是最强预后因子,年龄居次;
② 分子层:6 个组织学亚型在转录组上形成清晰指纹,通路完美对应组织学起源;
③ 预后模型:22 基因 LASSO-Cox signature 跨训练/验证/全队列稳健,AUC>0.8;
④ 分子分型:k=2 的 ConsensusCluster 与组织学正交,自带预后差异;
⑤ 免疫维度:低风险组免疫『热』,检查点表达高,可能更适合 ICI;
⑥ WGCNA:MEbrown 模块同时与风险评分(p=1.5e-26)和 OS 事件相关,是机制研究的优先目标;
⑦ miRNA 层:40 个预后 miRNA + 200 条 miRNA-mRNA 负相关候选边。
整套流程脚本(00_setup + 01~10 + run_all)已经模板化,换一个 TCGA 癌种 + 改一下亚型解析的正则,就能跑下一个数据集。