1
$\begingroup$

A question on how to deal with inverse probability of treatment weighted-Cox regression analysis. Basically, I am evaluating how to use IPTW in the context of survival (and specifically, Cox regression) analysis in observational study, in which the evaluation of exposure/treatment can be biased by imbalance in several baseline characteristics/covariates between the two groups.

I've runned a simulated model based on the first answer to this question: https://stackoverflow.com/questions/50590909/cox-regression-with-inverse-propensity-treatment-weighting using simulated data from the MatchIt package. Assumptions to ease the discussion on this example:

  • The only covariates that are imbalanced between the two groups are those that I've inserted in the propensity score model, and
  • There is no interaction between the treatment and the covariates, and
  • There are no other relevant* confounder affecting the outcomes

*I recognize this can be disturbing, but just take this as meaning that "the contribution of other confounder on the risk of outcomes and/or the effect of treatment is negiglible).

Here is the reproducible code.

library(ipw)
library(survival)
library(MatchIt)

#Create simulated column for outcome and time to event
set.seed(14)
lalonde$status <- sample(c(0,1), length(lalonde$treat), replace=TRUE)
set.seed(15)
lalonde$time <- sample(1:365, length(lalonde$treat), replace=TRUE)

#Estimating propensity score
ps_model <- glm(treat~age+educ+race+married, family = binomial, data = lalonde)
summary(ps_model)

#Extract propensity score
pscore <- ps_model$fitted.values
lalonde$pscore <- predict(ps_model, type = "response")

#estimate weight for each patient
weights <- ipwpoint(exposure=treat, family="binomial", link="logit", numerator = ~1, 
                    denominator =~age+educ+race+married, data=lalonde, trunc=0.05)

cox1 <- coxph(Surv(time, status)~as.factor(treat), weights = weights$weights.trunc, data = lalonde)
summary(cox1)

And here is the result:

Call:
coxph(formula = Surv(time, status) ~ as.factor(treat), data = lalonde, 
    weights = weights$weights.trunc)

  n= 614, number of events= 309 

                    coef exp(coef) se(coef) robust se     z Pr(>|z|)
as.factor(treat)1 0.1914    1.2109   0.1342    0.1539 1.244    0.214

                  exp(coef) exp(-coef) lower .95 upper .95
as.factor(treat)1     1.211     0.8258    0.8956     1.637

Concordance= 0.521  (se = 0.016 )
Likelihood ratio test= 1.97  on 1 df,   p=0.2
Wald test            = 1.55  on 1 df,   p=0.2
Score (logrank) test = 2.04  on 1 df,   p=0.2,   Robust = 1.54  p=0.2

  (Note: the likelihood ratio and score tests assume independence of
     observations within a cluster, the Wald and robust score tests do not).

Now the question is: should I need to adjust the cox model for the variables that I used to generate the Propensity Score, or not?

$\endgroup$
2
  • $\begingroup$ @Noah Thanks for pointing out this question - however I am not sure the answer still apply for IPTW rather than propensity score matching (I am not matching patients, I am using PS to weight cases in the Cox)...? $\endgroup$ Commented Apr 1, 2022 at 18:43
  • 1
    $\begingroup$ It applies the same. Matching and weighting do the same thing: adjust the sample so that there is no association between the treatment and covariates. Matching uses weights of 0 and 1 while weighting uses continuous weights. $\endgroup$
    – Noah
    Commented Apr 1, 2022 at 20:15

0