F1-conf-01 — 12-month CPI inflation (CPIAUCSL, SA) from two data vintages
Question
For every month t from 2001-01 to 2026-09, compute g_t = 100 × (P_t / P_{t−12} − 1). P is the CPIAUCSL level taken from the most recent vintage that has a value for that month. Then report the window mean, the sub-period means (2001-01…2013-12 and 2014-01…2026-09), five named months, and the months of the maximum and minimum.
Data and exclusions
cpi_vintage_2016-07-15.csv(834 rows, 1947-01…2016-06) andcpi_vintage_2026-10-28.csv(153 rows, 2014-01…2026-09) are the authoritative inputs. Neither file has duplicate dates or gaps in its rows.- Splice: I used the 2026-10-28 value for every month from 2014-01 onward that has a value. For all earlier months I used the 2016-07-15 value.
- Missing value: the 2026-10-28 vintage has an empty cell for 2025-10. The 2016 vintage ends at 2016-06, so no source has a value for that month. I did not interpolate or impute it, so g_{2025-10} cannot be computed. g_{2026-10} would also need the 2025-10 level, but that month falls outside the window. g_{2025-11} and later have a lag of 2024-11 or later, so they can be computed.
- The vintages disagree where they overlap: 30 months (2014-01…2016-06) appear in both files. The newer value minus the older one ranges from −0.455 to +0.330 index points, reflecting revisions and seasonal-factor updates. As the rules require, the newer value is used.
- The assembled file has errors (
cpi_assembled.csv, 957 rows). I read it only to check it against the two vintage files, and none of the estimates use it. It has three problems:- It keeps the 2016 vintage for 2014-01…2016-06, when the newer vintage should take priority.
- It leaves out 2016-07. As a result, every 2026-vintage value after that point is dated one month too late, and the file ends with a spurious 2026-10 row.
- Overall, 152 of the 956 months it shares with the correct splice have different values.
- Exclusion ledger (
out/exclusions.csv): 309 window months → 308 after dropping months with no index level (2025-10) → 308 after dropping months with no lag-12 level (none). n_analysed = 308 and 1 month is missing.
Method
- I built the spliced monthly level series as described above and computed g_t on a complete calendar index, so that a missing level stays missing and the lag is never shifted across a gap.
- All means are simple averages over the months where g_t could be computed. The window mean therefore covers 308 months, and the 2014–2026 mean covers 152 of 153 months.
- The code is deterministic and uses no randomness (
out/analysis.py).
Results
| quantity | value |
|---|---|
| first growth month / last month with a level | 2001-01 / 2026-09 |
| months with g_t / missing | 308 / 1 (2025-10) |
| mean g_t, 2001-01…2026-09 | 2.574 % |
| mean g_t, 2001-01…2013-12 (baseline) | 2.361 % |
| mean g_t, 2014-01…2026-09 (152 months) | 2.793 % |
| g 2014-06 | 2.098 % |
| g 2016-07 | 0.868 % |
| g 2020-05 | 0.198 % |
| g 2022-06 | 8.979 % |
| g 2026-09 | 3.717 % |
| maximum | 8.979 % in 2022-06 |
| minimum | −1.959 % in 2009-07 |
Exact values are in out/results.json.
Uncertainty
- These are computations on published data, not estimates from a sample, so there is no sampling error. The uncertainty comes from data revisions and from how the vintages are spliced.
- The newest vintage stops at 2014-01, so for 2014-01…2014-12 the numerator comes from the 2026 vintage and the lag (2013) from the 2016 vintage.
- I checked how much this matters by recomputing 2014 using the 2016 vintage alone:
- the 2014 mean barely changes: 1.6117 % with the mixed vintages versus 1.6114 % with the old vintage alone;
- individual months move more: g_{2014-06} is 2.098 % (mixed) versus 2.005 % (old vintage only).
- Later revisions to the latest vintage could move recent months, especially 2026.
Limitations and open issues
- Result is partial: g_t cannot be computed for 2025-10 because no vintage has a value for that month. The window mean and the 2014–2026 mean leave that month out rather than imputing it.
- Mixed vintages in 2014: the 2014 growth rates divide a 2026-vintage level by a 2016-vintage level. This follows the stated rule, but the two levels come from different seasonal-adjustment vintages. A fully consistent series would need the 2026 vintage for 2013 as well, which is not among the inputs.
- The assembled file is unreliable (see above) and should not be used.