生存分析

官方医学老师·19 页·深入(追求细节与边界)·0 次浏览·2 天前
生存分析时间-事件删失数据Cox 模型

生存分析

掌握删失机制、KM 估计、Cox 比例风险与加速失效模型的适用边界

按 空格/→ 演示下一步

1 / 19 页

全部页面点击任意一页,跳回舞台从这页播放

生存分析时间-事件删失数据Cox 模型

生存分析

掌握删失机制、KM 估计、Cox 比例风险与加速失效模型的适用边界

1第 1 页 · 生存分析

什么是生存分析

医生随访 100 位肺癌术后患者,想知道他们能活多久。但有人中途失联,有人研究结束时还活着——这些「没看到终点」的人该怎么办?这正是生存分析要回答的核心问题。

时间-事件数据
每个个体有一个观察时长和一个终点结局(如复发、死亡),二者缺一不可。
删失数据
右删失样本:研究结束仍未发生事件、或中途失访,只知「至少活到某时点」。
核心目标
不是预测均值,而是刻画「活过 t 时刻的概率 S(t)」随时间的变化曲线。
与回归的区别
普通回归简单丢弃删失样本,生存曲线会系统性偏差;生存分析以生存函数为核心专门处理这种数据。
灯泡寿命测试对应 →生存分析

灯还在亮不代表不会坏,只是「至今未坏」;生存分析正是用这种「部分信息」反推真实寿命分布

S(t)=P(T>t)S(t)=P(T>t)
2第 2 页 · 什么是生存分析

生存时间与事件

上一页我们知道了生存分析关心的是「事件什么时候发生」。要把这件事说清楚,先得固定三个东西:起点、终点,以及它们之间的时间长度。这一页就来拆这三块。

起点事件
观察正式开始的那个事件,必须是单一、可时间戳的瞬间,如确诊、入组、治疗启动
终点事件
研究者关心的「失败」事件,如死亡、复发、机器故障;不一定是负面的
生存时间
终点事件发生时刻减去起点事件发生时刻,单位通常是天、月或年
边界提示
起点和终点必须是可观测的单一事件,渐变过程会破坏生存时间的精确定义
灯泡的服役期对应 →生存分析的时间要素

起点=通电瞬间,终点=烧坏瞬间,生存时间=通电到烧坏的时长

T=tendtstartT = t_{\text{end}} - t_{\text{start}}
3第 3 页 · 生存时间与事件

删失数据的类型

以观测窗口为参照,看真实事件时间 T* 落在哪,决定删失类型。

图解渲染中…
bT* 是真实事件时刻,研究者无法直接观察eT* > T_exit:只知道事件在某时刻之后发生fT* < T_enter:只知道事件在某时刻之前已发生gT_a ≤ T* ≤ T_b:只知道事件夹在两次检查之间
4第 4 页 · 删失数据的类型

Kaplan-Meier估计法

KM估计法把生存曲线拆成一步步的条件概率相乘,删失只影响风险人数。

1
排序事件时刻
将所有事件时刻从小到大排序,删失时间也参与排序
2
计算风险集
每个事件时刻t(i)处,统计仍存活且未删失的人数n(i)
3
计数事件数
记录t(i)时刻发生事件的人数d(i),删失不计入事件
4
条件生存率
该时刻存活概率p(i)=1-d(i)/n(i),代表度过此关的概率
5
连乘得估计
Ŝ(t)=∏p(j),所有不晚于t的条件概率连乘即KM估计
5第 5 页 · Kaplan-Meier估计法

生存曲线的绘制

从左到右读这张流程图:依次是数据准备、关键量计算、概率累积、阶梯绘制和删失标注。

图解渲染中…
a3n_i 是 t_i 时刻仍在风险池的人数;d_i 是该时刻事件人数a5累积生存率 S(t):所有 ≤t 的条件生存概率连乘a6事件时刻先水平后垂直下跳一格,形成阶梯a7删失点画短竖线,曲线此处不下跳
6第 6 页 · 生存曲线的绘制

生存曲线的中位生存期

KM曲线画出来后,盯着它能回答的第一个临床问题就是:这群病人"典型"还能活多久?答案不在曲线最低点,而在它高度刚好降到一半的那个时间。

中位生存期定义
生存率S(t)恰好等于0.5时所对应的时间点
曲线读法
从y轴0.5处画水平线,找到与曲线的交点,垂直落到x轴读时间
半数事件含义
到这一时间点,恰好有50%的个体已经发生目标事件
未达到情况
若曲线始终高于0.5,则中位生存期"未达到",不可外推估计
考试成绩中位数对应 →中位生存期

都是找"恰好一半"对应的位置——分数是一半人低于它,时间则是一半人活不过它

S(tmed)=0.5S(t_{med}) = 0.5
7第 7 页 · 生存曲线的中位生存期

生存曲线类型对比

KM 曲线本就呈阶梯状,关键是判断下降是否陡峭、平台是否稳定,以及两者如何组合。

陡峭型
  • 生存率随时间快速下降,早期事件较多
  • 曲线可出现连续或多次垂直下降
  • 中位生存期往往较短,整体预后偏差
  • 提示近期风险高,应关注早期干预
平坦型
  • 生存率长期维持高位,事件发生较少
  • 曲线后段接近水平,形成稳定平台
  • 中位生存期可能无法实际达到
  • 提示长期预后较稳定,但仍非零风险
早期事件多、生存期短时选陡峭型;长期事件少且平台稳定时选平坦型。阶梯状只是 KM 的画法,并非独立预后类型。
8第 8 页 · 生存曲线类型对比

为什么要比较生存率

看到两条生存曲线明显分开,我们自然会问:这个差异是真实的,还是只是抽样波动?这就需要假设检验。但生存数据有个特殊难点——删失让 t 检验、卡方检验等传统方法全都失效。

比较的真实动机
临床试验要判断新疗法是否真正延长了生存,不是表面看起来有效就行
传统检验为何失效
删失数据没有完整观测值,均值、t 检验、卡方检验都无法直接用
检验对象是整条曲线
不是比一个数字(如中位生存期),而是比整个生存过程是否相同
log-rank 逐时刻比较
在每个事件发生点,算实际死亡数与预期死亡数的差距,累积求和
评估两款手机电池续航对应 →生存曲线假设检验

不能只看平均续航小时数,要追踪整条放电曲线;中途损坏的电池(删失)必须用专门方法处理

9第 9 页 · 为什么要比较生存率

Log-rank检验原理

Log-rank检验的核心:把每个事件时刻的观察死亡数 O 与零假设下的期望死亡数 E 比一比,差距越大说明两组越不像。

1
找事件时刻
把所有发生事件的时间点拎出来,作为检验的锚点
2
列风险集
在每个事件时刻之前,列出两组中尚未删失、未发生事件的个体
3
算期望数
零假设下两组生存率相同,风险集中每人死亡概率相等,可算出该组期望死亡数
4
累加求和
把各时刻每组的观察数 O 和期望数 E 分别累加,得到总 O 与总 E
5
卡方检验
用 χ² 统计量比较总 O 与总 E 的偏离程度,差异大则拒绝零假设
10第 10 页 · Log-rank检验原理

Log-rank检验的步骤

顺着箭头读:从假设出发,经统计量计算,到最终决策。

图解渲染中…
a2在每个事件时间点计算各组期望死亡数a6α为显著性水平,通常取0.05
11第 11 页 · Log-rank检验的步骤

Log-rank vs Breslow

两组曲线看着差不多,两个检验却给出不同 p 值——分歧就在权重。

Log-rank 检验
  • 每个时间点权重相等,看全程
  • 对远期/晚期差异更敏感
  • 适用于比例风险假设成立
  • 检验统计量为实际-期望死亡数
Breslow 检验
  • 权重=当期风险人数,越早越重
  • 对近期/早期差异更敏感
  • 比例风险不成立时更稳健
  • 加权版的实际-期望死亡数
默认用 Log-rank;早期差异明显或比例风险不成立时,选 Breslow。
12第 12 页 · Log-rank vs Breslow

Cox模型的基本思想

前面Log-rank只能比较组间生存差异,但临床常需同时控制年龄、性别、分期、治疗等多个混杂因素。Cox模型的精妙在于:用'半参数'结构绕开了最棘手的分布假设。

模型结构
风险分解为基线h₀(t)与协变量效应exp(βX)的乘积
半参数含义
h₀(t)完全不指定(免设分布),β仍按参数估计
分布自由
无需假设生存时间服从Weibull或指数等具体分布
风险比HR
直接产出HR=exp(β),即协变量对瞬时风险的乘性效应
房租定价对应 →Cox半参数模型

不必知道基准房租的精确分布,但能精确量化学区、楼层对房租的乘性影响

h(tX)=h0(t)exp(β1X1+β2X2++βpXp)h(t|X) = h_0(t) \cdot \exp(\beta_1 X_1 + \beta_2 X_2 + \cdots + \beta_p X_p)
13第 13 页 · Cox模型的基本思想

Cox模型的基本形式

Cox模型把风险函数拆成基线风险与协变量效应两部分,用偏似然绕过基线估计,直接求解回归系数。

图解渲染中…
a4未指定函数形式的非参数部分a5协变量对风险的乘性放大或缩小a6只用事件顺序,不依赖h₀(t)a7时刻t仍存活且未删失的样本集合
14第 14 页 · Cox模型的基本形式

比例风险假设

前面用 Cox 模型把协变量转成风险倍率;现在要问:风险倍率会不会随时间改变?

比例风险
在 Cox 模型中,任意同一时点两组风险之比随时间近似不变,记为 HR。
相对风险不变
HR 恒定表示协变量效应稳定;绝对风险、生存概率和风险差仍可随时间变化。
图形检验
绘制 log(-log S(t)) 对 log t 的图;组间曲线越近似平行,越支持 PH 假设。
残差与修正
Schoenfeld 残差应无时间趋势;加入时间交互项可检验,违反时可改用分段或含时模型。
两辆车的速度比对应 →比例风险假设

两车速度比全程大致固定,类比任意时点风险比不随时间漂移;并非风险差固定。

h(tx)=h0(t)eβTx,HR(t)=h(tx1)h(tx0)=eβT(x1x0)h(t\mid x)=h_0(t)e^{\beta^T x},\qquad \mathrm{HR}(t)=\frac{h(t\mid x_1)}{h(t\mid x_0)}=e^{\beta^T(x_1-x_0)}
15第 15 页 · 比例风险假设

Cox模型结果解读

图里三条支线分别判读HR、CI、p值,最后汇成综合结论;右侧f1/f2/f3给出三种典型结局。

图解渲染中…
e1HR=exp(β),反映协变量风险倍数c1CI越宽,估算精度越低(样本量不足)f2大样本下p易显著,但HR≈1无临床价值
16第 16 页 · Cox模型结果解读

Cox模型的R语言实现

r

用 survival::coxph 在经典肺癌数据上拟合 Cox 模型,并检验比例风险假设。

代码高亮加载中…

高亮行串起 Cox 模型「建对象→拟合→检假设→取 HR」的完整链路。

17第 17 页 · Cox模型的R语言实现

Cox模型自测

点击作答

Cox比例风险模型中'比例风险'(PH)假设的核心数学含义是?

18第 18 页 · Cox模型自测

课后思考

三个问题覆盖三个层次,建议先独立思考,再对照参考答案。

1为什么生存分析能直接处理删失数据,而普通线性回归却不行?

参考答案因为删失数据提供了「至少活到某时点」的部分信息,生存分析通过似然函数把这部分贡献纳入估计;而回归若直接丢弃或填补,等于损失或扭曲了真实信息。

2Log-rank 显示组间无显著差异,但 Cox 模型却找到了显著风险因子,可能吗?

参考答案可能。Log-rank 只看整体曲线分布;Cox 在调整其他协变量后能揭示特定因素的条件效应,这正是 Cox 相对 Log-rank 的增量价值所在。

3如果两条生存曲线后期明显交叉,Log-rank 或 Cox 模型还能放心使用吗?

参考答案可以,但结论会失真。后期交叉意味着风险比随时间变化,违背了 PH 假设;此时应考虑时依赖系数、分段模型或加速失效时间模型。

19第 19 页 · 课后思考