1 方法与基本概念

1.1 生存函数与时间到事件

在时间到事件(time-to-event)分析中,关注的是“从起点开始到某事件发生为止”的持续时间。常见事件包括死亡、复发、故障等。生存函数通常记为 \(S(t)\),表示随机个体在时间 \(t\) 之后仍未发生事件的概率,即 \[ S(t)=P(T>t), \] 其中 \(T\) 为事件发生时间。Kaplan–Meier估计的目标,是用样本数据构造对 \(S(t)\) 的非参数估计,从而得到随时间变化的生存概率曲线(阶梯曲线)。

1.2 右删失数据的含义

右删失(right censoring)指:个体在随访过程中未观察到事件发生,但我们只知道其事件时间超过了某个观测截止点。典型情形包括研究结束时仍未发生事件、随访中失访但在失联前未发生事件等。

右删失使得事件时间不能被精确观测到,但仍包含有用信息:删失个体在其删失时间之前一直“处于未发生事件”的状态。Kaplan–Meier估计正是利用这一点,将删失信息通过“风险集”纳入计算。

1.3 阶梯式估计的直观理解

Kaplan–Meier曲线随时间在“事件发生时刻”向下跳。直观上,可以将每个事件时刻的下降理解为:在该时刻,风险集中的部分个体发生事件,因此生存概率按比例减少;随后在下一事件时刻到来前,生存概率保持不变。

这种“阶梯式”并非人为设定,而是因为生存概率只在事件发生的离散时间点更新;删失发生时不会直接造成曲线下降,但会影响后续风险集规模。

2 Kaplan–Meier估计的构建

2.1 计算公式与乘积极限形式

设事件发生的不同时间点为 \(t_1<t_2<\cdots<t_k\)。在每个 \(t_j\) 时刻,令 \(d_j\) 为该时刻发生事件的个体数,\(n_j\) 为该时刻仍处于风险中的个体数(风险集大小)。Kaplan–Meier估计可写为乘积极限形式: \[ \hat S(t)=\prod_{t_j\le t}\left(1-\frac{d_j}{n_j}\right). \] 该形式体现了“每一次事件时刻的条件生存概率相乘”的思想:在给定已到达时刻 \(t_j\) 的前提下,不在该时刻发生事件的比例依次相乘,得到累计到时间 \(t\) 的生存概率估计。

2.2 事件时间排序与风险集

构建风险集需要同时考虑事件与删失。对每个事件时间点 \(t_j\):

  • \(n_j\):包括所有尚未在 \(t_j\) 之前发生事件、且其观测时间(未删失或删失时间)不早于 \(t_j\) 的个体。
  • \(d_j\):在 \(t_j\) 恰好发生事件的个体数。

由于删失个体在其删失时间之前仍属于风险集,删失时间点之后不再计入后续风险集。正确的排序与归属是实现KM估计时最常见的关键步骤。

2.3 估计量的逐步更新过程

实际计算通常以时间顺序迭代:

  1. 初始化 \(\hat S(0)=1\)(从起点到起点,事件尚未发生,概率为1)。
  2. 按事件时间点 \(t_1,t_2,\ldots\) 逐次处理。
  3. 在每个 \(t_j\) 更新乘积:\(\hat S(t_j)=\hat S(t_{j-1})\left(1-\frac{d_j}{n_j}\right)\)。
  4. 在两事件时间点之间的区间内,\(\hat S(t)\) 保持常数,形成阶梯。

删失发生时一般只用于调整 \(n_j\) 的大小,不直接参与 \(\left(1-\frac{d_j}{n_j}\right)\) 中的 \(d_j\)。

2.4 与频数表/汇总数据的对应关系

KM估计可与“事件-风险汇总表”一一对应。汇总表通常包含每个事件时间点的:

  • 事件数 \(d_j\)
  • 风险人数 \(n_j\)
  • 事件比例(或下降因子)\(1-d_j/n_j\)

一旦汇总表构建完成,KM曲线就可由乘积规则直接生成。因此,在数据处理层面,很多软件先计算汇总量,再用这些量更新生存函数。

3 置信区间不确定性评估

3.1 Greenwood公式(方差估计)

Kaplan–Meier估计的不确定性常通过方差近似来评估。经典的 Greenwood 公式给出了 \(\hat S(t)\) 的方差估计形式,常用于构造置信区间。其核心思想是将每个事件时刻造成的“随机波动”累积,并考虑该时刻风险人数对方差贡献的影响。

在实践中,软件往往直接基于Greenwood方差或其变体来计算标准误,从而进一步得到区间估计。

3.2 置信区间的常见实现方式

常见做法包括:

  • 基于对称近似的区间(直接用 \(\hat S(t)\) 与标准误构造)。
  • 变换尺度的区间(例如在对数或反正切等尺度上构造区间,再反变换),以改善区间端点落在 \([0,1]\) 范围内的性质。
  • 使用不同置信水平(如95%)报告结果。

不同实现会在区间宽度、末端行为(尤其是尾部数据稀少时)上表现出差异。解读时应注意所用区间方法与软件默认选项。

3.3 中位生存期的定义与读取

中位生存期(median survival time)常定义为满足 \[ \hat S(t)\le 0.5 \] 的最小时间点。由于KM曲线阶梯式,实际读取通常对应到“曲线首次跌破或等于0.5”的那个事件时间点。若曲线在观察期内始终高于0.5,则中位生存期可能无法估计(或标记为“未达到”),这与样本随访长度及删失分布有关。

3.4 曲线可视化中的常见标注

在图形展示KM结果时,常见标注包括:

  • 生存曲线(不同组用不同颜色/线型区分)
  • 置信区间带(通常为阴影或上下界曲线)
  • 事件发生时刻的分段特征(体现阶梯)
  • 中位生存期的水平参考线(如0.5)以及对应的时间标记

标注的目的是帮助读者快速定位差异与不确定性来源,但也需避免对阶梯点之间的插值做过度推断。

4 结果解读与统计推断应用

4.1 组别比较:对数秩检验概述

当数据按组别划分(例如不同治疗方案、不同风险分层),常用对数秩检验(log-rank test)评估两组或多组生存曲线是否存在统计学差异。其基本思想是:在每个事件时间点比较各组在风险集中的“期望事件数”与“实际事件数”,再累积形成检验统计量

对数秩检验对“较大时间范围内的一致差异”更敏感,但并不保证对所有形式的差异(例如早期差异而后迅速收敛)都同样敏感。

4.2 估计曲线的比较原则

对比不同组的KM曲线时,常用原则包括:

  • 看整体趋势:曲线是否持续分离、是否交叉
  • 同时关注不确定性:若置信区间大量重叠,并不能直接证明无差异,但提示证据可能不足。
  • 关注尾部:末端风险人数变少时,估计波动通常增大,图上差异可能更不稳定。

此外,若曲线出现显著交叉,应谨慎使用单一检验的直觉判断差异性质是否匹配。

4.3 约束与适用条件

KM估计与基于其的经典比较方法依赖于常见的统计假设框架,尤其涉及删失机制是否与事件过程“相互独立”以及随访过程的可比性。简而言之,KM曲线能够在适当条件下给出合理估计;若删失严重受事件相关因素强烈影响,且这种影响未被建模,结果的解释可能偏离真实差异。

4.4 常见误读与避免,如删失机制忽视

常见误读包括:

  • 将删失当作“发生事件”,或忽略删失只是在该时间点之后不再观察到事件的事实
  • 只看中位生存期而忽略曲线形状:当尾部未达到0.5时,中位值不可估,强行估读会产生误解。
  • 过度相信尾部差异:风险集很小时,阶梯下降可能由少数事件驱动,统计波动大。
  • 忽视删失机制:即便KM本身能处理右删失,仍需评估删失是否与研究对象状态存在系统性关联

正确做法通常是同时报告风险表(风险集规模随时间变化)、置信区间以及必要的假设说明。

5 实践流程与实现要点

5.1 数据准备:事件/删失标记

实现KM估计前需要明确两类信息:

  • 观测时间:每个个体的随访结束时间(若发生事件则为事件时间;若删失则为删失时间)。
  • 事件指示变量:通常用0/1或布尔值标记是否发生事件(例如1表示事件发生,0表示右删失)。

数据中还需保证时间变量单位一致、起点一致,并处理缺失值与异常值

5.2 关键变量的编码规范

实践中建议遵循一致编码以避免软件解释错误:

  • 事件发生标记与删失标记的约定要与所用函数一致(不同软件或参数默认可能不同)。
  • 组别变量应为分类变量,且组别水平明确可追踪。
  • 对于需要做组别比较的情况,组别样本量不宜过小(否则检验与区间估计会更不稳定)。

此外,若存在并列事件时间(多个个体在同一时刻发生事件),应确保计算过程能正确处理这些并列点(通常软件会自动完成)。

5.3 典型软件输出解读(R、Python等的KM曲线)

常见输出包括:

  • 生存曲线(随时间的 \(\hat S(t)\))
  • 置信区间(多为默认方法)
  • 中位生存期及其区间(视是否达到0.5而定)
  • 组别比较检验结果(如对数秩检验的统计量与p值
  • 风险表(risk table):展示各时间点风险集大小,有助于判断曲线尾部可靠性

解读时应把p值与效应大小、以及曲线分离程度结合起来,而不只追求显著性。

5.4 质量检查:风险集与事件点核对

质量检查通常包括:

  • 核对事件时间排序与是否存在负值或不合理量纲。
  • 检查每个事件时刻的 \(d_j\) 与 \(n_j\) 是否与原始数据可追溯(至少抽样核对)。
  • 查看风险表:在极端删失或分组样本不均衡时,风险表的快速下降能解释尾部估计不稳定。
  • 对比手工小规模计算与软件结果:用于验证事件标记方向、删失处理逻辑是否正确。

这些步骤能减少“标记反了”“时间字段用错”“分组赋值错误”等常见实现偏差,提升结论的可信度