F6-dev-01 — Preston curve in the latest usable WDI year
Question
Does the cross-country relationship between real income per capita and life expectancy hold in the most recent year with usable World Bank data, and how strong is it? Estimand: the slope β of the linear projection LE_i = α + β·ln(GDPpc_i) + ε_i over countries/economies (equal weights) in the analysis year, with heteroskedasticity-robust uncertainty. The interpretation is descriptive (associational), not causal.
Data and exclusions
Inputs: data/wb_indicators.csv (2349 rows) and data/wb_entities.csv (296 rows) (n_input_rows); SHA-256 hashes match data/README.md (see out/state/data_audit.md). Exclusion ledger (out/exclusions.csv):
- Indicator rows with an iso3 absent from the entity file: 0 removed (all matched).
- Entities with region
Aggregates: 44 aggregate entities × 9 years = 396 rows removed (n_aggregate_entities_excluded). - Analysis-year restriction: the number of countries/economies with both indicators is 199 in every year 2015–2022 and 197 in 2023 (
complete_countries_by_year), so the most recent year with ≥150 is 2023 (analysis_year); 1736 rows of other years removed, leaving 217 countries/economies (n_countries_in_year). - Countries missing an indicator in 2023: 20 removed (
n_excluded_missing), all because GDP per capita is missing (life expectancy is never missing): ASM, CHI, CUB, ERI, GIB, GUM, IMN, LIE, MAF, MCO, MNP, NCL, PRK, PYF, SSD, SYR, VEN, VGB, VIR, YEM. No imputation.
Analysed: 197 countries/economies (n_analysed); 2349 − 2152 removed = 197. Data issues found and how they were handled are listed in data_issues. They include implausibly large year-to-year life-expectancy swings outside 2023 (e.g. Central African Republic at 18.8 years in 2022), which do not enter the estimate, and a sharp 2023 drop for West Bank and Gaza (65.2 vs 76.7 in 2022), which does enter it and was kept as published.
Method
- Baseline: predict every country's LE by the sample mean; the metric is the RMSE (
baseline_metric). - Main model: OLS of LE on the natural log of GDP per capita (PPP, constant 2021 $), one equally weighted observation per country. Model fit is the residual RMSE (
model_metric) computed with the same rule, plus R² (r_squared) and the Pearson correlation (pearson_r). - Uncertainty: HC3 heteroskedasticity-robust SE for β (
effect_se,se_type). The 95% CI is β ± 1.96·SE (normal approximation,ci_method). HC0/HC1/HC2 and classical SEs are reported for comparison. Leave-one-out slopes measure the influence of single countries. - Conclusion rule:
positive_effectif the 95% CI lies above zero. - No randomness is used (
random_seed= null).out/analysis.pyregeneratesresults.json,figure1.png,table1.csvandexclusions.csvfromdata/alone.
Results
- In 2023, across 197 countries, the OLS slope is β = 5.27 years of life expectancy per log-point of GDP per capita (
effect_estimate= 5.267). The intercept is 22.57 years (intercept). One log-point is about a 2.72× income ratio. Doubling income goes with about 3.65 more years (le_gain_per_doubling_gdp). - Strength: Pearson r = 0.861 (
pearson_r), R² = 0.742 (r_squared). The residual RMSE is 3.59 years (model_metric), against 7.08 years for the mean-only baseline (baseline_metric). That is a 49% reduction in RMSE (rmse_reduction_share). - Conclusion:
positive_effect(conclusion). The Preston-curve association holds clearly in 2023. - Table 1 (
out/table1.csv): mean LE rises steadily across income groups: Low income 63.2 years (n=20), Lower middle 67.8 (n=46), Upper middle 73.7 (n=58), High 79.7 (n=73). These figures are produced byanalysis.pybut are not keys in results.json; the group counts sum ton_analysed. - Figure 1 (
out/figure1.png): scatter with the fitted line, coloured by income group.
Uncertainty
HC3 SE = 0.211 (effect_se), giving a 95% CI of [4.85, 5.68] years per log-point (effect_ci_low, effect_ci_high). The choice of SE type matters little: HC0 0.207, HC1 0.208, HC2 0.209, classical 0.222 (effect_se_hc0, effect_se_hc1, effect_se_hc2, effect_se_classical). Dropping any single country moves β only within [5.21, 5.33] (loo_slope_min, dropping TCD; loo_slope_max, dropping GRL). This CI covers sampling-type variation only, under the assumption that countries are independent observations. It does not cover measurement error in the WDI series, model misspecification, or the selection effects described below.
Limitations and open issues
- Not causal. β is a descriptive linear projection. Income is correlated with health systems, education, institutions and geography, and causality runs both ways (health also raises income). Nothing here identifies the effect of raising income.
- Non-random missingness. The 20 excluded economies (
n_excluded_missing) lack GDP data, not life expectancy. They are mostly small high-income territories (Monaco, Liechtenstein, Channel Islands, …) and conflict-affected or sanctioned economies (South Sudan, Syria, Yemen, Venezuela, DPRK, Eritrea, Cuba). The second group probably sits at low income or low LE. Leaving out both tails could bias β in either direction. I did not quantify this, because the rules forbid imputation. - Data quality. WDI life expectancy for 2023 comes largely from modelled UN WPP estimates rather than direct vital registration in many countries. The audit found implausible swings in some series (CAF, SSD, PSE;
data_issues). Only PSE's 2023 value enters the estimate, and leave-one-out shows no single country drives β. PPP GDP for small or conflict-affected economies is also uncertain. Errors in ln(GDPpc) would attenuate β. - Functional form. One linear-in-log slope summarises a relationship that may flatten at high income. The figure shows several high-income economies well below the line. I did not test nonlinearity, piecewise slopes, or residual patterns by region. Robust SEs keep the inference valid for the linear projection, but β should not be read as a constant marginal gradient.
- Equal weighting. Tiny economies count as much as China or India. A population-weighted estimand would answer a different question; it was not computed.
- Single cross-section. Only 2023 is analysed. Stability across 2015–2022 (including the COVID-19 years) was not checked.
- Independence. Countries within a region share shocks, so cross-sectional dependence could make the SEs too small. Clustered or spatial SEs were not computed.
- What would invalidate the result: a systematic error in the 2023 WDI vintage, a mis-classification of aggregates as countries (checked: all 44 aggregate codes are excluded), or a different reading of the year-selection rule. Under the stated rule, 2023 qualifies (197 ≥ 150).