4
$\begingroup$

I am trying to fit a propensity score weighted Cox regression model in R. However, one of the treatment groups has zero events, so I also need to use an adjustment method (Firth's penalized likelihood).

I have been using the coxphf package just fine to run unweighted models, but there is not an argument that allows for the inclusion of weights in the same was that the regular coxph function allows. Any guidance would be much appreciated.

$\endgroup$
10
  • $\begingroup$ Have you tried coxph() with a ridge() term for penalizing the troublesome coefficient? $\endgroup$
    – EdM
    Commented Aug 18, 2022 at 15:31
  • $\begingroup$ I haven't! Would this still work if my only coefficient is the treatment variable? i.e. Surv(time, event) ~ ridge(treatment) $\endgroup$ Commented Aug 18, 2022 at 15:38
  • $\begingroup$ Yes. A ridge() term in coxph() gives a result on the first example used in the coxphf help page. Pay attention to how much penalization is invoked as that sets the bias in the coefficient estimate, too. If treatment has >2 levels you probably should set scale=FALSE in the ridge() term. I haven't thought through how to get profile likelihood confidence intervals with a ridge() term. I'd be reluctant to base the entire analysis on the propensity-score weighting. Combining that with direct covariate adjustment can give a double-robust estimate. $\endgroup$
    – EdM
    Commented Aug 18, 2022 at 16:56
  • 1
    $\begingroup$ I would bootstrap the whole thing and not worry about the profile likelihood confidence intervals, which will be incorrect with propensity score weights. The problem with covariate adjustment is that the estimate isn't doubly robust in this case because the estimand changes to a conditional rather than marginal one. If you can get the point estimate you need, bootstrap the whole process (including estimating the weights). $\endgroup$
    – Noah
    Commented Aug 18, 2022 at 18:27
  • 1
    $\begingroup$ @EdM Ah, I see, so you're saying the best OP can do with no events in one group is a lower bound for a confidence interval. In that case I have no additional advice. There isn't a way to incorporate the uncertainty of the weights into a profile likelihood without manual coding (and I don't even known what that would look like), but even if the weights were fixed, one would need a robust-type covariance matrix for valid inference. That is, even in the simple case of weighted logistic regression, likelihood-based inference is invalid. $\endgroup$
    – Noah
    Commented Aug 19, 2022 at 15:42

1 Answer 1

1
$\begingroup$

An advantage of the Firth penalization (of the determinant of the Fisher information matrix) provided by coxphf(), its ability to provide profile-likelihood confidence intervals, is lost with a weighted regression.

As Noah reminded us in comments, and as Therneau and Grambsch explain in Section 7.3, partial likelihood maximization with a weighted model treats each weight as the number of independent cases having the same covariate values and outcomes. As that's not the situation with propensity weights, profile-likelihood confidence intervals in your situation would be artificially small. Robust coefficient (co)variance estimates are required. You might find a way to incorporate a Firth penalty into the user-defined penalization allowed for in coxph() and deal with the matter that way.

If you want to use Firth penalization and can't find a way to incorporate that into a coxph() penalty, a work-around for a point estimate via coxphf() would be to expand your data set so that you have integer numbers of cases in proportion to their propensity weights. Noah's idea to bootstrap the entire process, including the propensity-weight estimates, could then provide a robust confidence interval (although I recommend that you explain how one limit could be infinite, given the lack of events under one treatment).

You also could consider ridge regression as an alternate penalization method, penalizing the sum of squares of the regression coefficients. A ridge() term in a coxph() model can do that directly, although you should think about how much penalty to impose. There might be some advantage in using the tools in the glmnet package for cross-validation of ridge models and penalty selection, although I'm not sure how well that would behave with no events under one treatment.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.