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 估计量的逐步更新过程
实际计算通常以时间顺序迭代:
- 初始化 \(\hat S(0)=1\)(从起点到起点,事件尚未发生,概率为1)。
- 按事件时间点 \(t_1,t_2,\ldots\) 逐次处理。
- 在每个 \(t_j\) 更新乘积:\(\hat S(t_j)=\hat S(t_{j-1})\left(1-\frac{d_j}{n_j}\right)\)。
- 在两事件时间点之间的区间内,\(\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 质量检查:风险集与事件点核对
质量检查通常包括: