The hardware and bandwidth for this mirror is donated by METANET, the Webhosting and Full Service-Cloud Provider.
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[@]metanet.ch.
MAIVE (Meta-Analysis Instrumental Variable Estimator) addresses a fundamental problem in meta-analysis of observational research: spurious precision. Traditional meta-analysis assigns more weight to studies with lower standard errors, assuming higher precision. However, in observational research, precision must be estimated and is vulnerable to manipulation through practices like p-hacking to achieve statistical significance.
This manipulation can invalidate:
MAIVE introduces an instrumental variable approach to limit bias caused by spurious precision in meta-analysis.
In observational research, researchers can inadvertently or deliberately manipulate their analyses to achieve statistically significant results. This includes:
These practices create spuriously precise estimates that appear more reliable than they actually are. Traditional meta-analysis methods that weight by inverse variance will overweight these manipulated studies, leading to biased conclusions.
MAIVE uses instrumental variables to correct for spurious precision:
This approach provides:
The maive() function expects a data frame with the
following columns:
| Column | Label | Description |
|---|---|---|
| 1 | bs | Primary estimates (effect sizes) |
| 2 | sebs | Standard errors (must be > 0) |
| 3 | Ns | Sample sizes (must be > 0) |
| 4 | study_id | Study identification (optional, for clustering/fixed effects) |
Let’s create a simple example dataset:
# Simulated meta-analysis data
set.seed(123)
n_studies <- 50
data <- data.frame(
bs = rnorm(n_studies, mean = 0.3, sd = 0.2),
sebs = runif(n_studies, min = 0.05, max = 0.3),
Ns = sample(100:1000, n_studies, replace = TRUE),
study_id = rep(1:10, each = 5)
)
head(data)
#> bs sebs Ns study_id
#> 1 0.1879049 0.1999972 342 1
#> 2 0.2539645 0.1332059 961 1
#> 3 0.6117417 0.1721533 946 1
#> 4 0.3141017 0.2886185 891 1
#> 5 0.3258575 0.1707256 212 1
#> 6 0.6430130 0.2725876 718 2The default MAIVE estimator uses PET-PEESE with instrumented standard errors, no weights, cluster-robust standard errors, and wild bootstrap:
# Run MAIVE with defaults
result <- maive(
dat = data,
method = 3, # PET-PEESE (default)
weight = 0, # No weights (default)
instrument = 1, # Instrument SEs (default)
studylevel = 2, # Cluster-robust (default)
SE = 3, # Wild bootstrap (default)
AR = 1 # Anderson-Rubin CI (default)
)
# View key results
cat("MAIVE Estimate:", round(result$Estimate, 3), "\n")
cat("MAIVE SE:", round(result$SE, 3), "\n")
cat("Standard Estimate:", round(result$StdEstimate, 3), "\n")
cat("Hausman Test:", round(result$Hausman, 3), "\n")
cat("First-stage F-test:", round(result$`F-test`, 3), "\n")The maive() function returns a list with the following
key elements:
Estimate: MAIVE point estimate (corrected for spurious
precision)SE: MAIVE standard errorStdEstimate: Standard (non-IV) estimate for
comparisonHausman: Hausman-type test comparing IV vs OLS
estimates (high value suggests spurious precision)F-test: First-stage F-test of instrument strengthAR_CI: Anderson-Rubin confidence interval (robust to
weak instruments)pbias_pval: p-value for publication bias testSE_instrumented: Vector of instrumented standard
errorsMAIVE supports multiple meta-regression methods:
PET-PEESE uses PET if the PET estimate is not significantly different from zero, otherwise uses PEESE:
Unweighted regression, recommended when spurious precision is a concern:
Traditional meta-analysis weighting:
Control for study-level correlation when you have multiple estimates per study:
# No study-level adjustment
result_none <- maive(data, method = 3, weight = 0, instrument = 1,
studylevel = 0, SE = 0, AR = 1)
# Study fixed effects (demeaned)
result_fe <- maive(data, method = 3, weight = 0, instrument = 1,
studylevel = 1, SE = 1, AR = 0) # AR not available with FE
# Cluster-robust standard errors
result_cluster <- maive(data, method = 3, weight = 0, instrument = 1,
studylevel = 2, SE = 3, AR = 1)
# Both fixed effects and clustering
result_both <- maive(data, method = 3, weight = 0, instrument = 1,
studylevel = 3, SE = 3, AR = 0)# CR0 (Huber-White)
result_cr0 <- maive(data, method = 3, weight = 0, instrument = 1,
studylevel = 2, SE = 0, AR = 1)
# CR1 (Standard empirical correction)
result_cr1 <- maive(data, method = 3, weight = 0, instrument = 1,
studylevel = 2, SE = 1, AR = 1)
# CR2 (Bias-reduced estimator)
result_cr2 <- maive(data, method = 3, weight = 0, instrument = 1,
studylevel = 2, SE = 2, AR = 1)
# Wild bootstrap (recommended, default)
result_boot <- maive(data, method = 3, weight = 0, instrument = 1,
studylevel = 2, SE = 3, AR = 1)MAIVE allows two functional forms for the first-stage regression:
Regresses variance (sebs²) on constant and 1/Ns:
WAIVE (Weighted And Instrumented Variable Estimator) provides additional robustness by downweighting studies with spurious precision or extreme outliers:
result_waive <- waive(
dat = data,
method = 3,
instrument = 1,
studylevel = 2,
SE = 3,
AR = 1
)
cat("WAIVE Estimate:", round(result_waive$Estimate, 3), "\n")
cat("WAIVE SE:", round(result_waive$SE, 3), "\n")WAIVE is particularly useful when:
The Hausman test compares the MAIVE (IV) estimate with the standard (OLS) estimate:
Tests the strength of the instrument (inverse sample size):
Provides inference robust to weak instruments. Always check this CI when F-test is low.
Tests for publication bias using instrumented FAT:
Irsova, Z., Bom, P. R. D., Havranek, T., & Rachinger, H. (2024). Spurious Precision in Meta-Analysis of Observational Research. Available at: https://meta-analysis.cz/maive/
Keane, M., & Neal, T. (2023). Instrument strength in IV estimation and inference: A guide to theory and practice. Journal of Econometrics, 235(2), 1625-1653.
?maive for detailed parameter documentation?waive for the robust WAIVE estimatorThese 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.