要做肿瘤生存类高分 SCI 论文?只靠 KM+Cox 不够。RMST 阴影 KM、Landmark HR 曲线、条件生存 nomogram 这 3 张图,是冲击高分生存类数据库(SEER、TCGA、NCDB)方法学段的"标配"。配齐这 3 件套,方法学段直接立住,没配齐的论文基本被审稿人打回返修。
方法 | 解决什么审稿人追问 | 投稿必含图 / 表 | 加分档位 |
|---|---|---|---|
RMST | "两组 tau 时间内平均多活多少天?" | RMST 阴影 KM + RMST forest plot | 4 分 → 5 分 |
Landmark | "术后早期死亡会不会扭曲治疗效应?" | Landmark KM + 连续 HR 曲线 + Cox 森林 | 4 分起步 |
条件生存 | "已经熬到 X 年的患者再活 Y 年的概率?" | 条件生存曲线族 + 嵌 CS 列线图 | 4 分偏 5 分 |
这 3 个方法单独用任何一个都能让论文从 3 分迈进 4 分门槛;3 个都用 = 方法学段落直接碾压多数审稿人。
💡 一句话记住:RMST 给数字、Landmark 控偏倚、条件生存给患者用——三个方法都不是画一张图的事,是论文方法学段落的"门面三件套"。
做什么:在指定时间 τ 之内,A 组比 B 组平均多活多少个月(不是 HR,是带单位的"差值")。
用在什么场景:
7 项 ES-SCLC 一线 ICI 试验 IPD meta 分析(n = 1,766)。HR 法结果:OS pooled HR = 0.73(0.68-0.79);RMST 法结果:pooled RMST gain = 1.98 months(1.38-2.58)。两方法方向一致,但 RMST 给出"具体多活几个月",临床可直接翻译给患者。

图 1:A) Durer 等 2026 - OS RMST forest plot(PMID 41334888, Cancer Res Commun)。pooled RMST gain = 1.98 months (95% CI 1.38-2.58, I² = 0%),对应 pooled HR = 0.73(Figure 3)。HR 给"风险降低"是比例,RMST 给"具体多活多久"是数字——RMST 才能直接告诉患者"你大概多活 2 个月"。同一试验池(n=1,766),两个度量角度。
7 trials OS pooled HR 0.73 vs pooled RMST gain 1.98 月:同一组数据,两种解读——这就是为什么越来越多期刊要求 RMST。
我们用 SeerSurvivalR 在 11 万 SEER 胃癌患者上跑了同样的 RMST 分析(JCO_rmst_km_plot,τ = 60 月),下面是代码实测输出——不是示意图。

图 2:SeerSurvivalR 3.5 实测 - Grade 3-4 vs 1-2 在 60 个月内 RMST 差异 8.31 个月(95% CI 7.98-8.64,P<0.001)。阴影部分就是两组 RMST 差对应的生存时间面积,肉眼能直接看出"低级别人群平均多活 8 个月"。
SeerSurvivalR 3.5)library(SeerSurvivalR)
# tau = 60 个月(5 年)
p_rmst <- JCO_rmst_km_plot(
data = seer_stomach,
time_col = "time",
status_col = "status",
group_col = "Grade_bin",
tau = 60
)
# 出图:打印 + 保存
print(p_rmst$plot)
ggsave("fig_rmst_shadedKM.png", p_rmst$plot, width = 10, height = 7, dpi = 150)回答审稿人问题:"两组 HR 接近,但临床实际差多少?" —— 直接给具体月份。
做什么:选定一个时间点 τ 作为"新起点",把已经活到 τ 的患者重新设基线,规避 immortal time bias(不死时间偏倚)。
用在什么场景:
157 例 III-IV 期肺恶性瘤,ablation vs laser excision,PSM 后 60-day Landmark 分析:剔除早期治疗相关死亡后,multivariable Cox HR = 0.56(0.34-0.93, p=0.025),LE 优势在 Landmark 后仍稳健。这篇文章能发,关键就是做了 Landmark sensitivity analysis 把 immortal time 堵住。

图 3:Li 等 2026 - PSM 后 Kaplan-Meier 曲线(PMID 41987194)。p = 0.048,提示 ablation 组生存劣于 laser excision 组。该论文不仅做 PSM,还做了 60-day Landmark(图未显示)作为 sensitivity analysis,对照 immortal time。

图 4:Li 等 2026 - PSM 后 multivariable Cox 森林图(PMID 41987194)。Ablation 多变量 HR = 0.52,P = 0.011,方法学段就是这种 Cox + Landmark 组合。
我们用 SeerSurvivalR 在 11 万 SEER 胃癌患者上跑了连续 Landmark 分析(τ = 12/24/36/48/60 月,共 5 个时间点)——每个 τ 跑一次 Cox,看 Grade 3-4 vs 1-2 的 HR 怎么随时间变。

图 5:SeerSurvivalR 3.5 实测 - HR 随 Landmark 时间变化曲线。12 月时 HR = 1.30,60 月时 HR = 1.04,早期 HR 显著升高、晚期趋向 1——这意味着 Grade 对死亡风险的影响"集中在前 3 年",熬过 3 年的患者 grade 已不重要。这是审稿人最难看到的"时间依赖性"洞察,传统 Cox 给不出。
SeerSurvivalR 3.5)library(SeerSurvivalR)
# 单 τ Landmark Cox
res <- landmark_cox_analysis(
data = seer_stomach,
time_var = "time",
event_var = "status",
covariates = c("Grade_bin", "Age_num", "Sex_bin"),
landmark_time = 12,
export_csv = FALSE,
print_results = TRUE
)
# 输出 before / after 双套 HR——after 更稳健才是 Landmark 的价值
# 连续 Landmark:每个 τ 都跑一次 Cox
cont <- continuous_landmark_analysis(
data = seer_stomach,
landmark_times = c(12, 24, 36, 48, 60),
formula_str = "Surv(time, status) ~ Grade_bin + Age_num + Sex_bin",
covariate_of_interest = "Grade_bin"
)
# 出 HR 随时间变化曲线
p_hr <- plot_landmark_hr_curve(
results = cont,
title = "Grade 3-4 vs 1-2 HR 随 Landmark 时间变化",
y_limits = c(0.5, 2.5)
)
print(p_hr)回答审稿人问题:"你这些治疗组里有早期死亡/早期换组的患者,处理了吗?" —— 直接拿 Landmark before/after 对比。
做什么:算 CS(t2 | t1) —— 已经活到 t1 年的患者,再活 t2 年的概率是多少。
用在什么场景:
1,552 例原发性乳腺淋巴瘤(PBL),3/5/10 年总生存率分别为 85%/77%/58%。CS 分析:活过 9 年再活 10 年的概率 = 95%;刚诊断的患者 10 年 OS 仅 58%;AHR 第 1 年高峰 8.05% 后逐年下降,3 年后趋于平稳——CS 给出"熬过 3 年就基本没事"的患者关键答案。

图 6:Zhang 等 2026 - PBL 条件生存曲线族(PMID 42305490)。左:已活到 X 年的人在接下来 Y 年里的条件生存概率;右:9×10 概率矩阵,每格颜色代表概率。10-year CS:起诊断时 58%,活过 9 年后再活 10 年 = 95%——42% 差额就是"熬过 9 年"换来的。

图 7:Zhang 等 2026 - PBL CS-Nomogram(PMID 42305490)。这不是传统 Nomogram!这种 Nomogram 的每一行 "10-year CS(9|1) probability" 都是时间条件概率,横跨 9 行——让预测"动态化"。顶刊最爱这种把 CS 嵌入 Nomogram 的图,因为它直接告诉患者"按你的情况,熬到 X 后再活 Y 的概率"。
我们用 SeerSurvivalR 在 11 万 SEER 胃癌患者上跑了 conditional_survival_risk_curve()——一张图 = 上半部分曲线族 + 下半部分 6×6 概率矩阵,正是上面 Fig 6 文献版式的"自家复刻"。

图 7-补:SeerSurvivalR 3.5 实测 - 条件生存 + 概率表二合一图。上:给定已活到 X 年,未来 Y 年条件生存概率曲线族;下:6×6 概率矩阵精确数值。读法:第 2 行第 4 列 = 73%,意思是"已活到 1 年的患者,再活 3 年的概率是 73%"。
再用 SeerSurvivalR 的 generate_nomogram_with_cs() 在同一份数据上跑了直接把 CS 嵌进 Cox 列线图——正是上面 Fig 7(Zhang PBL)那种"CS-Nomogram"的自家复刻。

图 7-补 2:SeerSurvivalR 3.5 实测 - CS 嵌入 Cox 列线图(仿真 Zhang PBL Fig 7 风格)。模型变量:Grade_bin / Age_num / Sex_bin;底部 6 行:3 行普通生存率 + 3 行条件生存率。临床用法:患者总分算出来→沿 6 条概率线分别读出"1/3/5 年总生存率 + 熬过 1 年后再活 1/2/4 年的条件生存概率"。
我们在 11 万 SEER 胃癌患者上跑了同样的 CS 分析——输出的是真实数据曲线,不是示意图。

图 8:SeerSurvivalR 3.5 实测 - 胃癌患者条件生存曲线族。彩线按"已活到 X 月"分层(X = 0/12/24/36/48/60)。随着 X 增大(已熬过更长时间),条件生存曲线越来越"平",意味着后期死亡风险越来越低——这是"熬到一定时间就基本没事"的视觉证明。
SeerSurvivalR 3.5)library(SeerSurvivalR)
library(survival)
# 1) 先拟合 KM
km <- survfit(Surv(time, status) ~ 1, data = seer_stomach)
# 2) 条件生存曲线族
p_cs <- plot_conditional_surv_curve(
km_fit = km,
at = seq(0, 60, 12),
main = "胃癌患者条件生存曲线",
xlab = "未来生存时间 (月)",
ylab = "条件生存概率"
)
print(p_cs)
# 3) 把 CS 嵌入 Cox 列线图(顶刊最爱看的"动态预测")
cox <- cph(Surv(time, status) ~ Grade_bin + Age_num + Sex_bin,
data = seer_stomach, x = TRUE, y = TRUE, surv = TRUE)
nom <- generate_nomogram_with_cs(
cox_model = cox,
surv_times = c(1, 3, 5),
cs_times_list = list(c(1, 2), c(1, 3), c(1, 5)),
funlabel = c("1-year", "3-year", "5-year",
"CS(2|1)", "CS(3|1)", "CS(5|1)"),
xfrac = 0.25
)
plot(nom, xfrac = 0.25)回答审稿人问题:"熬过难熬期后,这群患者实际命运如何?" —— 直接用 CS(5|3) 给具体数字。
投稿档次 | Figure 数 | 至少包含 |
|---|---|---|
3 分 | 3–4 张 | Flow + KM + Cox forest + 校准 |
4 分 | 5–6 张 | 上述 + RMST 阴影 / Landmark HR 曲线 / CS 曲线 |
5 分 | 7+ 张 | 上述 + CS 嵌入列线图 + 连续 Landmark + RMST 森林图 |
只做"4 件套"(KM + Cox + PSM + 竞争风险)已经到 4 分。如果你想挤进 5 分期刊(>5 IF),这 3 个高阶方法至少要做 2 个——多数审稿人一看方法学段就心里有数。
审稿人问题 | 用什么方法答 | 哪张图配 |
|---|---|---|
治疗到底有没有获益? | Cox HR | 森林图 (Fig 4) |
HR 看起来接近,临床实际差多少? | RMST | 阴影 KM (Fig 2) + RMST forest (Fig 1) |
这群患者的死亡 / 换组有 immortal time 偏倚吗? | Landmark | 连续 HR 曲线 (Fig 5) |
早期死亡会不会扭曲结论? | Landmark | KM (Fig 3) + Cox (Fig 4) |
已经熬过难熬期的患者以后命运如何? | 条件生存 | 曲线族 (Fig 6+8) + 列线图 (Fig 7) |
HR 在不同时间会变吗? | 连续 Landmark HR 曲线 | Fig 5 |
长期随访可靠吗? | Reverse KM 中位随访 | —— |
cox.zph() 的话 HR 是错的;如果违规,要么用 Landmark 分段,要么换 RMSTat 最大值不能超过最大观测生存时间;SEER 胃癌最长 227 月,你 at 设 300 月直接报错RMST 给数字、Landmark 控偏倚、条件生存给患者用——这 3 个方法是 4 分 SCI 的"基线工具"、5 分 SCI 的"入场券"。做完 4 件套再做这 3 个,方法学段落直接立住,审稿人没得挑。
下一步立刻能做的 3 件事:
landmark_cox_analysis(data, landmark_time = 12),对比 Landmark 前后 HR 变化——变化大说明 immortal time 偏倚严重,Discussion 第一段就能写generate_nomogram_with_cs),回邮件给导师看,他会立刻让你加进论文SeerSurvivalR 3.5 把上面三种分析做了一行代码封装,仅按"RMST / Landmark / 条件生存"三块组织:
rmst_analysis() — 单个 tau 的 RMST 差异分析(未调整 / 调整)rmst_table_unadjust() — 未调整 RMST 多时间点 Word 表rmst_table_adjust() — 调整后 RMST 多时间点表 + 自动生存曲线JCO_rmst_km_plot() — JCO 风格 KM + RMST 阴影面积图(本篇 Fig 2 用这个)jco_rmst_survival_curve() — 单组 RMST 曲线 + RMTLrmst_waterfall_plot() — RMST diff 瀑布图(多 tau 对比)rmst_psi_plot() / rmst_psi_threshold_table() — 预后指数辅助landmark_cox_analysis() — 单个 τ 的 Landmark Cox(输出 before/after 双表)landmark_survival_KM() — Landmark KM 曲线continuous_landmark_analysis() — 连续 Landmark(多个 τ 各跑一次 Cox,本篇 Fig 5 用这个)plot_landmark_hr_curve() — HR 随 τ 变化曲线(本篇 Fig 5 用这个)landmark_hr_table() / plot_landmark_hr_comparison() — 横向对比plot_conditional_surv_curve() — CS(t2|t1) 条件生存曲线(本篇 Fig 8 用这个)generate_conditional_survival_table() — 多 t1 / t2 条件生存概率表conditional_survival_risk_curve() — 条件生存曲线 + 概率表 二合一(本篇 Fig 7-补 用这个,正是用户说的"那种图 + 表格集合")generate_nomogram_with_cs() — 把 CS 嵌入 Cox 列线图(本篇 Fig 7-补 2 用这个;复刻 Zhang PBL Fig 7 结构)安装:
install.packages("SeerSurvivalR_3.5.0.zip", repos = NULL, type = "source")
📌 一句话总结:KM + Cox + PSM + 竞争风险 = 3 分方法学基线;再加 RMST + Landmark + 条件生存 = 4 分 SCI 的方法学门面,5 分 SCI 的入场券。SeerSurvivalR 3.5 把这 3 类高阶分析都做了一行代码封装,跑完 4 件套再做这 3 个,等于把审稿人想问的"方法还有什么补充"全部提前堵死。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。