Checks (P4)
- Reproducibility: analysis.py run twice from scratch; results.json byte-identical (cmp) — PASS.
- Exclusion ledger sums: 1200 − (0+0+12) = 1188 = n_analysed — PASS.
- SEs positive (effect_se 0.0098, naive_se 0.0146) — PASS.
- CIs contain estimates (naive and effect) — PASS.
- RMSE positive; model_metric (1.98) < baseline_metric (3.86), as expected when adding a strong predictor — PASS.
- Conclusion code consistent with CI: effect_ci_low 0.234 > 0 → positive_effect — PASS.
- Linearity/homogeneity: joint robust Wald test of training², skill², training×skill p = 0.86 (spec_check_nonlinear_terms_joint_pvalue) — no evidence against linear model — PASS.
- Heteroskedasticity: Breusch–Pagan p ≈ 0.28 (ad hoc check, not in results); conventional SE 0.00984 vs HC1 0.00981 — negligible difference — info only.
- Sensitivity incl. negative-hour rows: effect 0.2522 vs 0.2535 — robust — PASS.
- Magnitude vs baseline: sign reversal (naive −0.13 → adjusted +0.25), explained by skill_index correlated +0.68 with training and negatively with growth (omitted-variable bias direction negative) — consistent.