Uneven geographies and hierarchies of investability in the Global Environment Facility
Abstract
Anonymous replication package This package reproduces the manuscript’s six main figures, two appendix figures, the appendix bootstrap table, model tables, allocation-rule checks, country-clustered inference, and concentration-index analysis. It contains no manuscript files, author names, institutional paths, Git history, personal notes, or exploratory model branches. Quick start Use R 4.6 or a recent R 4.x release. From this directory: ```sh Rscript install_dependencies.R Rscript --vanilla run_all.R Rscript --vanilla tests/verify_outputs.R ``` The analysis does not require network access when the included cached inputs are present. A complete run took approximately two minutes on the validation machine; package installation and compilation of geospatial dependencies may take longer. Generated files are written to: - `data/processed/` — derived analytical data - `output/tables/` — result tables and figure data - `output/figures/` — manuscript and appendix figures - `output/figures/archive/` — diagnostic and component figures - `output/logs/` — model logs, R session details, and verification report Validated reference outputs are in `reference/`. The verifier compares all 46 reference CSV tables numerically (tolerance `1e-8`) and confirms the existence and pixel dimensions of nine manuscript/appendix figures. Workflow `run_all.R` executes 19 scripts in dependency order: 1. merge the co-financing and programming-strategy inputs; 2. construct population and income-category lookups; 3. calculate financing per capita and allocation-rule sensitivities; 4. build the income-group, source/type, focal-area, objective, alluvial, and bivariate-map figures; 5. estimate portfolio, link-function, multinomial, governance, interaction, Tobit, and country-clustered models; and 6. calculate population-weighted concentration indices with a 2,000-draw country bootstrap; and 7. build Figure 3’s three-source panel and its appendix table, with a 2,000-draw country bootstrap stratified by income group. The original script numbers are retained to preserve traceability to the working analysis. Gaps correspond to exploratory or superseded scripts that were deliberately excluded; see `RELEASE_NOTES.md`. Important definitions - “Private” means rows whose co-financing source is `Private Sector`. - Variables beginning `Public_` are an internal legacy label for all **non-private** sources, not only government sources. - Project co-financing uses CEO-stage values when any positive CEO-stage co-financing is present for the project, otherwise PIF-stage values. - Programme-objective columns use the programming-strategies export’s CEO-stage GEF project-financing allocation where positive, otherwise its PIF-stage GEF project-financing allocation. - Objective-code matching covers GEF-5 parent codes, GEF-6 `_P` sub-codes, and GEF-7 hyphenated sub-codes. Non-numbered enabling-activity codes and GEF-7 `IP SFM ...` programme labels are excluded. - GEF project financing is a project-level value repeated across source/type rows and is retained once per project; it is not summed across those rows. - Multi-country project amounts are allocated to recipient countries by population in the primary analysis. Equal, GDP, and land-area allocations are reported as robustness checks. - Income-group summaries use geometric means after country aggregation. Figure 3 `30_figure3_three_source_panel.R` produces the manuscript’s Figure 3 (`output/figures/figure03_source3_type_3x2_panel.png`), which splits co-financing by three sources (private sector, recipient country government, other sources) and two types (for-profit, not-for-profit), with 95 per cent country-bootstrap error bars. It also writes the appendix table reporting those intervals, the number of zero-co-financing countries, the largest recipient in each cell, and the bootstrap probability of each income ordering (`output/tables/appendix_fig3_bootstrap_table.docx`, with the underlying values in the two `appendix_fig3_bootstrap_panel_*.csv` files). `10_figures_3_4_multicountry.R` still writes the earlier two-by-two version (`figure03_forprofit_notforprofit_2x2_panel.png`), which the manuscript no longer uses. It is retained because script 30 reconciles its own three-way source split against all sixteen values of that figure, so any divergence between the two constructions fails the run rather than passing silently. Reproducibility status The release was successfully run from a fresh local copy on 24 September 2026 with R 4.6.1 on arm64 macOS. All retained scripts completed, the three bootstrap procedures had zero failed replicates, the objective-code test recovered all 32 intended GEF-7 sub-code columns, both of script 30’s reconciliation checks passed, and the output verifier passed. The captured software environment is in `reference/sessionInfo.txt`. One expected warning can occur in the sparse multinomial model: `sqrt(diag(vc)): NaNs produced`. It concerns unavailable conventional standard errors for sparse category/term combinations; it does not terminate the model, and the manuscript-facing country-cluster bootstrap completes with zero failed replicates. Data provenance and limitation See `DATA_SOURCES.md`. The central co-financing input is an analysis-ready snapshot containing manual corrections. A comparison with the dated public export found 96 differing project/source/type cells. Because a complete machine-readable correction log was unavailable, replacing the snapshot with the public export would alter the reported results. The snapshot is therefore retained transparently, rather than presenting the workflow as raw-to-results.