跳到主要内容

Cox 比例风险模型

一、直观理解:不建模“活多久的绝对分布”,而建模“相对谁更危险”​

Cox 比例风险模型(Cox PH)是生存分析中的回归主力。它不先指定基线生存的参数分布,而是对风险函数建模:

h(t∣X)=h0(t)exp⁡(βTX)h(t\mid X)=h_0(t)\exp(\beta^\mathsf{T}X)

h0(t)h_0(t) 是未指定的基线风险;协变量通过一个与时间无关的乘数 exp⁡(βTX)\exp(\beta^\mathsf{T}X) 放大或缩小风险。

eβj\mathrm{e}^{\beta_j} 称为风险比(Hazard Ratio, HR):

  • HR=1.3 表示该协变量增加一个单位时,瞬时风险约为原来的 1.3 倍(在 PH 与其它变量固定时)。

“比例风险”指任意两个个体的风险之比不随时间变化。这是关键可检验的假定。

二、适用场景与优缺点​

类型说明
适用场景右删失时间-事件数据;多个协变量同时影响生存;需要 HR 与调整后比较;临床试验与可靠性分析。
核心优点半参数,基线灵活;解释常用 HR;可扩展时依协变量、分层 Cox、惩罚 Cox。
局限与缺点PH 假定可能失败;HR 不是生存时间比;时间原点与共线性仍重要;高维需要正则。

若关心加速寿命(时间尺度伸缩)而非风险比,可考虑 AFT 模型。

三、核心原理​

1. 偏似然​

Cox 用偏似然估计 β\beta,在每个事件时间,用“谁在风险集中出事”的条件概率构造似然,从而消掉 h0(t)h_0(t)。存在结(同一时间多个事件)时用 Breslow/Efron 近似。

2. 生存函数联系​

S(t∣X)=S0(t)exp⁡(βTX)S(t\mid X)=S_0(t)^{\exp(\beta^\mathsf{T}X)}

估计 β\beta 后可再估累积基线风险 H^0(t)\hat H_0(t) 得到预测生存曲线。

3. 比例风险诊断​

  • log⁡(−log⁡S^(t))\log(-\log\hat S(t)) 对 log⁡t\log t 的分层曲线近似平行;
  • Schoenfeld 残差与时间有无趋势;
  • 时依系数检验。

若 PH 不成立:加时间交互、分层 Cox、划时间段,或改用其它模型。

四、关键决策​

1. 协变量选择​

结合专业与惩罚/信息准则;避免把中介变量与基线混为一谈。

2. 连续变量​

检查线性;必要时样条。标准化后 HR 按“每 +1 SD”解释更清楚。

3. 分层​

对明显不满足 PH 或不想建模的混杂因子(如中心)可分层,使基线各层不同但 β\beta 共享。

4. 预测​

报告某剖面下的生存曲线,而不仅是 HR 表。

五、MATLAB 示例​

rng(16);
n = 200;
age = 40 + 15*rand(n,1);
treat = rand(n,1) > 0.5;
% 用指数风险生成生存时间:h = 0.03 * exp(0.03*(age-40) - 0.5*treat)
rate = 0.03 * exp(0.03*(age-40) - 0.5*treat);
Ttrue = -log(rand(n,1)) ./ rate;
Cens = 40 + 20*rand(n,1); % 删失时间
T = min(Ttrue, Cens);
E = Ttrue <= Cens; % 1=事件

X = [age, treat];
[b, logl, H, stats] = coxphfit(X, T, "Censoring", ~E);
disp(array2table([b, stats.se, stats.p], ...
"VariableNames", {"beta","se","p"}, ...
"RowNames", {"age","treat"}));
fprintf("HR(age)=%.3f, HR(treat)=%.3f\n", exp(b(1)), exp(b(2)));

% 预测两条生存曲线:65岁, 处理 vs 对照
% 基线累积风险 H(:,2) 对应时间 H(:,1)
tgrid = H(:,1); H0 = H(:,2);
S0 = exp(-H0);
age0 = 65;
S_ctrl = S0 .^ exp(b(1)*age0 + b(2)*0);
S_tr = S0 .^ exp(b(1)*age0 + b(2)*1);
figure;
stairs(tgrid, S_ctrl, "LineWidth", 1.5); hold on;
stairs(tgrid, S_tr, "LineWidth", 1.5);
ylim([0 1]); grid on; legend("对照","处理");
xlabel("时间"); ylabel("S(t|x)"); title("Cox 预测生存曲线(age=65)");

六、如何解释结果​

  1. 队列与删失描述(可先 KM);
  2. 模型协变量与编码;
  3. HR、CI、p;
  4. PH 诊断结论;
  5. 关键剖面预测曲线;
  6. 敏感性(增删变量、分层)。

表述:“在调整年龄后,处理组风险比为 0.61(95% CI …),即瞬时风险约降低 39%。Schoenfeld 残差未显示明显时间趋势,PH 假定可接受。”

七、常见误区​

1. 把 HR 当成死亡时间缩短/延长的百分比​

HR 是风险比,不是中位生存时间比。

2. 不检查 PH​

全局 HR 在交叉风险下可能误导。

3. 把时间依赖混杂当普通协变量​

需正确的时依协变量构造,避免永生时间偏倚。

4. 忽略结与离散时间​

大量相同时间可考虑离散危害模型。

八、小结​

Cox 模型的核心是:

h(t∣X)=h0(t)eβTXh(t|X)=h_0(t)e^{\beta^\mathsf{T}X},用偏似然估计相对风险,而不参数化基线风险。

它是多因素生存分析的默认选择。写清 HR 含义、做 PH 诊断,并配合 KM 描述,才能形成完整且可信的生存建模叙事。

补充说明(建模写作)​

在数学建模论文中,除正文八段结构外,建议把下列材料放进附录或支撑材料,避免主文臃肿却又不失可复核性:

  1. 原始数据或模拟数据的生成设定:样本量、变量含义、单位、随机种子;
  2. 软件与函数清单:如 corr、coxphfit、centrality 及关键参数;
  3. 对照结果:与更简单基线(均值差、入度排序、不调整分析)并排;
  4. 失败诊断:不收敛、不连通、删失比例过高、重叠不足时的处理;
  5. 可复现脚本:保证评阅人按相同步骤得到同号结论。

这些补充不改变方法本身,但能显著提高结果的可信度与答辩时的解释效率。