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