# Verification checks (P4) | # | check | outcome | |---|---|---| | 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 |