拟合 Cox 比例风险模型

Python 中的生存分析

Shae Wang

Senior Data Scientist

风险函数与风险率

风险函数 $h(t)$:在已生存至时点 t 的条件下,事件在该时点发生的概率。

风险率:事件发生的瞬时发生率。

$$h(t)=-\frac{d}{dt}logS(t)$$

风险函数 $h(t)$ 与 生存函数 $S(t)$ 可互相推导。

Python 中的生存分析

比例风险假设

比例风险假设:所有个体的风险彼此成比例。

对个体 $A$ 和个体 $B$: $$h_A(t)=ch_B(t)$$

  1. 存在一个基线风险函数,其他风险由缩放因子得到。
  2. 某一变量相对生存影响不随时间变化(时间不变)。

两条生存曲线的比例风险假设对比

Python 中的生存分析

Cox 比例风险模型

基于比例风险假设: $$h(t|x)=b_0(t)exp\bigg(\sum^{n}_{i=1}b_i(x_i-\overline{x_i}\bigg)$$

$b_0(t)$:随时间变化的人群基线风险函数。

$exp\bigg(\sum^{n}_{i=1}b_i(x_i-\overline{x_i}\bigg)$:协变量与对数风险的线性关系,随时间不变。

  • Cox 比例风险(Cox PH)模型是将协变量回归到事件时间/持续时间上的回归模型
Python 中的生存分析

Cox PH 模型的数据要求

  • 持续时间(durations):个体的生存时间/持续时间。
  • 事件(events):是否观察到事件(1=是,0=否,删失)。
    • 若未提供,模型假设无删失。
  • 协变量(covariates):用于回归的连续变量或独热编码的分类变量。
Python 中的生存分析

拟合 Cox PH 模型

  1. 导入并实例化 CoxPHFitter
    from lifelines import CoxPHFitter
    coxph = CoxPHFitter()
    
  2. 调用 .fit() 拟合数据
    coxph.fit(df, duration_col, event_col)
    
  3. 查看摘要、协变量、系数、预测、绘图等属性
    coxph.summary()
    coxph.predict()
    
Python 中的生存分析

Cox PH 模型示例

  • DataFrame:mortgage_df
  • 协变量:
    • house
    • principal
    • interest
    • property_tax
    • credit_score
  • 其他列:duration, paid_off
from lifelines import CoxPHFitter

coxph = CoxPHFitter() coxph.fit(df=mortgage_df, duration_col="duration", event_col="paid_off")
Python 中的生存分析

自定义模型

过滤 DataFrame

new_df = mortgage_df.loc[:, 
          mortgage_df.columns!="house"]
coxph.fit(df=new_df,
          duration_col="duration",
          event_col="paid_off")

使用 formula 参数

coxph.fit(df=mortgage_df,
          duration_col="duration",
          event_col="paid_off",
          formula="principal + interest 
          + property_tax + credit_score")
  • 更方便、更清晰,但不适用于大量协变量。
Python 中的生存分析

解释系数

print(coxph.summary)
<lifelines.CoxPHFitter: fitted with 1808 observations, 340 censored>
                        coef  exp(coef)  se(coef)      z       p
covariate house        -0.38       0.68      0.19. -1.98    0.05
          principal    -0.06       0.94      0.02  -2.61    0.01
          interest      0.31       1.37      0.31   1.02    0.31
          property_tax -0.15       0.86      0.21  -0.71    0.48
          credit_score -0.43       0.65      0.38  -1.14.   0.26
  • 风险比:$e^{coef}$
    • interest 从其中位数增加 1 个单位 -> 风险按 $e^{0.31}=1.37$ 变化,即相较基线风险增加 37%。
Python 中的生存分析

Passons à la pratique !

Python 中的生存分析

Preparing Video For Download...