SPB Git

spb/wp29_uqo

Public

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

# Question

For each month t from 2001-01 to 2026-09, compute g_t = 100 × (P_t / P_{t−12} − 1) for CPIAUCSL (seasonally adjusted), where P comes from the most recent vintage covering that month. Then summarise: overall and sub-period means, five named months, and the extremes.

# Data and exclusions

  • I used two authoritative inputs: 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) (n_input_rows).

  • cpi_assembled.csv (957 rows) was read only to audit it. It has three assembly errors, listed in data_issues:

    • the overlap months 2014-01..2016-06 carry the older vintage's values;
    • 2016-07 is missing;
    • every value from 2016-08 onward sits one month late, which creates a spurious 2026-10 row.

    Because of these errors I did not use it. The series was rebuilt from the two vintage files.

  • The 2026-10-28 vintage has an empty cell for 2025-10 (data_issues). This value was not imputed.

  • Exclusion ledger (out/exclusions.csv): the window has 309 months (n_window_months). One month (2025-10) was removed for lacking P_t, and none were removed for lacking P_{t−12}. That leaves 308 analysed months (n_analysed, n_months_growth) and 1 missing month (n_months_missing_growth, missing_growth_months).

# Method

  • Index level by month: the level for 2014-01..2026-09 comes from the 2026-10-28 vintage, including its empty 2025-10 cell. Earlier months use the 2016-07-15 vintage.
  • Growth rate: g_t is computed on a contiguous monthly grid. Growth is missing wherever either level is missing.
  • Seam months: for 2014-01..2014-12 the lagged level is from the 2016 vintage, as the availability rule requires.
  • Summaries: simple arithmetic means over the available g_t.
  • Reproducibility: the computation is deterministic and uses no randomness (random_seed = null). out/analysis.py regenerates every output.
  • Baseline: the task labels the 2001–2013 sub-period mean as the baseline (mean_growth_12m_2001_2013). No further model was needed.

# Results

  • First month with a growth rate: 2001-01 (first_growth_month). Last month with a level: 2026-09 (last_month).

  • Mean 12-month inflation was 2.574% over the 308 analysed months (mean_growth_12m). By sub-period:

    • 2001-01..2013-12: 2.361% (mean_growth_12m_2001_2013, 156 months, n_growth_2001_2013);
    • 2014-01..2026-09: 2.793% (mean_growth_12m_2014_2026, 152 months, n_growth_2014_2026).
  • Named months:

    month g_t key
    2014-06 2.098% growth_2014_06
    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 percentage points (sd_growth_12m).

  • Feasibility is "partial" (feasibility, feasibility_reason) because g for 2025-10 cannot be computed. All summary estimands were still computed from the 308 available months.

# Uncertainty

These figures are computed directly from published data, not estimated from a sample, so there are no sampling standard errors. The remaining uncertainty comes from data revisions:

  • In the 30 overlapping months the two vintages differ by up to about 0.5 index points, because seasonal factors were revised.
  • So the 2001–2013 figures would change somewhat under a newer vintage.
  • The 2014 growth rates combine levels from two vintages.

I did not quantify this revision uncertainty.

# Limitations and open issues

  • Missing month: 2025-10 has no published level in the latest vintage, so its g_t is missing. Following the rules, I did not interpolate it. As a result, the 2014–2026 sub-period mean covers 152 of 153 months.
  • Mixed vintages: the rule mixes vintages, so g_t for 2014-01..2014-12 compares a 2026-vintage level with a 2016-vintage level.
  • Assembled file: cpi_assembled.csv contains assembly errors and was not used. Using it would have produced wrong overlap values and growth rates shifted by one month after 2016-07.
  • Hash mismatch: the SHA-256 values in data/README.md refer to the raw downloads, not the reformatted files, so they could not be checked against the files. The hashes I computed myself are in out/state/data_audit.md.
Files · main
Menu

Theme