跳到主要内容

06 预后建模(LASSO Cox / RSF / XGBoost-Cox)

预后建模回答的不是"是不是肿瘤"(04 章二分类),而是"这个病人能活多久"。这本质是生存分析问题:有时间(time)、有事件(event,死亡 = 1 / 删失 = 0),目标是建模时间依赖的风险。

04 章 vs 06 章的根本差异

维度04 章二分类06 章生存
标签单一类别(Tumor/Normal)(time, event) 配对
删失有(随访结束未发生事件)
损失函数log-loss / hingepartial likelihood / Brier-IPCW
评估AUC / AccuracyC-index / 时间 ROC / IBS
主要工具glmnet / RF / XGBoostglmnet (cox) / randomForestSRC / xgboost (objective="survival:cox")

关键陷阱:把生存数据简化成"3年内死=1 / 不死=0"做二分类,会丢删失信息(在 3 年随访结束时还活着的病人,你不知道他们 3.5 年时是否仍活着)。这种简化在 BMC 类期刊偶尔被接受,但顶刊基本会要求用真正的生存模型。

4 种生存模型对比

模型数学本质偏好场景弱项
LASSO Cox(glmnet::cv.glmnet(family="cox"))Cox + L1 正则高维基因 → signature 选择,可解释假设比例风险
Ridge CoxCox + L2 正则多共线特征,不做选择系数全保留,解释稍弱
RSF(randomForestSRC::rfsrc())集成生存树非线性 + 交互效应,无 PH 假设黑盒,需 VIMP 才能看
XGBoost-Coxgradient boosting + cox loss大数据 SOTA调参敏感

实务建议:默认 LASSO Cox 当 baseline(可解释 + 习惯做法),RSF 作为非线性扩展(很少有 paper 不用 RSF 做对比)。XGBoost-Cox 只在样本量充足时(> 500)上场。

在 TCGA-LIHC 上跑

配套脚本 ml06_prognosis_sci.R(W4 在产):

Rscript scripts/machine-learning/ml06_prognosis_sci.R

数据:02 章 derived 的 expression_hvg5000.csv(只用 Tumor)+ clinical_clean.csvOS_time / OS_event

输出 ml06_figs/:

  • C-index 对比柱状图(4 模型)
  • 时间依赖 ROC(1 / 3 / 5 年)
  • LASSO Cox 系数路径图 + 选中的 signature 基因
  • RSF VIMP 排序
  • 风险三联图(KM + scatter + heatmap)

在线一键复现

不想本地跑?直接上传到工具:

  • lasso-cox — LASSO Cox baseline(BioF3 已有工具,bulk-rnaseq 专栏覆盖)
  • rsf-survival — Random Survival Forest(本专栏 W2-D 上线)

rsf-survival 公开 demo

公开 demo:200 features × 365 samples · Test C-index = 0.609 · 时间 ROC(1y/3y/5y) AUC = 0.574 / 0.718 / 0.667。

C-index — 生存模型的"AUC"

Concordance Index(C-index)是生存模型的标准判别指标:

  • 取所有可比较的样本对(其中一个发生事件且在另一个还活着时)
  • 看模型给两人的风险排序是否和真实事件时间排序一致
  • C-index = 一致样本对比例
C-index解读
0.5随机猜测
0.6 - 0.7弱判别力(经验:基因 signature 这个区间常见)
0.7 - 0.8中等(可发表)
0.8 +强(罕见,通常是临床指标 + 分子组合)

Train / OOB / Test C-index 三列必须都报:

  • Train high + OOB low + Test low → 严重过拟合(常见于 RSF)
  • Train ≈ OOB ≈ Test → 模型稳健

ml-classifier 工具的 cindex_table.csv 三列都给。Demo 跑出来 RSF 的 train=0.890 / OOB=0.533 / Test=0.609 — 典型 RSF 过拟合 + 中等 generalization。

时间依赖 ROC

C-index 给"整体"性能,时间依赖 ROC 给"特定时间点"性能(1 年 / 3 年 / 5 年生存预测准吗)。

library(timeROC)
tROC <- timeROC(T = test$time, delta = test$event,
marker = test$risk_score, cause = 1,
times = c(365, 1095, 1825), # 1, 3, 5 年(单位:days)
iid = TRUE)

实务:报 1y / 3y / 5y 三个点是论文标配。注意时间单位 — 如果数据是 days,5 年 = 1825 days,别忘了转。rsf-survival 工具默认 time_unit="auto" 自动检测。

VIMP — 找重要基因 marker

RSF 的 Variable Importance(VIMP)= 置换该特征后 OOB error 下降幅度。下降越大 = 该特征越重要。

library(randomForestSRC)
fit <- rfsrc(Surv(time, event) ~ ., data = train_df, importance = TRUE)
vimp_df <- data.frame(feature = rownames(fit$importance),
vimp = fit$importance[, "all"])
vimp_df <- vimp_df[order(-vimp_df$vimp), ]

VIMP top 20 给写论文 "Methods identified gene X / Y / Z as top prognostic markers"。但永远要外部队列验证 — 单队列 VIMP 高的基因经常在新队列里掉到中游。

部分依赖图(Partial Dependence)

VIMP 告诉你"哪些特征重要",部分依赖告诉你"特征值越高 → 风险变化方向"。横轴 feature 值,纵轴预测的 mortality / risk score:

  • 单调递增:高表达 = 高风险(差预后基因)
  • 单调递减:高表达 = 低风险(保护性基因)
  • 非单调 / U 型:中等表达 SHAP 最大

rsf-survival 工具的 04-partial-dependence-top4.png 给 top 4 features。

风险三联图

生信预后论文最常出现的"signature 评估"图。3 个 panel 上下排:

  1. KM 曲线:按风险中位数把 test 集分高/低风险组,画 KM + log-rank p
  2. Scatter plot:每个样本的 risk score(横)+ time(纵)+ event 状态
  3. Heatmap:top 10 features 在 test 样本里的表达,样本按 risk score 排序

rsf-survival 工具直接出图(06-risk-triple)。

常见坑

生存数据简化成 3y 二分类 — 丢删失,不被顶刊接受

train 上选基因 + train 上算 C-index 当作最终性能 — signature inflation 经典案例

PH 假设没检验 — Cox 模型核心假设是"比例风险"。survival::cox.zph() 检验,如果显著违反,Cox 系数不可信

C-index 0.55 报为 "good prognostic value" — 0.55 几乎和随机一样,生信 reviewer 越来越严格

训完 RSF 不报 OOB C-index — RSF 自带 OOB 估计,这是它和 LASSO Cox 比的优势之一,不报就是浪费

时间 ROC 用错单位 — 数据是 days 你写 5 年(应是 1825 days),AUC 报错。rsf-survival 工具的 time_unit="auto" 把这个坑堵了

risk score 没标准化就跨队列比较 — A 队列的 risk score 和 B 队列的不可直接比,要先用 train 队列分位数标准化

在线工具

场景推荐工具
LASSO Cox baselinelasso-cox
非线性预后(RSF)rsf-survival
单变量 KM 验证km-survival

工具间数据可以接力跑(LASSO Cox 选出 signature 后 → RSF 看非线性 → KM 验证 top hits)。

本章状态

✅ Wave 4 正文完成(2026-05-27)。配套 ml06_prognosis_sci.R 在产,工具已上线。

AI 陪学

让 AI 陪我学这一篇

AI 会读这篇文章后给你 3-5 步学习计划, 逐步陪你学完,最后出 1-3 道题验证你掌握得怎么样。 登录后 AI 才能记住你的进度。

静态文件

离线资料下载

手册 HTML / PDF 已在后台预生成,点击后直接下载网站静态资源。