Verification checks (P4)
All executed 2026-10-30 by code against out/results.json, out/table1.csv, out/exclusions.csv.
- Clean re-run (deleted results/table/figure, re-ran analysis.py): results.json byte-identical — PASS
- n_train + n_test == n_analysed (2500+2501=5001) — PASS
- table1 n sums to n_analysed — PASS
- Exclusion ledger: 5217 − (215+1) = 5001 = n_analysed — PASS
- n_missing_rows equals ledger step 1 (215) — PASS
- Monday-contrast CI contains estimate — PASS
- SEs positive (contrast and weekday) — PASS
- F > 0, 0 < p < 1 — PASS
- RMSE magnitudes plausible vs sd of changes (5.72 bp overall) — PASS
- Contrast recomputed from table1 weighted means matches effect_estimate — PASS
- Conclusion follows rule (ANOVA p = 0.90 ≥ 0.05 → no_detectable_effect) — PASS
- Information rule: train/test split by date with assertion that partition is exhaustive; forecast means computed from
trainonly (code inspection) — PASS - Baseline comparison: model RMSE 4.8838 vs zero-change 4.8757 (model slightly worse) — consistent with null ANOVA.