Verification checks (P4)
- Clean re-run: deleted out/results.json, re-ran analysis.py; byte-identical to previous output. PASS
- CI [beta_ci_low, beta_ci_high] contains beta_hat. PASS
- se_ols > 0 and se_cluster > 0. PASS
- Counts: n_input_rows 2000 - 0 removed (exclusions.csv) = n_analysed 2000; n_clusters 50 = unique firm_id (audit). PASS
- Independent cross-check with statsmodels OLS: se_ols 0.0241152 identical; cluster SE (statsmodels CR1) 0.0731381 identical to se_cluster to 1e-15. PASS
- Magnitude vs baseline: se_cluster/se_ols = 3.03 (se_ratio_cluster_over_ols) — plausible given within-firm correlation of both x and y (firm-mean correlation of x and y 0.58). PASS
- Note: statsmodels' default CI uses a normal critical value ([0.6617, 0.9484]); we use t with G-1=49 df, slightly wider. Documented choice, not an error.