SPB Git

spb/wp29_uqo

Public

# 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) and cpi_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:
    1. It keeps the 2016 vintage for 2014-01…2016-06, when the newer vintage should take priority.
    2. 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.
    3. 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.
Files · main
Menu

Theme