# Testing for interaction between subgroups across multiple trials - meta-analytical test for interactions

I've got 3 trials, A, B, C.

These test drug X vs placebo, giving an HR for benefit of survival vs. placebo.

There is a dichotomous subgroup analysis, for clarity let's say patients > 50 years old, and patients < 50 years old.

Trial A quoted that patients > 50 years old benefit, but < 50 years old do not. It lists a HR and 95% CI for both groups. Trial B gives similar numbers.

Trial C unfortunately only gives the HR and 95% CI for the group > 50 years old.

Data in R looks as follows:

> head(df)
# A tibble: 3 × 10
name    hr lower95 upper95 below50_hr below50_lower95 below50_upper95 above50_hr above50_lower95 above50_upper95
<chr> <dbl>   <dbl>   <dbl>      <dbl>           <dbl>           <dbl>      <dbl>           <dbl>           <dbl>
1     a  0.35    0.15    0.80       0.49            0.15            1.61       0.18            0.04            0.81
2     b  0.55    0.24    1.23       0.89            0.24            3.32       0.31            0.10            0.94
3     c  0.61    0.37    1.00         NA              NA              NA       0.47            0.25            0.90


I am interested about meta-analysing to see if there is truly a different response for patients > 50 years old, versus < 50 years.

I can test for an interaction within trial A as follows:

> hr <- c(0.49,0.18)
> ci.lb <- c(0.15,0.04)
> ci.ub <- c(1.61,0.81)
> meta <- c(1,2)
> yi  <- log(hr)
> sei <- (log(ci.ub) - log(ci.lb)) / (2*1.96)
>
> res <- rma(yi ~ factor(meta), sei=sei, method="FE")
> res

Fixed-Effects with Moderators Model (k = 2)

Test for Residual Heterogeneity:
QE(df = 0) = 0.0000, p-val = 1.0000

Test of Moderators (coefficient(s) 2):
QM(df = 1) = 1.0497, p-val = 0.3056

Model Results:

estimate      se     zval    pval    ci.lb   ci.ub
intrcpt         -0.7133  0.6054  -1.1782  0.2387  -1.9000  0.4733
factor(meta)2   -1.0014  0.9775  -1.0245  0.3056  -2.9173  0.9144

---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’


Which shows there's no significant interaction between the two grouos (p=0.31).

However, I'm unsure how to pool the subgroups appropriately to get a meta-analytical test for interaction.

I am sure I have to just dump trial C as it has no data for the below 50 group; I COULD separate each arm of the trial and leave myself with 5 'trials' (3 > 50 years, 2 below), and then meta-regress against age, but I don't think this is a good idea.

EDIT: One way I've thought about doing it is just use the group (< or > 50 as a moderator) with all the HRs meta-analysed, as so:

> hr <- c(0.49,0.18,0.89,0.31)
> ci.lb <- c(0.15,0.04,0.24,0.10)
> ci.ub <- c(1.61,0.81,3.32,0.94)
> group <- c(1,2,1,2)
> yi  <- log(hr)
> sei <- (log(ci.ub) - log(ci.lb)) / (2*1.96)
> res <- rma(yi ~ factor(group), sei=sei, method="REML")
> res

Mixed-Effects Model (k = 4; tau^2 estimator: REML)

tau^2 (estimated amount of residual heterogeneity):     0 (SE = 0.4307)
tau (square root of estimated tau^2 value):             0
I^2 (residual heterogeneity / unaccounted variability): 0.00%
H^2 (unaccounted variability / sampling variability):   1.00
R^2 (amount of heterogeneity accounted for):            100.00%

Test for Residual Heterogeneity:
QE(df = 2) = 0.7594, p-val = 0.6841

Test of Moderators (coefficient(s) 2):
QM(df = 1) = 2.0546, p-val = 0.1517

Model Results:

estimate      se     zval    pval    ci.lb   ci.ub
intrcpt          -0.4451  0.4493  -0.9908  0.3218  -1.3257  0.4354
factor(group)2   -0.9200  0.6419  -1.4334  0.1517  -2.1780  0.3380

---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1


But the problem with this is it doesn't take into account which HRs are 'paired', as in we lose the 'within trial' pairing of numbers.

Is there a better way than my approach?