基于Lifelines包Kaplan-Meier法提取120个月精确癌症特异性生存率
Lifelines包提取120个月随访节点Kaplan-Meier癌症特异性生存率方法
首先明确核心逻辑:Kaplan-Meier估计的生存函数是右连续阶梯函数,仅在发生终点事件/删失的时间点发生数值跳变,两个相邻观测时间点之间的生存概率完全恒定,不需要插值计算。kmf.survival_function_返回的是标准pandas DataFrame结构:行索引为随访时间(单位和你输入的生存时间单位一致,此处为月),默认列名为KM_estimate,存储对应时间点的癌症特异性生存率(CSS)。
具体提取操作
- 场景1:拟合KM模型时已经在
timeline参数中指定了120个月节点,或原始观测时间中刚好存在120个月的记录
直接通过索引取值即可:css_120 = kmf.survival_function_.loc[120, "KM_estimate"] - 场景2:返回的时间点序列中没有精确120个月的记录(比如当前返回的时间点为0、4、6…128个月,120落在两个相邻观测点之间)
筛选所有随访时间≤120个月的记录,取其中最大时间点对应的生存率,就是120个月节点的准确CSS值:# 筛选所有不超过120个月的随访记录 records_before_120 = kmf.survival_function_[kmf.survival_function_.index <= 120] # 取最后一条记录(即离120个月最近的前一个节点)的CSS值 css_120 = records_before_120["KM_estimate"].iloc[-1]
注意事项
- 不要对KM生存函数做线性插值计算中间时间点的生存率,这种操作不符合Kaplan-Meier方法的统计学原理,得到的结果是错误的。
- 如果后续需要固定提取多个时间点(比如12、36、60、120个月)的生存率,可以在拟合模型时直接通过
timeline参数指定需要输出的时间节点,拟合完成后survival_function_会直接返回这些节点的对应值,示例代码如下:# 拟合时指定需要输出的时间节点 kmf.fit( durations=df['followup_month'], event_observed=df['css_event'], timeline=[12, 36, 60, 120] ) # 直接批量提取对应节点CSS target_css = kmf.survival_function_["KM_estimate"]
内容的提问来源于stack exchange,提问作者Mischa
相关产品推荐
相关产品推荐

