Cox比例风险模型中plot_covariate_groups无法处理分层特征问题
问题原因
当你将Partner放入strata参数时,它被定义为分层变量,模型会为该变量的每个类别单独计算基线风险,不会将其作为协变量纳入模型的参数估计流程。而plot_covariate_groups()和plot_partial_effects_on_outcome()是针对模型中的协变量设计的,自然找不到这个已被归为分层的变量。
解决方法
方法1:手动分组拟合并对比生存曲线
直接按Partner的取值拆分数据集,分别拟合模型后绘制生存曲线对比:
import matplotlib.pyplot as plt from lifelines import CoxPHFitter # 按Partner分组 group_no_partner = data_strata[data_strata['Partner'] == 0] group_has_partner = data_strata[data_strata['Partner'] == 1] # 分别拟合模型(保留其他分层变量,去掉strata里的Partner) cph_no = CoxPHFitter() cph_no.fit(group_no_partner, "tenure", event_col="Churn", strata=strata[1:]) cph_has = CoxPHFitter() cph_has.fit(group_has_partner, "tenure", event_col="Churn", strata=strata[1:]) # 绘制对比曲线 ax = cph_no.plot_survival_function(label='无伴侣 (Partner=0)') cph_has.plot_survival_function(label='有伴侣 (Partner=1)', ax=ax) plt.legend() plt.title('不同Partner分组的生存曲线对比') plt.show()
方法2:复制变量,同时作为分层和协变量
如果需要同时保留分层逻辑并将Partner作为协变量可视化,可以创建变量副本:
# 复制Partner列作为协变量 data_strata['Partner_cov'] = data_strata['Partner'] # 原变量用于分层,副本作为协变量 cph.fit(data_strata, "tenure", event_col="Churn", strata=strata) # 针对副本变量绘图 cph.plot_covariate_groups('Partner_cov', values=[0, 1])
方法3:直接提取分层基线风险绘图
分层模型的基线风险会包含各层信息,可直接提取Partner相关层的数据绘图:
import matplotlib.pyplot as plt # 获取模型的基线风险数据,索引包含所有分层变量的组合 baseline_hazard = cph.baseline_hazard_ # 筛选出Partner为0和1的分层数据 partner_baseline = baseline_hazard[ baseline_hazard.index.get_level_values('Partner').isin([0, 1]) ] # 绘制基线风险曲线 partner_baseline.plot(figsize=(10,6)) plt.title('不同Partner分组的基线风险曲线') plt.ylabel('基线风险') plt.xlabel('tenure') plt.show()
内容的提问来源于stack exchange,提问作者stukituk
相关产品推荐
相关产品推荐

