Pointers for a novice: Bayesian random-effects meta-analysis & meta-regression

Dear Stan community,

ELI5 (Explain like I’m 5) your general approach / how you would go about setting up for and performing a random-effects Bayesian meta-analysis and meta-regression (starting with brms)?

Working with…

  • Aggregate data,
  • Standardized mean difference effect/variance estimate (e.g., Hedges’ g),
  • Weakly informative heterogeneity prior (sensitivity analysis with empirical/uninformative priors),
  • 2-3 small studies (n=10-40) and 3-5 medium studies (n=50-80).

To achieve…

  • A forest plot with the pooled estimate (95% credible/prediction intervals),
  • A meta-regression, 3 sets of models (i.e., patient characteristics, intervention characteristics, general study characteristics) with multiple (4-5) categorical and continuous potential effect modifiers in each model,
  • Any (non-frequentist) test for publication bias or small-study effects.

I am a keen but complete novice with Bayesian modelling/computation, but hopefully after some surveying here I can get a better idea on how to narrow down my personal learning objectives. Thank you in advance for your advice.

1 Like

Have a look at this book chapter: 14 Missing Data and Other Opportunities | Statistical Rethinking with brms, ggplot2, and the tidyverse


Hi @andrjohns, thank you very much for your response.

I understand the core theoretical formulas:
di ∼ Normal (θi, σi = sei)
θi ∼ Normal (μ, τ)
μ ∼ Normal (0, 1)
τ ∼ HalfCauchy (0, 1)

However, I don’t understand how the syntax/formula setup below relates to them.

Please can you help me understand how to interpret:
d | se(se) ~ 1 + (1 | study)

d | se(se) ~ 1 + (1 | study) + (1 | outcome)


  • “|” … According to “?brmsformula” the “|” is for grouping factors, is that what it means here?
  • “1 + (1 | study)” or “(1 | outcome)” … Are these the SDs? What is the difference between the 1 inside and the 1 outside the brackets?
  • “d | se(se)”

label ←
tibble(tau = c(.12, .3),
y = c(15, 10),
label = c(“sigma[‘outcome’]”, “sigma[‘study’]”))

Where do the values for tau “.12, .3” and y “15, 10” come from? I suspect it is from the output of b14.6, but none of the values seem to match.

d | se(se)

  • This indicates that d is the outcome (in your case, effect size), and that it is measured with standard error se

~ 1 + (1 | study)

  • This indicates that the outcome has a fixed intercept (1 outside of parentheses) and random intercept for study

Note the comment above the code:

# we'll want this to label the plot
label <-
  tibble(tau   = c(.12, .3),
         y     = c(15, 10),
         label = c("sigma['outcome']", "sigma['study']"))

Those values for tau and y are just used for positioning those labels on the plot


@andrjohns Thank you so much! I’m very excited to be learning this.

1 Like