You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 04:50:23