Viechtbauer 2010 - LRT, Permutation Tests, BLUPs and Model Fit
Summary
Beyond Wald tests, metafor offers likelihood-ratio tests (requiring ML, not REML, when fixed effects differ), exact or Monte Carlo permutation tests that avoid normality assumptions, and BLUPs of study-specific true effects whose shrinkage toward grows with sampling variance and shrinks as grows. On BCG, latitude is significant by LRT (), permutation -values are larger than Wald ones, and small trials are visibly shrunk.
Overview
Section 3.5 closes with three inferential tools and a model-comparison tool. All use the BCG data of Viechtbauer 2010 - BCG Vaccine Worked Example.
Main Content
Fit statistics and likelihood ratio tests
fitstats() returns the (restricted) log-likelihood, deviance ( log-likelihood), AIC and BIC. The unrestricted likelihood is used unless REML is used. counts as an additional parameter in random/mixed models.
Likelihood ratio test of nested meta-regression models
anova(full, reduced)compares nested models fitted to the same data. The LRT statistic is under . Conditions: (i) same data; (ii) nested; (iii) under REML the LRT is not meaningful when the fixed effects differ, so fit both withmethod="ML". The reported proportion of heterogeneity accounted for is . For one could compare an ML/REML fit withmethod="FE"using but the null lies on the boundary of the parameter space (needs a mixture adjustment), and the -test “usually keeps better control of the Type I error rate anyway and therefore should be preferred” (Viechtbauer 2007b).
LRT for latitude
ML fits: full (latitude) df = 3, AIC 21.3713, BIC 23.0662, logLik -7.6857, , . Reduced (intercept only) df = 2, AIC 29.3302, BIC 30.4601, logLik -12.6651, , . , df = 1, ; variance accounted for 87.73%. Latitude alone accounts for about 88% of the (ML) heterogeneity; is rejected.
Permutation tests
Permutation tests (Follmann and Proschan 1999; Higgins and Thompson 2004)
Alternative to Wald and LRT tests that assume normal observed (and true) effects and asymptotics.
- No moderators: permute the signs of the observed effects; two-sided = twice the proportion of permuted statistics at least as extreme as observed.
- With moderators: permute the rows of the design matrix; coefficient = twice the proportion at least as extreme; omnibus = proportion more extreme than the observed .
permutest(res, exact=TRUE)fits every permutation once (feasible only for small : has 120 row permutations and 32 sign patterns; : 40,320 and 256; : 3,628,800 and 1,024);exact=FALSE(default) usesiterrandom permutations (1000 default), so results vary slightly between runs.
BCG permutation results
RE model, exact sign-permutation (8192 iterations, ): with permutation (Wald , ). Mixed model (latitude, year), 10,000 random permutations (an exact test needs more than fits): omnibus , (Wald 0.0022); latitude (Wald 0.0062); year . Conclusions unchanged but permutation -values are “more conservative”. Fig. 10: the permutation distribution of the latitude statistic has a fatter tail than the standard normal (overlaid in red; kernel density in blue). A simulation (random unrelated moderator, 10,000 replicates 5000 permutations = fits) gave empirical Type I error 0.05.
BLUPs
Best linear unbiased predictions of the true effects (
blup())For the random-effects model the BLUP of is
(For mixed models is replaced by the fitted value .) Since is estimated these are empirical BLUPs, unbiased and asymptotically BLUP (Kackar and Harville 1981). Bayesian reading: posterior means (and modes) of under vague priors on the coefficients, with fixed.
Shrinkage behaviour: if all BLUPs equal ; for very large they approach (especially for small ); in general they lie between and .
BCG BLUPs
With and : study 1: , so (SE 0.4099, prediction interval ). Study 4 (precise): (SE 0.1376). Study 13: (SE 0.2434). Fig. 11 shows observed values versus BLUPs, with the smaller studies shrunk most strongly toward . Reproduced in Python to four decimals; the exact sign-permutation count with held fixed is 12 of 8192, , matching the printed 0.0015.
import numpy as np
def blups(y, v, tau2, mu):
lam = tau2/(tau2+v); return lam*y + (1-lam)*mu
def sign_permutation_p(y, v, tau2, n=8192):
"""Exact sign-flip permutation p-value for H0: mu=0 (all 2^k sign patterns when k=13 -> 8192)."""
import itertools
w = 1/(v+tau2); obs = abs((w*y).sum())/np.sqrt(w.sum()); cnt = 0
for s in itertools.product([-1,1], repeat=len(y)):
cnt += abs((w*np.array(s)*y).sum())/np.sqrt(w.sum()) >= obs - 1e-12
return cnt/2**len(y)Connections
- BLUPs are the frequentist (empirical-Bayes) version of partial pooling; the full Bayesian version, which also integrates over , is in Roever 2020 - Prediction, Shrinkage and Credible Intervals and Hierarchical Models.
- Marketing: for a brand with several channel-level lift tests, shrunken (BLUP) channel effects are the sensible inputs for budget optimisation and priors for MMM channel coefficients; raw small-test estimates are overconfident outliers. Related: Partial Pooling as Multiple Comparisons Correction.