# Bivariate Generalized Linear Mixed Meta-Analysis model with {brms}

Hi, I want to fit a Bivariate Generalized Linear Mixed Meta-Analysis model using a dichotomous outcome with brms.

The model is described in Appendix B in this article. In brief, it’s a binomial model with the logit link, in which the average control and treatment groups log odds are treated as fixed effects. Moreover, there are two study-specific parameters (control and treatment groups log odds, random-effects), and these are assumed to follow a bivariate normal distribution with covariance matrix “E”. This matrix includes the between-study variances for the baseline and treatment log odds + the correlation between the baseline and treatment risks in the logit scale. Unfortunately, the authors used SAS and didn’t provide the code.

After some search, I found the same model along with R code using {lme4} in another article. It’s the one depicted in “Model 6: the 'Van Houwelingen bivariate” here. The code they provided is:

``````lme4::glmer(cbind(event,n-event)~factor(treat)+(control+treat-1|study), data=thedata1, family=binomial(link="logit"))
``````

The brms translation seems very straightforward. My code (please let me know if it’s wrong):

``````brm(event | trials(n) ~ treat + (control + treat - 1| study),   data = thedata1, family = binomial(link = "logit"))
``````

In addition to fitting this model in brms, I want to generate a figure provided in the first article I mentioned above.

The authors provide multiple formulas in their Appendix B on how to estimate marginal and conditional effects from this model. I don’t know how to translate it to {brms}/{emmeans}/{marginaleffects} synthax.

In summary, I would like to know if my brms translation is correct and how to estimate multiple odds ratios and risk differences while conditioning on multiple baseline risks, so I can plot it (as shown in the figure above).

The full code for data + model fitting can be found below. Thanks!

``````# Ensures the package "pacman" is installed
if (!require("pacman")) install.packages("pacman")

lme4,
brms)

pacman::p_install_gh("stan-dev/cmdstanr")

# Data
thedata1 =
dplyr::tribble(
~study, ~treat, ~n, ~event, ~control,
1, 0, 377, 113, 1,
1, 1, 377, 128, 0,
2, 0, 40, 4, 1,
2, 1, 41, 6, 0,
3, 0, 100, 20, 1,
3, 1, 101, 22, 0,
4, 0, 1010, 201, 1,
4, 1, 1001, 241, 0
)

# ----

m1 =
lme4::glmer(
cbind(event, n - event) ~ factor(treat) + (control + treat - 1|study),
data=thedata1,

summary(m1)

b1 =
brms::brm(
formula = event | trials(n) ~ treat + (control + treat - 1| study),

data = thedata1,