| 1 |
Clean re-run: deleted results.json/table1.csv/figure1.png, re-ran analysis.py, cmp against the previous results.json |
IDENTICAL (byte-for-byte) |
| 2 |
Input SHA-256 values match data/README.md |
pass (5/5 sources) |
| 3 |
k_harmonised (4) = number of non-null harmonised_estimate |
pass |
| 4 |
k_pooled (2) = number of poolable items; poolable ⇒ SE > 0 |
pass |
| 5 |
Not harmonisable ⇒ null estimate and a non-empty reason (S5) |
pass |
| 6 |
FE and RE 95% CIs contain their estimates; fe_se, re_se > 0 |
pass |
| 7 |
τ² = 0 ⇒ RE = FE |
pass (Q = 0.324 < df = 1) |
| 8 |
I² = max(0,(Q−df)/Q)·100 = 0 → "low" |
pass |
| 9 |
pooled_pct_change_re = 100(exp(re)−1) |
pass (−17.15%) |
| 10 |
pooled_significant_5pct matches the CI (CI [−0.396, 0.020] includes 0 → false) |
pass |
| 11 |
Pooled θ lies between the two study estimates (−0.24, −0.118); magnitude vs baseline unweighted mean of poolable θ (−0.179) |
pass (−0.188) |
| 12 |
Exclusion ledger: 5 → 5 → 4 → 2 = k_pooled; n_before − n_removed = n_after on each row |
pass |
| 13 |
table1.csv has 5 rows with the 12 required columns |
pass |
| 14 |
Printed values reproduced verbatim (script parses them from source lines and prints the lines; S1 has an assert) |
pass |
| 15 |
Hand cross-checks: S1 SE from CI 0.1378, from p 0.1398 vs printed 0.14; S3 ratio −29.81% vs printed −29.79%; S4 ratio −11.25% vs printed 11.1% |
small discrepancies, all recorded in data_issues; none changes a conclusion |
| 16 |
Sensitivity (S1 SE from CI): RE −0.189 [−0.395, 0.017] |
same conclusion |