The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.
metaGLMM fits likelihood-based random-effects
meta-analyses as generalized linear mixed-effects models using aggregate
study data. The same interface supports covariate adjustment,
non-Gaussian responses, and a small set of explicit random-effect
structures without requiring individual participant data.
The package is intended for reproducible analyses in base R. A fitted
model is an S3 object with familiar methods such as
summary(), coef(), vcov(),
confint(), predict(), and
plot().
Install the development version from GitHub with:
install.packages("remotes")
remotes::install_github("keisuke-hanada/metaGLMM", build_vignettes = TRUE)The package imports only the numerical tools needed for fitting. The examples and vignettes use base R data manipulation and graphics.
The response is an aggregate study estimate, vi is its
sampling variance, and ni is the relevant study size or
exposure. The formula defines the fixed-effects model matrix.
library(metaGLMM)
dat <- data.frame(
study = paste0("Study ", 1:6),
estimate = c(-0.30, -0.08, 0.05, 0.18, 0.27, 0.41),
moderator = c(0, 0, 1, 1, 0, 1),
vi = c(0.08, 0.11, 0.09, 0.13, 0.10, 0.12),
ni = c(90, 80, 110, 75, 95, 85)
)
fit <- metaGLMM(
estimate ~ moderator,
data = dat,
vi = dat$vi,
ni = dat$ni,
tau2 = NA,
family = gaussian(link = "identity"),
tau2_var = TRUE,
fast = TRUE
)
summary(fit)
coef(fit) # fixed effects only
vcov(fit) # fixed-effect covariance matrix
fit$tau2 # between-study variance
confint(fit, method = "wald")
predict(fit, newdata = data.frame(moderator = c(0, 1)),
interval = "prediction")The vignettes provide small, self-contained examples:
The built-in stats families are gaussian(),
binomial(), poisson(), and
Gamma(). Their link functions are passed in the usual R
style, for example binomial(link = "logit") or
Gamma(link = "log"). The fixed-effect coefficient names
always follow model.matrix(), including interactions,
factor contrasts, and formulas without an intercept.
For binary data, y is a proportion and ni
is the number of trials. For Poisson data, y is a rate and
ni is the exposure. For Gaussian and Gamma analyses,
provide the aggregate response, sampling variance, and the study size
used by the likelihood. Values at a binomial or Poisson boundary can be
represented with the legacy vi = Inf convention; finite
variances are needed when an automatic study-level display is
requested.
Use metaGLMM_family() when a response requires an
R-level conditional log-likelihood. The callback is vectorized in
eta and returns one log-likelihood contribution per
row.
nb_size <- 8
nb_rate_family <- metaGLMM_family(
name = "negative-binomial-rate",
link = "log",
loglik = function(y, eta, vi, ni) {
dnbinom(round(y * ni), size = nb_size,
mu = exp(eta) * ni, log = TRUE)
}
)
nb_dat <- data.frame(events = c(8, 30, 5, 55),
exposure = c(20, 35, 18, 42))
nb_dat$rate <- nb_dat$events / nb_dat$exposure
nb_dat$vi <- 1 / nb_dat$events + 1 / nb_size
qmc <- qnorm((seq_len(256) - 0.5) / 256)
custom_fit <- metaGLMM(rate ~ 1, nb_dat, vi = nb_dat$vi,
ni = nb_dat$exposure, tau2 = NA,
family = nb_rate_family, tau2_var = TRUE,
rstdnorm = qmc, fast = FALSE)Custom families use the QMC path (fast = FALSE) in the
initial release. Compiled quadrature for custom callbacks is
intentionally not part of this interface. The custom-family vignette
provides validation, initialization, and a larger negative-binomial
example.
The official confint() methods are "wald",
"profile", and "SBC" (case-insensitive). They
target fixed effects; tau2 and tau remain
available as fitted-object components and in summary().
predict() can return the link or response scale. A
confidence interval uses the fixed-effect covariance, while a prediction
interval additionally uses random_scale^2 * tau2.
Observation-level sampling variance is not added to the prediction
interval. For log and logit models, type = "exp" provides a
convenient multiplicative response scale.
forest(fit) and plot(fit, type = "forest")
use base graphics and show study estimates, their sampling intervals,
selected fixed-effect confidence intervals as diamonds, and a plug-in
prediction interval when available. The default uses SBC when supported
and Wald otherwise. Request several rows with
ci_methods = c("wald", "profile", "SBC"). Automatic study
extraction uses as_metafor_data() and remains deliberately
conservative. For complex arm-level data, pass estimate,
vi, and labels explicitly.
as_metafor_data(fit) returns an ordinary
data.frame with yi, vi, and
slab columns. It does not create a class from another
package or add a dependency on that package.
Please cite metaGLMM and the methodological work that
motivates the likelihood construction:
Hanada, K. and Sugimoto, T. (2026). Random-effects meta-analysis via generalized linear mixed models: A Bartlett-corrected approach for few studies. doi:10.1093/biomtc/ujag148.
@article{HanadaSugimoto2026,
author = {Hanada, Keisuke and Sugimoto, Tomoyuki},
title = {Random-effects meta-analysis via generalized linear mixed models:
A Bartlett-corrected approach for few studies},
year = {2026},
doi = {10.1093/biomtc/ujag148}
}These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.