IPCW的SAS实现

IPCW

前面我们已经在这篇文章里介绍过IPCW的原理。当时有小伙伴在知识星球里提问,IPCW在sas中的具体实现。

问题

今天我们来大致讲一下它的SAScode,完整的代码已经上传进我的星球,感兴趣的同学可以自行下载查看。

数据结构

首先,我们需要准备count格式的生存数据,如下面这个dummy dataset:

dummy dataset

其中,xo_time标示crossover发生的时间,即表示是否发生了crossover,tstart、tstop标明count格式的生存数据,显示各个时间点受试者at risk的情况。

step 1: 计算未删失(未发生crossover)的概率

这一步,根据协变量的不同,采用的模型也不行同。对于包含时依协变量的数据,我们可以分别构建包含基线协变量以及包含时依协变量的两个模型,来计算权重。

采用logistic可以使用以下code:

proc genmod data=dummy descending order=data;
  class crossover id;
  model crossover= baseline_covariates time_dependent_covariates / d=bin link=logit;
  repeated subject=id;
  output out=out prob=t;
run;

我们在星球里给的代码采用的是cox来计算概率,如下:

proc phreg data=weight_est outest=survmod covs(aggregate) covm; * covs option and id statement adjust for repeated measures;
  by &trt;
  class &bl_cl &tv_cl;
  model (&tstart,&tend)*xo_cnsr(0)= &bl_ct &bl_cl &tv_ct &tv_cl /rl;
  id &subjid;
  output out= probs_TV survival = w_TV;
run;

step2: 利用IPCW加权

需要注意的是,在加权之前,我们可以进行权重的截断来进行stablize。

proc phreg data=surv_ph outest=survmod covs(aggregate) covm; * covs option and id statement adjust for repeated measures;
  title 'Final Model using weights from Cox PH Model';
  class &bl_cl &tv_cl &trt(ref=first);
  model (&tstart,&tend)*dth_event(0)= &trt &bl_ct &bl_cl &tv_cl &tv_ct /rl;
  id &subjid;
  weight sw_t/norm;
run;

Did you find this page helpful? Consider sharing it 🙌

Zhen Lu
Zhen Lu
Biostatistician, Clinical Epidemiologist

Walk with the master