# F1-conf-01 — 12-month CPI inflation (CPIAUCSL, SA) 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), where P is CPIAUCSL taken from the most recent vintage covering that month (2026-10-28 vintage for 2014-01 onward, 2016-07-15 vintage before), and summarise it: overall and sub-period means, five named months, and the max/min. ## 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 only inputs used for estimation. Neither has duplicate dates or gaps in its date sequence. - **2025-10 has no value** in the 2026-10-28 vintage (empty cell). The 2016 vintage doesn't cover that month. I did not impute it. As a result g_{2025-10} can't be computed. g_{2026-10} would also need it, but that month is outside the window. **The analysis uses 308 of the 309 window months.** - The vintages overlap for 2014-01…2016-06 (30 months), and their levels differ by up to 0.455 index points because seasonal factors were revised. Following the rule, the 2026 vintage is used for those months. - **The hand-assembled file `cpi_assembled.csv` (957 rows) has errors.** I read it only to check it, never to estimate anything: - for 2014-01…2016-06 it uses the older 2016 vintage instead of the newer one; - it has no 2016-07 row; - from 2016-07 onward every 2026-vintage value is dated one month late, which creates a spurious 2026-10 row holding the 2026-09 value (336.298); - as a result, 152 of the months it shares with the correct series have wrong values. - Exclusion ledger (`out/exclusions.csv`): 309 window months → step 1 (P_t missing: 2025-10) removes 1 → 308 → step 2 (P_{t−12} missing) removes 0 → 308 rows in `out/analytic.csv`. ## Method 1. Build the series by taking each month's level from the most recent vintage that has it. 2. Compute g_t on a calendar-month index, so any gap gives a missing value rather than a shifted lag. 3. Restrict to the window and drop months where g_t is missing. 4. Compute the means with equal weight per available month. No randomness is involved. `out/analysis.py` regenerates all outputs deterministically; I checked this by re-running it and comparing hashes. ## Results | quantity | value | |---|---| | months with g_t / missing | 308 / 1 (2025-10) | | first growth month / last month with a level | 2001-01 / 2026-09 | | mean g_t, 2001-01…2026-09 (308 months) | 2.574 % | | mean g_t, 2001-01…2013-12 (156 months) | 2.361 % | | mean g_t, 2014-01…2026-09 (152 months, 2025-10 missing) | 2.793 % | | g 2014-06 | 2.098 % | | g 2016-07 | 0.868 % | | g 2020-05 | 0.198 % | | g 2022-06 | 8.979 % (maximum) | | g 2026-09 | 3.717 % | | minimum | −1.959 % in 2009-07 | Exact values are in `out/results.json`. ## Uncertainty These figures are deterministic transforms of published index levels, so there is no sampling uncertainty. The relevant uncertainty is **data revision**: - **Mixed vintages in 2014.** For 2014-01…2014-12 the numerator comes from the 2026 vintage and the lag (2013) from the 2016 vintage. Compared with growth computed entirely within the 2016 vintage, the 12-month rates differ by 0.071 pp on average and at most 0.127 pp. For example, g_{2014-06} is 2.098 % spliced versus 2.005 % within the 2016 vintage. - **Revisions for 2015…2016-06.** Over these months the two vintages give 12-month rates that differ by up to 0.126 pp. - **Effect on the 2014–2026 mean.** Replacing the 2014 rates with same-vintage rates changes this mean only from 2.792628 % to 2.792604 % (difference about 0.00002 pp). - **Effect of the missing month.** Dropping 2025-10 slightly changes the weighting of the 2014–2026 mean. No imputed value is included. ## Limitations and open issues - **Feasibility is "partial":** g_t for 2025-10 can't be computed because the source has no level for that month, and the rules forbid imputation. All summary statistics use the 308 available months. - **The 2014 growth rates combine two vintages,** as the availability rule requires. Their seasonal adjustment is therefore not internally consistent; the size of this effect is quantified above. - The 2001–2013 levels come from the 2016 vintage. Later vintages may have revised the seasonally adjusted values for those years, but they are not among the provided inputs. - **Do not use `cpi_assembled.csv` without correcting it:** it has both the wrong-vintage problem and the one-month date shift.