fit_prior <- function(mu_sd, tau_scale, fam) {
tp <- switch(fam,
HN = function(t) dhalfnormal(t, scale = tau_scale),
HC = function(t) dhalfcauchy(t, scale = tau_scale),
U = function(t) dunif(t, 0, tau_scale))
bayesmeta(y = ma$yi, sigma = ma$sei, labels = ma$study,
mu.prior = c(mean = 0, sd = mu_sd), tau.prior = tp)
}
grid <- tribble(
~prior, ~mu_sd, ~tau_scale, ~fam,
"Base: mu~N(0,1.5), tau~HN(0.5)", 1.5, 0.50, "HN",
"Tighter tau ~ HN(0.25)", 1.5, 0.25, "HN",
"Wider tau ~ HN(1.0)", 1.5, 1.00, "HN",
"tau ~ half-Cauchy(0.5)", 1.5, 0.50, "HC",
"tau ~ Uniform(0,2)", 1.5, 2.00, "U",
"Wider mu ~ N(0,10)", 10, 0.50, "HN",
"Tighter mu ~ N(0,1)", 1.0, 0.50, "HN")
pmap_dfr(list(grid$prior, grid$mu_sd, grid$tau_scale, grid$fam),
function(p, m, ts, f) {
bm <- fit_prior(m, ts, f)
tibble(Prior = p,
OR = exp(bm$summary["median", "mu"]),
lo = exp(bm$summary["95% lower", "mu"]),
hi = exp(bm$summary["95% upper", "mu"]),
tau = bm$summary["median", "tau"])
}) |>
mutate(across(where(is.numeric), ~round(.x, 2))) |>
knitr::kable()