Treatment-covariate interactions

  • A two-stage IPD meta-analysis for summarising treatment-covariate interactions is a straightforward extension of the two-stage approach for synthesising a treatment effect. 

  • In the first stage, the treatment-covariate interactions are estimated using the IPD in each trial separately; in the second stage, these interaction estimates are pooled using a chosen meta-analysis model. This can be implemented in Stata using ipdmetan.

  • By only pooling interaction estimates derived from within-trial information (i.e. based at the participant-level), this approach automatically avoids trial-level confounding and aggregation bias that may occur in meta-regression models or in one-stage models that do not separate out within-trial and across-trial information.

  • In Figure 7.2 of our book, an example is given for a continuous outcome, and a treatment-sex interaction is of interest. The Stata code to produce this forest plot of interactions and undertake the two-stage approach is as follows:

ipdmetan, study(trialid) interaction keepall re(reml) : mixed sbpl treat##sex sbpi

Here, the 'interaction' option ensures that the interaction estimates are pooled in the second stage.

  • A one-stage approach of equation (7.11) could also be used, which centers the sex covariate by the proportion male in each trial, and include the proportion male as a separate covariate, in order to remove aggregation bias. It also allows a random interaction effect. The code is as follows:

gen ws_interaction = treat*sex_cent

gen acr_interaction = sex_mean*treat

mixed sbpl trial* sbpi_trial* sex_trial* treat ws_interaction , nocons ///

    || trialid: treat ws_interaction, nocons reml residuals(ind, by(trialid))

where trial*, sbpi_trial* and sex_trial* is just shorthand for specifying 10 terms for each parameter (one for each of ten trials in the analysis), so that we stratify by trial the intercept, the prognostic effect of baseline SBP, and the prognostic effect of sex. the residuals() option also ensures 10 residual variances (one for each trial). Rather than modelling the across-trial relationship, we could alternatively stratify the reference treatment effect by trial (to mimic the two-stage approach more exactly):

mixed sbpl trial* sbpi_trial* sex_trial* treat_trial* ws_interaction, nocons ///

    || trialid: treat ws_interaction, nocons reml residuals(ind, by(trialid))

In R, the equivalent code would be something like:

ipdresults<-lme(sbpl~ 0 + trialdummy.f + sbpi*trialdummy.f + sex*trialdummy.f + treat*trialdummy.f + ws.interaction , random=list(trialdummy=~0+ws.interaction), weights=varIdent(form=~1|trialdummy), 
na.action = na.omit, method = "REML")