Spurious Precision in Meta-Analysis of Observational
Research
by Zuzana Irsova, Pedro R. D. Bom, Tomas Havranek, and Heiko
Rachinger
Project Website: https://meta-analysis.cz/maive/
MAIVE 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 can be manipulated through p-hacking and other questionable research practices, invalidating:
MAIVE implements an instrumental variable approach to limit bias caused by spurious precision in meta-analysis.
install.packages("MAIVE")install.packages("devtools")
devtools::install_github("meta-analysis-es/maive")library(MAIVE)# Prepare your data
data <- data.frame(
bs = c(...), # Effect sizes
sebs = c(...), # Standard errors
Ns = c(...), # Sample sizes
study_id = c(...) # Study IDs (optional)
)
# Run MAIVE with defaults (PET-PEESE, instrumented SEs, no weights)
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 results
print(result$Estimate) # MAIVE estimate
print(result$SE) # Standard error
print(result$Hausman) # Hausman test
print(result$`F-test`) # First-stage F-testThe maive() function expects a data frame with:
| 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) |
waive() function)The function returns:
vignette("introduction")?maive and
?waive.github/DEVELOPMENT-WORKFLOW.md.github/CRAN-SUBMISSION.md# Create example data
set.seed(123)
data <- data.frame(
bs = rnorm(50, mean = 0.3, sd = 0.2),
sebs = runif(50, min = 0.05, max = 0.3),
Ns = sample(100:1000, 50, replace = TRUE),
study_id = rep(1:10, each = 5)
)
# Run MAIVE
result <- maive(data, method = 3, weight = 0, instrument = 1,
studylevel = 2, SE = 3, AR = 1)
# Compare with standard estimate
cat("MAIVE Estimate:", result$Estimate, "\n")
cat("Standard Estimate:", result$StdEstimate, "\n")
cat("Hausman Test:", result$Hausman, "\n")
# Use WAIVE for robust estimation with outlier downweighting
result_waive <- waive(data, method = 3, instrument = 1,
studylevel = 2, SE = 3, AR = 1)
cat("WAIVE Estimate:", result_waive$Estimate, "\n")If you use MAIVE in your research, please cite:
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. https://doi.org/10.1016/j.jeconom.2022.12.009
Tipton, E. (2015). Small sample adjustments for robust variance estimation with cluster-correlated data. Psychological Methods, 20(3), 375–389. https://doi.org/10.1037/met0000019
We welcome contributions! Please see our GitHub repository for:
MIT License - see LICENSE file for details.
Questions? Contact the maintainer or visit our project website.