| 1 |
Clean re-run (deleted results/figure/table/exclusions, ran analysis.py twice) gives identical results.json |
PASS |
| 2 |
Exclusion ledger: 2349 − (0+396+1736+20) = 197 = n_analysed; each row n_before − n_removed = n_after |
PASS |
| 3 |
n_countries_in_year (217) − n_excluded_missing (20) = n_analysed (197) |
PASS |
| 4 |
effect_ci_low < effect_estimate < effect_ci_high; effect_se > 0 |
PASS |
| 5 |
pearson_r² = r_squared (to 1e-12) |
PASS |
| 6 |
r_squared = 1 − (model_metric/baseline_metric)² (OLS with intercept identity) |
PASS |
| 7 |
model_metric ≤ baseline_metric |
PASS |
| 8 |
table1 n_countries sums to n_analysed; 4 income-level rows |
PASS |
| 9 |
Independent recomputation (scipy linregress, simple pandas filter) reproduces slope 5.2672, intercept 22.567, n=197 |
PASS |
| 10 |
Manual HC3 sandwich formula reproduces effect_se 0.21068 |
PASS |
| 11 |
n-weighted mean of table1 LE equals mean_life_expectancy (diff 2e-7, from 6-dp rounding in CSV) |
PASS |
| 12 |
Magnitudes: slope ≈ 5.3 years/log-point, LE range in 2023 plausible; HC0–HC3 and classical SEs all 0.207–0.222 |
PASS |
| 13 |
Information rules: aggregates excluded, year rule applied (2023: 197 ≥ 150), no imputation, only data/ files read |
PASS |