如何在Python Lifelines包中计算指定参照组的风险比?
在Lifelines的CoxPHFitter中指定参照组的方法
Lifelines完全支持指定分类变量的参照组,和R中的逻辑类似,核心是将你的年龄分组变量处理为**分类变量(Categorical)**并明确指定参照水平,而不是用多个哑变量的形式输入模型。
你的当前代码中把每个年龄组都作为独立的哑变量输入,模型会自动选择一个参照组(通常是按变量名排序的最后一个),这就是为什么30_40组出现了HR值而非作为参照的原因。
解决步骤:
- 将分散的年龄哑变量合并为一个单一的分类变量
- 显式指定该分类变量的参照组为"30-40"
- 用新的分类变量拟合模型,同时纳入性别因素调整
修改后的代码示例:
import pandas as pd from lifelines import CoxPHFitter # 从现有哑变量生成统一的年龄分组变量 KM_DF["Age_Group"] = KM_DF.apply( lambda row: next((k.replace("_", "-") for k in ["30_40", "40_50", "50_60", "60_70", "70_80"] if row[k] == 1)), axis=1 ) # 将Age_Group设为分类变量,指定"30-40"为参照组 KM_DF["Age_Group"] = pd.Categorical( KM_DF["Age_Group"], categories=["30-40", "40-50", "50-60", "60-70", "70-80"], ordered=False ) # 准备模型输入数据 model_data = KM_DF[["Survival_Time", "Event", "Age_Group", "Male"]] # 拟合Cox模型 cph = CoxPHFitter() cph.fit(model_data, duration_col="Survival_Time", event_col="Event", show_progress=True) cph.print_summary()
说明:
- 代码中通过
pd.Categorical的categories参数指定了参照组顺序,第一个类别会被自动当作参照组,其HR值不会出现在结果中(或显示为1) - 其他年龄组的HR值都是相对于"30-40"组的风险比,同时模型已经纳入了
Male变量进行调整 - 这种方式比手动处理哑变量更直观,也更符合生存分析中分类变量的建模规范
内容的提问来源于stack exchange,提问作者Jacob Anderson
相关产品推荐
相关产品推荐

