基于lifelines的删失对象未来生存概率预测与新样本计算问询
生存分析(lifelines包)问题解答
本人正研究生存分析的应用可能性与局限性,重点关注Python的lifelines包。已使用rossi数据集拟合Cox比例风险模型,代码如下:
import pandas as pd from lifelines.datasets import load_rossi from lifelines import CoxPHFitter rossi = load_rossi() cph1 = CoxPHFitter() cph1.fit(rossi, duration_col='week', event_col='arrest') cph1.plot_covariate_groups('race', [0,1])
问题1:预测删失对象的未来生存概率(延伸至历史周期外)
你运行代码后得到的49×318 DataFrame,含义如下:
- 行:模型生成的时间点(包含原始数据中的观测时间,以及模型外推的时间点)
- 列:每个删失样本的索引
- 单元格值:对应删失样本在该时间点的条件生存概率——即已知该样本已存活到
conditional_after指定的观测终止时间后,在当前时间点仍存活的概率
要获取60周这类超出原始数据周期的生存概率,可手动指定预测时间点,代码如下:
import numpy as np # 指定预测时间范围,包含60周 prediction_times = np.arange(0, 61) # 生成条件生存函数 survival_functions = cph1.predict_survival_function( censored_subjects, conditional_after=censored_subjects_last_obs, times=prediction_times ) # 提取所有删失样本在60周时的生存概率 week_60_survival_probs = survival_functions.loc[60]
问题2:基于已拟合模型计算新样本的生存函数
可以直接用已训练好的Cox模型计算新样本的生存函数,只需构造包含与训练数据一致特征列的DataFrame即可,示例代码:
# 构造新样本,特征列需和训练时完全匹配 new_samples = pd.DataFrame({ 'age': [25, 32], 'race': [0, 1], 'wexp': [1, 0], 'mar': [0, 1], 'paro': [1, 1], 'prio': [3, 6] }) # 预测新样本的生存函数 new_sample_survival = cph1.predict_survival_function(new_samples) # 可视化生存函数 new_sample_survival.plot(title="New Samples Survival Function")
返回的DataFrame中,行代表时间点,列对应每个新样本,单元格值为该样本在对应时间点的生存概率。
内容的提问来源于stack exchange,提问作者mad_scientist
相关产品推荐
相关产品推荐

