SPB Git

spb/wp29_uqo

Public

# F1-conf-01 — 12-month CPI inflation from two data vintages

# Question

What is the 12-month growth rate g_t = 100·(P_t/P_{t−12} − 1) of CPIAUCSL (SA) for each month 2001-01 … 2026-09? P_t comes from the most recent vintage that covers month t. The summaries asked for are the window mean, the means for 2001–2013 and 2014–2026, five named months, and the maximum and minimum.

# Data and exclusions

  • Inputs read (n_input_rows): 2016-07-15 vintage (834 rows, 1947-01..2016-06), 2026-10-28 vintage (153 rows, 2014-01..2026-09), and cpi_assembled.csv (957 rows). The assembled file was read for auditing only (see below). SHA-256 hashes and the full audit are in out/state/data_audit.md.
  • Exclusion ledger (out/exclusions.csv): 987 vintage rows → 957 after dropping the 30 rows of the old vintage that the new vintage supersedes (2014-01..2016-06) → 309 months in the window (n_months_window) → 308 months with a computable g_t (n_analysed, n_months_growth). One month is missing (n_months_missing_growth = 1, missing_growth_months = ["2025-10"]).
  • Data issues (data_issues):
    1. The 2026-10-28 vintage has no value for 2025-10, so g(2025-10) cannot be computed. I did not impute it. g(2026-10) would also need that value, but it falls outside the window.
    2. Over the 30 overlapping months the two vintages disagree (mean absolute difference 0.19 index points, max 0.455), because seasonal factors were revised. I used the new vintage, as the rule requires.
    3. For 2014-01..2014-12 the numerator comes from the new vintage but the denominator (2013) exists only in the old vintage, so these 12 ratios mix vintages.
    4. cpi_assembled.csv has assembly errors. It uses old-vintage values for 2014-01..2016-06. It has no 2016-07 row, and from that point every new-vintage value is labelled one month late: 152 months differ from the correct splice. It also has a spurious 2026-10 row. I did not use it for any computation and rebuilt the series from the two authoritative vintage files.

# Method

For each month I took the most recent vintage that covers it: the 2026-10-28 vintage for 2014-01..2026-09 (including 2025-10, where its value is empty) and the 2016-07-15 vintage for earlier months. I checked that the spliced series has no gaps in its month sequence, computed g_t from P_t and P_{t−12}, and left g_t missing whenever either level is missing. The means are simple arithmetic means over the months with a computable g_t. The baseline is the 2001–2013 mean. Nothing is random (random_seed = null). out/analysis.py regenerates every output.

# Results

  • Window: first growth month first_growth_month = 2001-01; last month with an index level last_month = 2026-09.
  • Mean g_t over the 308 months: 2.574 % (mean_growth_12m).
  • Baseline, 2001-01..2013-12 (156 months, n_months_2001_2013): 2.361 % (mean_growth_12m_2001_2013).
  • 2014-01..2026-09 (152 months, n_months_2014_2026): 2.793 % (mean_growth_12m_2014_2026).
  • Named months: 2014-06 2.098 % (growth_2014_06; this one mixes vintages); 2016-07 0.868 % (growth_2016_07); 2020-05 0.198 % (growth_2020_05); 2022-06 8.979 % (growth_2022_06); 2026-09 3.717 % (growth_2026_09).
  • Maximum: 8.979 % in 2022-06 (max_growth_12m, max_growth_month). Minimum: −1.959 % in 2009-07 (min_growth_12m, min_growth_month).
  • Standard deviation of g_t over the window: 1.741 pp (sd_growth_12m).
  • Feasibility: feasibility = "partial". g(2025-10) cannot be computed because the source has no level for that month. Every summary estimand is computed over the other 308 months (feasibility_reason).

# Uncertainty

These are deterministic transformations of published data, so there is no sampling uncertainty and I report no confidence intervals. The real uncertainty is revision uncertainty. Between vintages, overlapping index levels differ by up to 0.455 points (about 0.2 %), so growth rates for older months could move by a few tenths of a point in later vintages. The 2014 growth rates mix vintages and carry this noise directly. Leaving out 2025-10 has only a small effect on the 2014–2026 mean: one month out of 153.

# Limitations and open issues

  • The window is incomplete: g(2025-10) is missing because the source has no value (n_months_missing_growth). Because of this I set feasibility to "partial".
  • For months before 2014 the "latest vintage" is the 2016 vintage, because the newer extract only begins in 2014-01. Pre-2014 levels in today's vintage may differ slightly; the 2016 vintage is the most recent one available here.
  • The 2014 growth rates combine levels from two vintages with different seasonal factors (data_issues).
  • The hand-assembled file is unreliable and was not used. Any analysis built on it would place 2016-08 onward one month off and would apply the wrong vintage to 2014-01..2016-06.
Files · main
Menu

Theme