# Verification checks (P4) | check | outcome | |---|---| | Clean re-run (deleted outputs, ran twice) gives byte-identical results.json | PASS (cmp identical) | | Exclusion ledger: 1200 − 0 − 0 − 12 = 1188 = n_analysed | PASS | | n_input_rows firms.csv = 1200 = wc -l − 1 | PASS | | SEs positive (naive_se 0.0146, effect_se 0.0098, skill_index_se 0.078) | PASS | | CIs contain estimates (naive, effect) | PASS | | CI = est ± 1.96·SE (HC1, normal) | PASS (0.2535 ± 0.0192 = [0.2343, 0.2728]) | | RMSE positive; model_metric (1.98) < baseline_metric (3.86), expected since adjusted model nests unadjusted | PASS | | conclusion consistent with CI (lo>0 → positive_effect) | PASS | | Magnitude vs baseline: sign flip from −0.132 to +0.254 explained by positive skill–hours correlation and negative skill–growth coefficient (omitted-variable bias formula: bias = β_skill·cov(h,s)/var(h) < 0) | PASS (consistent) | | Robustness: skill² term (p=0.57) and hours×skill interaction (p=0.96) not significant; effect unchanged (0.2538, 0.2536) | PASS | | Sensitivity incl. 12 negative-hour rows: effect 0.2522 | PASS (conclusion unchanged) | | Information rules: only data/firms.csv read; control is pre-treatment | PASS | | OVB identity: effect + β_skill·cov(h,s)/var(h) = naive slope (−0.131698 both) | PASS (exact to 1e-15) |