Zenodo
Analysis code and extraction table for a systematic review and meta-analysis of Plasmodium falciparum pfhrp2 and pfhrp3 gene deletions in Central Africa
Par Jokebed BYLL Kouamba et Folikoue Kossi Yves Nicanor Foli.
Contenu en anglais
Résumé
This deposit contains the complete extraction table and the analysis code for the systematic review and meta-analysis Prevalence of Plasmodium falciparum pfhrp2 and pfhrp3 gene deletions in Central Africa: a systematic review and meta-analysis of molecularly confirmed surveys. Everything reported in the manuscript is produced by this code. Running python3 run_analysis.py in a clean copy reproduces every float in the shipped results.json to within 1e-6 relative, and python3 figures.py regenerates all four figures from results.json alone. Contents data.py — the extraction table: twelve primary strata and two pre-2010 strata, every count read off the full text of its source report, with source URLs and the three extraction errors found and corrected during verification recorded in NOTES. metaglmm.py — the statistical core: binomial-normal GLMM with a logit link fitted by maximum likelihood with adaptive Gauss-Hermite quadrature, multi-start optimisation, profile-likelihood intervals, DerSimonian-Laird and Freeman-Tukey sensitivity models, Clopper-Pearson exact intervals, GLMM meta-regression with likelihood-ratio tests, Egger's and Peters' tests, and quadrature_comparison(), which refits the model without adaptivity so that the quadrature failure described in the manuscript can be reproduced rather than taken on trust. run_analysis.py — runs every analysis reported and writes results.json. figures.py — generates Figures 1-4 from results.json alone. results.json — the output. README.txt — how to run it, and a note on the quadrature problem. A note on the quadrature. Fitting this model with non-adaptive Gauss-Hermite quadrature mis-evaluates the likelihood when a stratum is large: at the fitted parameters the integrand for the 2,752-isolate stratum has a scale of 0.084 on the logit scale while the central fixed nodes are spaced 0.91 apart, so the peak falls between nodes. At 31 nodes the optimiser then lands 0.58 log-likelihood units below the true optimum, with tau understated (1.28 against 1.63) and a standard error for the intercept 4.4 times too small — while the point estimate barely moves, which is what makes the failure hard to notice. The released code reproduces both fits. Requirements. Python 3 with numpy, scipy, matplotlib and Pillow. Related records. The methods as applied are registered retrospectively on OSF Registries at osf.io/nwgx2. That record is explicitly not a preregistration; the review was not registered prospectively, and no written protocol predates data extraction.



