Generalized Linear Mixed-Effects Meta-Analysis

František Bartoš

28th of April 2026

This vignette illustrates how to use the RoBMA R package (Bartoš & Maier, 2020) when the outcome is a count rather than an effect-size estimate. We walk through the BCG vaccine dataset from the metafor package (Viechtbauer, 2010), showing the brma.glmm() call alongside its metafor::rma.glmm() counterpart for log odds ratios. The interface mirrors metafor::rma.glmm(): counts (ai, bi, ci, di) are passed in directly, and no escalc() step is needed.

All brma.glmm() calls keep the default prior distributions; see the Prior Distributions vignette for the prior definitions and customization options. For the non-GLMM workflow showing more features (also applicable to GLMM models) see the Bayesian Meta-Analysis vignette.

brma.glmm() currently supports binomial outcomes (log odds ratio, measure = "OR") and Poisson outcomes (log incidence rate ratio, measure = "IRR").

Binomial Random-Effects Model

The BCG vaccine dataset from the metadat package contains 13 randomized trials on tuberculosis prevention. Treated and control event counts (tpos, tneg, cpos, cneg) are passed in directly.

data("dat.bcg", package = "metadat")
head(dat.bcg)
#>   trial               author year tpos  tneg cpos  cneg ablat     alloc
#> 1     1              Aronson 1948    4   119   11   128    44    random
#> 2     2     Ferguson & Simes 1949    6   300   29   274    55    random
#> 3     3      Rosenthal et al 1960    3   228   11   209    42    random
#> 4     4    Hart & Sutherland 1977   62 13536  248 12619    52    random
#> 5     5 Frimodt-Moller et al 1973   33  5036   47  5761    13 alternate
#> 6     6      Stein & Aronson 1953  180  1361  372  1079    44 alternate

metafor::rma.glmm() fits the random-effects logistic model. We use model = "UM.FS" to obtain the unconditional model with fixed study-specific intercepts, the formulation that corresponds to the binomial GLMM in brma.glmm() (Model 4 in Jackson et al. (2018)).

fit1_metafor <- metafor::rma.glmm(
  ai = tpos, bi = tneg, ci = cpos, di = cneg, measure = "OR", 
  model = "UM.FS", data = dat.bcg
)
fit1_metafor
#> 
#> Random-Effects Model (k = 13; tau^2 estimator: ML)
#> Model Type: Unconditional Model with Fixed Study Effects
#> 
#> tau^2 (estimated amount of total heterogeneity): 0.2949
#> tau (square root of estimated tau^2 value):      0.5430
#> I^2 (total heterogeneity / total variability):   91.02%
#> H^2 (total variability / sampling variability):  11.14
#> 
#> Tests for Heterogeneity:
#> Wld(df = 12) = 163.1649, p-val < .0001
#> LRT(df = 12) = 176.9544, p-val < .0001
#> 
#> Model Results:
#> 
#> estimate      se     zval    pval    ci.lb    ci.ub      
#>  -0.7450  0.1756  -4.2434  <.0001  -1.0891  -0.4009  *** 
#> 
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

The matching Bayesian fit takes the same count columns and measure = "OR".

fit1_brma <- brma.glmm(
  ai = tpos, bi = tneg, ci = cpos, di = cneg, measure = "OR",
  data = dat.bcg, seed = 1
)

summary() reports posterior means, credible intervals, and (suppressed here) MCMC convergence diagnostics for the pooled log odds ratio mu and the heterogeneity tau.

summary(fit1_brma, include_mcmc_diagnostics = FALSE)
#> 
#> Bayesian Random-Effects Model (k = 13)
#> 
#> Estimates
#>       Mean    SD  0.025    0.5  0.975
#> mu  -0.719 0.183 -1.089 -0.718 -0.353
#> tau  0.589 0.141  0.361  0.569  0.922

The posterior mean for mu tracks the maximum-likelihood estimate from the metafor package, with comparable heterogeneity tau. pooled_effect() returns the same summary backtransformed to the odds-ratio scale via transform = "EXP":

pooled_effect(fit1_brma, transform = "EXP")
#> 
#> Pooled Effect Size (odds ratio)
#>     Mean Median 0.025 0.975
#> mu 0.495  0.488 0.337 0.703
#> Effect estimates are summarized on the odds ratio scale using EXP on the log odds ratio measure.

Default Prior Distributions and the Auxiliary Parameter

The default prior distributions on mu and tau follow the unit-information set-up as elsewhere in the package, scaled by the known unit information standard deviation for the chosen measure (sqrt(4) for OR and IRR). Beyond mu and tau, GLMM models include estimate-specific nuisance parameters for the per-study baseline level. For binomial outcomes (measure = "OR"), logit(pi[i]) is the midpoint of the two arm logits before applying half of the study-specific log odds ratio to each arm. The default prior_baserate = Beta(1, 1) is placed independently on each pi[i]. For Poisson outcomes (measure = "IRR"), phi[i] is the midpoint of the two arm log incidence rates before applying half of the study-specific log incidence rate ratio to each arm. Because this midpoint log-rate is unbounded, there is no bounded flat default analogous to Beta(1, 1), so the default prior_lograte is a proper data-based unit-information normal used independently for each phi[i]. Thus the default nuisance-parameter prior distributions are exchangeable in the iid sense, but they are not hierarchical prior distributions with a learned common baseline-rate distribution. Both defaults can be overridden via the corresponding prior_* argument; see the Prior Distributions vignette. The Poisson model corresponds to Bagos & Nikolopoulos (2009) and uses event counts and exposure times (x1i, t1i, x2i, t2i) in place of the four-way count layout.

Other Inference Helpers

All inference helpers available for any other brma() fit work the same way for a brma.glmm() fit. Meta-regression via mods, multilevel structures via cluster, location-scale models via scale, posterior summaries, plots, predictions, residuals, influence, and LOO comparisons all carry over. See the Bayesian Meta-Analysis vignette for the full walkthrough and the Multilevel Meta-Analysis vignette for the multilevel extension; the only thing that changes here is the count-based input and the auxiliary baseline-rate prior.

References

Bagos, P. G., & Nikolopoulos, G. K. (2009). Mixed-effects poisson regression models for meta-analysis of follow-up studies with constant or varying durations. The International Journal of Biostatistics, 5(1), 21. https://doi.org/10.2202/1557-4679.1168
Bartoš, F., & Maier, M. (2020). RoBMA: An R package for robust Bayesian meta-analyses. https://CRAN.R-project.org/package=RoBMA
Jackson, D., Law, M., Stijnen, T., Viechtbauer, W., & White, I. R. (2018). A comparison of seven random-effects models for meta-analyses that estimate the summary odds ratio. Statistics in Medicine, 37(7), 1059–1085. https://doi.org/10.1002/sim.7588
Viechtbauer, W. (2010). Conducting meta-analyses in R with the metafor package. Journal of Statistical Software, 36(3), 1–48. https://doi.org/10.18637/jss.v036.i03