如何在Python lifelines的Cox模型中以年龄作为时间尺度?
在lifelines中实现以年龄为时间尺度的Cox回归
当然可以实现类似R中Surv(age, age + time, status)的功能,lifelines支持计数过程(counting process)格式的生存数据,对应R里的起始-终止时间型Surv对象。具体操作如下:
步骤1:整理数据格式
先在数据框中生成两列关键时间列:
start_age:受试者入组时的年龄(即原数据中的age列)stop_age:受试者发生事件或被截尾时的年龄,计算方式为age + timeToDiagnosis
步骤2:拟合以年龄为时间尺度的Cox模型
调用fit方法时,除了指定duration_col为终止年龄列,还需要通过start_duration_col参数指定起始年龄列,以此将年龄设为模型的时间尺度。
示例代码:
from lifelines import CoxPHFitter # 处理数据,生成起始/终止年龄列 inputDf['start_age'] = inputDf['age'] inputDf['stop_age'] = inputDf['age'] + inputDf['timeToDiagnosis'] cph = CoxPHFitter() cph.fit( inputDf, start_duration_col='start_age', duration_col='stop_age', event_col='caseCancer', formula="sex" # 无需将age作为协变量,它已是时间尺度的一部分 ) # 输出模型结果 cph.print_summary()
核心区别说明
- 把年龄作为时间尺度时,模型的时间轴是受试者的实际年龄,估计的是不同年龄阶段的风险率变化,和R中
Surv(age, age+time, status)的逻辑完全一致。 - 若仅将
age作为协变量加入公式,模型时间轴仍是研究时长(timeToDiagnosis),只是在调整年龄对风险的额外影响,二者的模型假设与结果解释有本质差异。
内容的提问来源于stack exchange,提问作者David Tang
相关产品推荐
相关产品推荐

