1

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(&gt;|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?

  • @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)...? – user89547235 Apr 01 '22 at 18:43
  • 1
    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. – Noah Apr 01 '22 at 20:15

0 Answers0