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

Cox模型选择:如何调整代码测试所有变量组合筛选最优模型

基于AIC筛选最优Cox模型变量组合的实现方案

你需要遍历所有可能的协变量组合,拟合Cox模型并比较AIC值来选择最优模型。注意:followup是生存时间列,CRD是事件结局列,这两个不能作为协变量放入模型自变量,需单独区分。

修改后的代码实现

import itertools
from lifelines import CoxPHFitter

# 区分协变量与结局相关列
covariates = ['v1', 'v3', 'v4', 'v5']
duration_col = "followup"
event_col = "CRD"

# 存储所有模型的变量组合与对应AIC值
model_results = []

# 遍历1个到全部协变量的所有组合
for k in range(1, len(covariates)+1):
    for combo in itertools.combinations(covariates, k):
        # 构造模型所需的列:协变量组合 + 结局列
        cols = list(combo) + [duration_col, event_col]
        # 拟合Cox模型
        cph = CoxPHFitter()
        cph.fit(df[cols], duration_col=duration_col, event_col=event_col, step_size=0.5)
        # 记录结果
        model_results.append({
            'variables': combo,
            'partial_AIC': cph.AIC_partial_
        })

# 按AIC值升序排序(AIC越小拟合效果越好)
model_results.sort(key=lambda x: x['partial_AIC'])

# 输出最优模型信息
print("最优模型:")
print(f"变量组合: {model_results[0]['variables']}")
print(f"部分AIC值: {model_results[0]['partial_AIC']:.5f}")

# 可选:输出所有模型的排序结果
print("\n所有模型AIC排序:")
for idx, res in enumerate(model_results, 1):
    print(f"排名{idx}: 变量={res['variables']}, 部分AIC={res['partial_AIC']:.5f}")

代码说明

  • 用itertools.combinations生成所有非空协变量子集,覆盖从单个变量到全变量的所有可能组合。
  • 每个组合对应拟合一个Cox模型,提取部分AIC(cph.AIC_partial_)作为评估指标。
  • 按AIC升序排序后,AIC最小的模型即为拟合效果最优的模型。

内容的提问来源于stack exchange,提问作者Mischa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 21:45:13