Data audit (P1) — 2026-10-30
All SHA-256 values computed with shasum -a 256 match those in data/README.md exactly (24 CSV files). Row counts (data rows after header) also match README.
| file | rows×cols | first | last | missing | dup dates |
|---|---|---|---|---|---|
| RSAFS_vintage_2025-10-31 | 404×2 | 1992-01 | 2025-08 | 0 | 0 |
| RSAFS_vintage_2025-11-30 | 405×2 | 1992-01 | 2025-09 | 0 | 0 |
| RSAFS_vintage_2025-12-31 | 406×2 | 1992-01 | 2025-10 | 0 | 0 |
| RSAFS_vintage_2026-01-31 | 407×2 | 1992-01 | 2025-11 | 0 | 0 |
| RSAFS_vintage_2026-02-28 | 408×2 | 1992-01 | 2025-12 | 0 | 0 |
| RSAFS_vintage_2026-03-31 | 409×2 | 1992-01 | 2026-01 | 0 | 0 |
| RSAFS_vintage_2026-04-30 | 411×2 | 1992-01 | 2026-03 (adds 2 months) | 0 | 0 |
| RSAFS_vintage_2026-05-31 | 412×2 | 1992-01 | 2026-04 | 0 | 0 |
| RSAFS_vintage_2026-06-30 | 413×2 | 1992-01 | 2026-05 | 0 | 0 |
| RSAFS_vintage_2026-07-31 | 414×2 | 1992-01 | 2026-06 | 0 | 0 |
| PAYEMS vintages (10) | 1040…1050×2 | 1939-01 | 2025-08 … 2026-06; vintage 2025-12-31 ends 2025-11 (two months added at once) | 0 | 0 |
| UMCSENT.csv | 887×2 | 1952-11 | 2026-09 | 210 (all before 1978-01, quarterly survey era); none after | 0 |
| RSAFS_current.csv | 417×2 | 1992-01 | 2026-09 | 0 | 0 |
| first_release.csv | 28×5 | 2024-06 | 2026-09 | 0 | 0 |
Units: RSAFS millions USD SA; PAYEMS thousands SA; UMCSENT index 1966Q1=100. All monthly, no internal gaps in any series (checked against a full monthly date range).
Anomalies / findings
- Irregular publication timing: last(V) is two calendar months before the origin month for the six origins 2025-10-31 … 2026-03-31 (last = 2025-08 … 2026-01; month-end vintages normally end one month before), and one month for 2026-04-30 … 2026-07-31; vintage 2026-04-30 adds 2026-02 and 2026-03 at once, so 2026-03 is never an h=1 target. Handled per task rule: targets are last(V)+h, not calendar-based. Consequence: some target months are shared between h=1 and h=3 (13 distinct target months).
- first_release.csv consistency: recomputed 100·ln(level/prev) matches
yoy_first_releaseto < 5e-7 (rounding). For each origin, the last row of the vintage equalslevel_first_releaseand the 12-month-earlier level equalslevel_prev_year_same_vintagewhenever the first-release vintage equals V (checked; all 10 match). For origin 2025-10-31 (last=2025-08) the first-release vintage of 2025-08 is 2025-09-30, but levels still match. - Annual/benchmark revision of RSAFS levels: RSAFS_current levels are ~4% lower than the 2026-07-31 vintage for 2025 months, and
level_prev_year_same_vintagejumps between the target months 2026-07 (727176) and 2026-08 (700218) — a level rebasing occurred between the 2026-08-31 and 2026-09-30 vintages. The YoY of current data is systematically lower than first release (~0.3–0.8 pp). This affects h=3 targets 2026-08 and 2026-09 (first-released after the rebasing) and estimand (d). Handled: no adjustment (the task defines the actual as first release); documented. - PAYEMS may extend beyond last(V) of RSAFS (e.g. V=2025-12-31: PAYEMS ends 2025-11, RSAFS 2025-10). Not used by my model (see decisions).
- UMCSENT is a current vintage; per README and TASK it is unrevised and the origin-month value is available at month-end. Not used by my model.
Availability-rule violations / handling
- RSAFS_current.csv would violate the rule if used in forecasts → used only in the revision computation (estimand d), in a separate code block.
- first_release.csv contains post-origin information → used only as evaluation actuals.
- No other file violates the rules provided vintage V is used only at origin V (enforced in code by loading files by origin date).