竞争风险与累积发生函数 Competing Risks, Cumulative Incidence, and Fine-Gray Model (CIF / Gray / Fine-Gray)
在目标事件可能被另一事件阻止时估计累积发生函数,用 Gray 检验比较 CIF,并可用 Fine-Gray 模型估计亚分布风险比。
统计原理
竞争事件一旦发生,会使目标事件以后不可能被观察。例如分析疾病进展时,“未进展先死亡”会阻止后续进展。原因 的累积发生函数(CIF)是绝对概率:
其中 是任何事件尚未发生的概率, 是原因 的原因别累积风险。竞争事件既不计入目标事件,也不能像普通失访一样简单忽略;把它当普通删失后用 会假想这些人仍可发生目标事件,通常高估目标事件的绝对累积概率。
Gray 检验比较两组目标事件 CIF 的整条曲线。Fine-Gray 模型则对亚分布风险施加比例假设:
是亚分布风险比(sHR)。本页方向为 Drug A / Placebo;sHR<1 表示在模型假设下 Drug A 的目标事件 CIF 倾向较低,但 sHR 不是原因别 HR,也不是某时点 CIF 的简单比值。
发生竞争事件后不再可能观察目标事件,因此不能把它简单当作普通删失。
什么时候用
时间-事件终点存在会阻止目标事件的另一种事件,且需要报告目标事件的绝对累计概率或比较组间 CIF 时使用。常见场景包括移植后复发(无复发死亡为竞争事件)、心血管特定原因死亡(其他原因死亡为竞争事件)。
SAP 里长这样:
The cumulative incidence function for progression, treating death without prior progression as a competing event, will be estimated by treatment group. Groups will be compared using Gray’s test. A Fine-Gray proportional subdistribution hazards model will estimate the subdistribution hazard ratio (Drug A / placebo).
看到 competing risk / cumulative incidence / Gray / subdistribution hazard / Fine-Gray,应先确认每个状态代码、目标事件以及 estimand 对竞争事件的处理策略。
适用条件速查卡
| 项 | 条件 |
|---|---|
| 数据结构 | 每名受试者对目标参数一条最早事件/竞争事件/删失记录 |
| 状态编码 | 本页 STATUS=0 删失、1 目标事件、2 竞争事件 |
| CIF 前提 | 删失在给定信息下非信息性;目标/竞争事件分类互斥且时间定义一致 |
| Gray 检验 | 比较目标事件 CIF;不直接提供效应量 |
| Fine-Gray | 亚分布风险满足比例假设;sHR 方向为 Drug A / Placebo |
| 原因别 Cox | 回答当前无任何事件者的瞬时原因别风险,和 Fine-Gray 的 estimand 不同 |
| 输入范围 | 目标 PARAMCD、分析集、ANL01FL='Y' 已限定且一人一条 |
核心 SAS 代码
proc lifetest data=adtte_ttp outcif=cif_estimates
timelist=180 365 reduceout plots=cif(test);
time aval*status(0) / eventcode=1;
strata trt01p;
run;
proc phreg data=adtte_ttp plots(overlay=stratum)=cif;
class trt01p(ref='Placebo') / param=ref;
model aval*status(0)=trt01p / eventcode=1;
hazardratio trt01p / diff=ref cl=wald;
run;
status(0)只把 0 指定为删失;eventcode=1指定 1 为目标事件,其他非零值自动作为竞争事件。OUTCIF=保存目标事件 CIF 与置信限;timelist=应使用 SAP 预设时间点和正式时间换算规则。plots=cif(test)展示 CIF 并执行 Gray 同质性检验。- PHREG 中同一
eventcode=1拟合 Fine-Gray 亚分布风险模型。参考组和hazardratio标签共同确定 sHR=Drug A / Placebo。
变量解释表
| 变量 | 含义 | 典型来源 |
|---|---|---|
| USUBJID | 受试者唯一标识 | ADTTE.USUBJID |
| TRT01P | 计划治疗组 | ADSL.TRT01P → ADTTE.TRT01P |
| PARAMCD | 目标参数;示例为 TTP | ADTTE.PARAMCD |
| AVAL | 从规定起点到首次目标/竞争事件或删失的时间 | ADTTE.AVAL |
| STATUS | 0=删失, 1=进展, 2=无进展死亡 | 事件类型派生 |
| ANL01FL | 主分析记录标记 | ADTTE.ANL01FL |
| EVNTDESC | 状态原因的可读说明,建议保留用于 QC | ADTTE.EVNTDESC |
输出对照
| SAS 输出 | 关键值 | Shell 行 |
|---|---|---|
| Summary of Failure Outcomes | 目标事件、竞争事件、删失人数 | 每组 n / events / competing events |
CIF_ESTIMATES | 指定时点 CIF、Lower/Upper CL | Cumulative incidence at Day 180/365, % (95% CI) |
| Gray’s Test | Chi-Square、DF、p 值 | Gray test p-value |
FG_HAZARD_RATIO | HazardRatio、HRLowerCL、HRUpperCL | Subdistribution HR (Drug A / Placebo), 95% CI |
FG_PARAMETERS | 系数、标准误、Wald p 值 | Fine-Gray model p-value;须与 sHR 同一模型 |
CIF 应按百分比展示,sHR 是相对模型效应;二者不能互相替代。若 SAP 指定 Gray 检验为主检验而 Fine-Gray 仅为支持性分析,shell 和结论必须保持该层级。
示例数据与程序
- example.csv — 40 例原创模拟记录,包含进展、无进展死亡和删失三种状态
- example.sas — CIF、指定时点估计、Gray 检验和 Fine-Gray sHR 的完整程序
常见坑
竞争事件不是普通删失
- 用 1-KM 当 CIF:在竞争风险存在时通常高估目标事件绝对概率,应使用 Aalen-Johansen/CIF 估计。
- 状态代码写错:
eventcode=1必须和 ADTTE 规范一致;目标与竞争事件对换会完全改变问题。 - 混淆 sHR 与原因别 HR:二者风险集、估计目标和临床解释不同,数值不应期望相等。
- 只看 Gray p 值:p 值不说明差异大小;应同时给每组 CIF 和预设时点的绝对差异描述。
- 忽略亚分布 PH 假设:单一 sHR 仍是比例模型参数;曲线效应随时间变化时应按 SAP 做诊断或替代描述。
- 把治疗后干预误当竞争事件:哪些事件阻止目标事件由 estimand 和 SAP 决定,不能仅凭数据方便性分类。
相关方法
- Cox 比例风险回归 用半参数比例风险模型估计治疗组风险比及置信区间,并可按随机分层因素分层或校正协变量。
- Kaplan-Meier 生存分析 估计时间-事件终点的生存曲线、中位时间和指定时点生存率,并用 log-rank 检验比较组间曲线。
- 限制性平均生存时间 在预先指定限制时间内计算 KM 生存曲线下面积,用可解释的时间差比较治疗组且不依赖比例风险假设。