Kaplan-Meier生存分析模拟器 返回
统计分析

Kaplan-Meier生存分析模拟器

从包含截尾数据的生存时间数据中,使用Kaplan-Meier法估计生存曲线的工具。改变对象数、真实生存中位数和截尾比例,实时观察特征性的阶跃生存曲线、评估时点的生存率、风险集合推移和KM估计的中位生存期。

参数设置
对象数
跟踪的对象总数(患者、部件等)
真实生存中位数
生成数据的目标群体真实中位生存期
截尾比例
%
事件未被观察而跟踪结束的对象比例
评估时点
读取生存率S(t)的时刻
随机数种子
相同种子生成相同数据集(可重现性)
计算结果
事件数 (件)
截尾数 (件)
评估时点的生存率 S(t) (%)
KM估计的生存中位数 (月)
评估时点的风险集合 (人)
截尾率(实绩)(%)
Kaplan-Meier生存曲线(动画)

纵轴为生存概率(1→0),横轴为时间。曲线仅在事件发生时刻阶跃下降,小竖线标记截尾的观察时刻。评估时点的标记显示S(t)。

KM生存曲线 S(t)
风险集合推移 n(t)
理论·主要公式

$$\hat S(t)=\prod_{t_i\le t}\left(1-\frac{d_i}{n_i}\right)$$

Kaplan-Meier估计量。在每个事件时刻$t_i$,将该时刻的事件数$d_i$除以该时刻前的风险集合人数$n_i$,计算$(1-d_i/n_i)$并连乘。曲线仅在事件时刻下降,截尾仅减少风险集合$n_i$而不产生步长。

$$\lambda=\frac{\ln 2}{m},\qquad T=-\frac{\ln(1-u)}{\lambda}$$

数据生成的指数分布模型。从真实生存中位数$m$求得事件率$\lambda$,用逆函数法将均匀随机数$u\in(0,1)$转换为事件时刻$T$。

Kaplan-Meier法简介

🙋
「生存分析」是指医学论文中经常出现的那种逐渐下降的阶跃状图表吗?那和普通折线图有什么区别呢?
🎓
没错,那个阶跃图就是Kaplan-Meier曲线。生存分析处理的是「某个事件发生所需的时间」。患者复发、机器故障、合同取消……什么都可以。与普通平均值的区别在于存在「截尾」这个棘手问题。Kaplan-Meier法就是巧妙处理这个问题的关键所在。
🙋
「截尾」是什么意思?我没听过这个词。
🎓
简单说就是「无法跟踪到底的人」。比如在3年的追踪研究中,某个患者在第2年搬迁了,无法联系。我们不知道他是否复发了。但我们确实知道「至少2年内未复发」这个信息。这个信息不能浪费,也不能说他已经复发了。参数中的「截尾比例」提高时,这样的人数就会增加。
🙋
那Kaplan-Meier法是如何使用这些不完整的信息的呢?
🎓
巧妙之处在于不是一次性估计曲线,而是只关注事件发生的时刻。计算「该时刻生存的概率」为生存者数 ÷ 之前有风险的人数,然后逐个相乘。这就是$\hat S(t)=\prod(1-d_i/n_i)$的含义。被截尾的人在观察期间内对「风险集合的分母」有贡献,之后悄悄退出。他们不会产生步长。
🙋
所以事件发生的地方才会竖直下降呢。截尾处的小竖线是什么意思?
🎓
那就是截尾的标记(刻度线)。曲线不下降,但表示在那个位置有1个人从风险集合中退出。后期风险集合变小时,仅仅1个事件就会导致曲线大幅下落。看下面「风险集合推移」的图表,你会看到曲线末端人数很少,推估变得不稳定。
🙋
有时候中位数显示「未到达」。这是错误吗?
🎓
不是错误,反而是诚实的答复。生存中位数定义为「生存率首次跌至50%的时刻」。但追踪期短、截尾多或真实生存期长时,观察期间曲线可能到不了0.5。此时「无法确定中位数」,就显示「未到达」。在临床试验中,预后好的治疗组经常出现这个表示。

常见问题

Kaplan-Meier法是从包含截尾数据的数据中估计某一事件(患者复发、机器故障、客户流失等)发生所需时间的方法。不是一次性估计生存曲线,而是在实际发生事件的每个时点计算「通过该时刻的条件概率」,然后将这些概率依次相乘累积。结果是一条特征性的阶跃曲线,仅在发生事件的时点下降。由Edward Kaplan和Paul Meier于1958年发表。
截尾是指在跟踪期间内事件未发生而观察结束的情况。典型例子包括研究期限结束、患者搬迁无法联系、保修期满等。被截尾的对象持有「至少到这个时点事件未发生」的信息,因此不能忽视,但也不能视为事件已发生。Kaplan-Meier法通过仅在实际观察的期间内将每个对象纳入风险集合,正确处理这一信息。
生存中位数定义为KM估计的生存率S(t)首次下降到0.5或以下的事件时刻。当观察期较短、截尾较多、真实生存期较长时,跟踪过程中S(t)可能未能下降到0.5。此时无法计算中位数,显示为「未到达」。这不是bug,而是数据中无法确定中位数这一事实的反映。这表示需要更长期的跟踪或更多的对象数。
风险集合是指在某一时点既未发生事件也未被截尾,且今后可能发生事件的对象集合。在Kaplan-Meier估计中,在每个事件时刻,使用该时刻前风险集合的人数n作为分母,计算条件生存概率1−d/n。随着时间推进,事件和截尾使对象减少,风险集合呈阶跃下降。曲线后期风险集合较小时,一个事件可能导致生存率大幅变化,不确定性增加。

实际应用

医学·临床试验:Kaplan-Meier法在这个领域应用最广泛。新型抗癌药物的临床试验中,并排绘制治疗组和对照组的生存曲线,比较复发时间和总生存期。论文中常见的「中位数××个月」「××年生存率××%」这样的数值,就是从这条曲线中读取的。没有正确处理截尾的分析无法通过监管机构的审查。

可靠性工程·寿命试验:在机器部件和电子设备的寿命试验中,在规定试验时间内未故障的样品必然存在。这也是截尾。用Kaplan-Meier曲线描绘「未故障仍幸存的比例」作为时间的函数,用于保修期设定和更换时间预测。轴承、电池和半导体的寿命评估中是标准方法。

客户流失(Churn)分析:在订阅制业务中,「客户何时取消」是经营的核心。观察时仍在续约的客户是「至少继续到此」的截尾数据。通过生存分析推估客户流失时间,用曲线比较评估留存策略的效果。只需将事件改为「取消」,医学和业务中的公式完全相同。

其他时间-事件数据:失业期限(重新就职时间)、贷款违约、作为机器学习模型预测目标的离脱时间等,所有「何时发生某事」和「还未发生截尾」混合的数据都适用。共同点是正确使用了观察期间被截尾的个体信息,不浪费任何可观察范围内的信息。

常见误解和注意事项

最大的误解是「将截尾的对象从数据中删除」。因为事件未被观察到就排除对象,会导致只有追踪完成的人保留下来,生存率被系统地高估或低估,产生严重偏差。Kaplan-Meier法的价值正在于,通过「在观察期间内将截尾对象纳入风险集合」,充分利用而不浪费截尾数据的信息。删除截尾数据计算的平均生存期毫无意义。

其次是「过度信任曲线的末端部分」。生存曲线的后期风险集合人数非常少。仅仅1个事件就可能导致曲线下跌10%或20%,这样的幅度在统计上几乎没有意义。论文的标准做法是在曲线下并列显示每个时刻的风险集合人数,不看这个就谈「5年生存率高/低」很危险。本工具的「风险集合推移」图表正是为了将这一注意可视化。

最后是「忘记截尾与事件无关的前提(无信息截尾)」。Kaplan-Meier法假设截尾的原因与预后独立。如果「病情恶化的患者更容易脱落」,这个假设就破裂了,生存率会被乐观偏差。本模拟器的数据生成满足无信息截尾,但实际数据必须审视「为什么截尾」。

使用指南

  1. 输入对象患者数(nNum)和观察期间(nRange月),设置跟踪对象的群体
  2. 指定事件数(eNum)和事件发生时期的分散范围(eRange),决定观察期间内记录的事件(死亡、复发)的发生模式
  3. 输入截尾数(cNum)和截尾时期的分散范围(cRange),反映由于搬迁、无法跟踪等导致的截尾数据
  4. 执行模拟后,KM估计曲线呈阶跃状描绘,各时点的风险集合、生存率S(t)和生存中位数自动计算

具体计算例

100名肺癌患者36个月的跟踪:设置观察对象100人、跟踪期36个月、事件数65件(12个月内分散)、截尾数15件(24个月内分散),可得12个月时生存率S(t)=87.5%,24个月时S(t)=62.3%,生存中位数为18.5个月。评估时点的风险集合为20人,截尾率为15%。

实务注意事项