临床医学与生存分析
Kaplan-Meier 生存分析
估计生存率并绘制生存曲线,常用于比较两组或多组的生存时间差异。
这篇能回答什么
Kaplan–Meier(KM)生存分析回答的是:「到某一随访时刻,尚未发生关注终点(死亡、复发、失效等)的比例是多少」。它在每个事件发生时更新生存概率,并把删失(失访、研究结束时仍未发生事件)保留在风险集里直到删失时刻,而不是当成失败或直接删掉。指定分组后,分别画各组曲线,并用对数秩检验(Log-rank)比较曲线是否有系统差异。
适合:有随访时长(从入组、诊断或随机化起算的定量时间)和 0/1 事件状态。可选一个定类分组(方案、分期、中心)。用于描述总体或组间生存,而不是在控制多个协变量后估计风险比。
什么时候不该用
需要同时调整年龄、标志物等多个协变量时,主分析应是Cox 比例风险回归。存在互为排斥的多种终点(如复发 vs 治疗相关死亡)时,KM 会把竞争事件当删失而高估目标事件发生率,应改用竞争风险模型。评价连续指标区分患病/未患病的能力,用ROC 曲线,不是 KM。随访时间若其实是日历年份或编号,不能当作生存时间。
如何选择方法
先分清问题是描述与组间比较生存曲线,还是协变量调整后的风险比,还是诊断试验的区分度。只有时间 + 事件 ± 一个分组时用 KM;要 HR 与混杂控制用 Cox;多种终点互斥用竞争风险;二分类金标准 + 连续得分用 ROC。
Kaplan-Meier:1 个随访时间、1 个 0/1 事件、0–1 个定类分组;输出中位生存、Log-rank 与阶梯生存曲线。
Cox 回归:在 KM 基础上加入协变量,估计风险比(HR)与 95% 置信区间。
竞争风险 (CIF/CSH):除目标事件外还有竞争终点,不能把竞争事件当普通删失。
列线图 / ROC:临床预测或诊断截断,目标不是生存曲线本身。
输入、输出与限制
输入
随访时间为定量(通常为正的持续时间,不是日历日期本身)。事件状态为二元定类:1 = 发生终点,0 = 删失。分组变量可选,须为定类。
随访时间:最少 1 个,最多 1 个,定量。
事件状态:最少 1 个,最多 1 个,二元定类。
分组变量:最少 0 个,最多 1 个,定类。
输出
汇总表给出各组中位生存时间;删失过多、曲线从未降到 50% 时显示「未达到 (Not Reached)」。表注含总样本、终点事件数,以及两组及以上时的 Log-rank P 值。图为带风险集信息的 KM 阶梯曲线。文字洞察概括事件数与组间检验。
产品限制
有效样本(时间、事件、可选分组按行删除缺失后)至少 10 条。
事件列按发生 / 删失编码;人口学二分(如性别)不能代替结局。
分组最多 1 个定类变量;多组时做多元 Log-rank。
中位生存取曲线降到 0.5 的时间;从未降到 0.5 则报告「未达到」,不是缺失。
KM 不输出 Cox 的 HR,也不自动处理竞争事件。
案例
研究问题。 比较「标准方案」与「试验方案」两条生存曲线是否不同。随访从入组起算,事件为关注终点;研究结束或失访记为删失。
教学示例来自临床随访表,工作表为「survival」,有效样本量 280。列包括随访时间、事件、竞争事件、分组、年龄、性别、标志物。本页 KM 使用随访时间、事件,分组选「分组」(标准方案 / 试验方案)。本示例终点仅 12 例,多数观测为删失——这是刻意保留的教学形态,用来说明「未达到」与低事件数下的 Log-rank。下载后可在工作台按同样角色复现。
在 StatsX 中操作
步骤 1 · 上传表格
打开工作台,将 Excel / CSV / JSON 拖入上传区。本案例使用临床随访 xlsx,确认工作表为「survival」。单文件不超过 20 MB。
步骤 2 · 查看画像与质量
确认「随访时间」为定量、「事件」为 0/1、「分组」为定类。不要把竞争事件列或年龄当成 KM 的事件状态。
步骤 3 · 选择「Kaplan-Meier 生存分析」
在算法目录搜索「Kaplan」或「生存」,点选 Kaplan-Meier 生存分析。
步骤 4 · 指定变量并运行
随访时间勾选「随访时间」;事件状态勾选「事件」;分组变量勾选「分组」(可留空以估计总体曲线)。点击运行分析。
步骤 5 · 阅读结果
先核对总 N 与事件数,再看中位生存是否「未达到」,最后读 Log-rank P 值与曲线形状。事件很少时,不显著不等于证明等效。




如何阅读输出
下表由同一份教学示例在 StatsX 中运行 Kaplan–Meier 得到。总样本 280,终点事件仅 12 例。两组中位生存均为「未达到」:生存曲线在当前随访内从未降到 50%。Log-rank P = 0.9108,不能拒绝「两组生存曲线相同」的原假设。
| 分组 | 中位生存时间 (Median Survival Time) |
|---|---|
| 标准方案 | 未达到 (Not Reached) |
| 试验方案 | 未达到 (Not Reached) |
总样本量: 280,发生终点事件数: 12。 各组间生存曲线差异对数秩检验 (Log-Rank Test) P值 = 0.9108。


【Log-Rank检验】统计不显著(p=0.911, α=0.05),结论:各组生存率不存在显著差异;曲线越陡预后越差。
解读顺序:时间原点是否与研究问题一致 → 事件数 / 删失数 → 中位生存(或「未达到」)→ Log-rank。本教学示例的正确写法是:在 12 个终点、大量删失的前提下,没有证据表明两方案生存曲线不同;不是「已证明两方案预后相同」,也不是「中位生存缺失」。若要调整年龄与标志物,应接着做 Cox;若「竞争事件」列代表另一种终止原因,应改竞争风险模型,而不是继续把该列当普通删失。
理论与公式
设有序的事件时刻 t_i,该时刻有 d_i 人发生事件,风险集人数为 n_i(仍在随访且此前未发生事件、未删失)。Kaplan–Meier 生存函数是条件生存概率的连乘:
中位生存时间定义为 S(t) 降到 0.5 的最小 t;若全程 S(t) > 0.5,则中位生存未达到。两组或多组比较采用对数秩检验:在比例风险为常数的原假设下,比较各时间点的观测事件数与期望事件数。StatsX 在分组数 ≥ 2 时报告该检验的 P 值。删失个体在删失时刻之后不再进入 n_i,但删失前一直留在风险集中。
注意事项
删失不是缺失:把删失改成事件或删掉删失行都会系统性地扭曲 S(t)。
时间原点(入组、诊断、随机化)必须写进方法学;混用不同原点会让曲线失去含义。
事件数很少时 Log-rank 效力低,「不显著」不能写成等效或非劣效。
「未达到」只说明曲线未过 50%,常见于随访短或终点稀。
KM 是单因素描述;组间基线不平衡时,差异可能来自混杂而非分组因素。
竞争事件若被编码为 0,KM 会高估目标事件的累积发生;应改用竞争风险。
常见问题
参考文献
陈峰. 医用多元统计分析方法[M]. 中国统计出版社.
Kaplan, E. L., & Meier, P. Nonparametric Estimation from Incomplete Observations[J]. Journal of the American Statistical Association, 1958, 53(282): 457–481.
Collett, D. Modelling Survival Data in Medical Research[M]. CRC Press.
Kleinbaum, D. G., & Klein, M. Survival Analysis: A Self-Learning Text[M]. Springer.