1# F1-conf-01 — 12-month CPI inflation from two data vintages23## Question4For every month t from 2001-01 to 2026-09, compute the 12-month growth of U.S. CPIAUCSL (seasonally adjusted), g_t = 100·(P_t/P_{t−12} − 1). P_t comes from the most recent vintage that covers the month: 2026-10-28 for 2014-01…2026-09, and 2016-07-15 otherwise. Then summarise g_t.56## Data and exclusions7- Inputs (`n_input_rows`): `cpi_vintage_2016-07-15.csv` has 834 rows (1947-01…2016-06). `cpi_vintage_2026-10-28.csv` has 153 rows (2014-01…2026-09). `cpi_assembled.csv` has 957 rows. I read the assembled file only to audit it. No estimate uses it. SHA-256 hashes and the full audit are in `out/state/data_audit.md`.8- Every data problem I found, and how I handled it, is listed in `data_issues`:9 1. The 2026-10-28 vintage has an empty value for **2025-10** (the source publishes no value). I did not impute it, so g for 2025-10 is missing.10 2. The two vintages overlap for 30 months (2014-01…2016-06), and the newer vintage revises the values. I used the 2026-10-28 values for these months.11 3. Growth for 2014-01…2014-12 divides a 2026-vintage level by a 2016-vintage level. The rule requires this.12 4. The assembled file has errors. It uses the older vintage for the 30 overlap months. It also omits 2016-07, which shifts all 123 later values one month late. As a result the series ends at a spurious 2026-10 and the missing value appears under 2025-11. I therefore ignored it.13- Exclusion ledger (`out/exclusions.csv`):14 - Merging the vintages gives 957 months.15 - Restricting to the window leaves 309 months (`n_months_window`).16 - Dropping months with no P_t removes 1 month (2025-10).17 - Dropping months with no P_{t−12} removes 0 months.18 - That leaves 308 analysed months (`n_analysed` = `n_months_growth`), with `n_months_missing_growth` = 1.1920## Method21- I merged the two vintages month by month and let the newer vintage take precedence wherever it covers a month. A month the newer vintage covers but leaves empty stays missing; I did not fill it from the older vintage, which does not cover 2025-10 anyway.22- The months before 2001 are used only as 12-month lags.23- I computed g_t directly from the levels. Means are simple arithmetic means over the months where g_t exists. Maximum and minimum are taken over the same months.24- The baseline is the 2001–2013 sub-period mean (`mean_growth_12m_2001_2013`).25- No randomness is involved (`random_seed` = null).26- `out/analysis.py` regenerates every output.2728## Results29- First month with a growth rate: `first_growth_month` = 2001-01. Last month with an index level: `last_month` = 2026-09.30- Mean of g_t over the 308 computable months: **2.574%** (`mean_growth_12m`).31 - 2001-01…2013-12, the baseline (156 months, `n_months_growth_2001_2013`): **2.361%** (`mean_growth_12m_2001_2013`).32 - 2014-01…2026-09 (152 of 153 months, `n_months_growth_2014_2026`): **2.793%** (`mean_growth_12m_2014_2026`).33- Named months:3435| month | g_t (%) | key |36|---|---|---|37| 2014-06 | 2.098 | `growth_2014_06` |38| 2016-07 | 0.868 | `growth_2016_07` |39| 2020-05 | 0.198 | `growth_2020_05` |40| 2022-06 | 8.979 | `growth_2022_06` |41| 2026-09 | 3.717 | `growth_2026_09` |4243- Maximum: **8.979% in 2022-06** (`max_growth_12m`, `max_growth_month`). Minimum: **−1.959% in 2009-07** (`min_growth_12m`, `min_growth_month`).44- `feasibility` = "partial". One window month (2025-10) has no computable g_t (`feasibility_reason`). Every other required quantity was computed.4546## Uncertainty47- Each estimand is a fixed calculation on published data, so there is no sampling uncertainty and no confidence interval applies.48- The real uncertainty is revision uncertainty. Values in the overlap months were revised by up to 0.455 index points between the two vintages (`data_issues`), and the 2001–2013 values come from a 2016 vintage that may since have been revised.49- The 2001–2013 mean also partly reflects the data vintage, not just the period.5051## Limitations and open issues52- g for 2025-10 is missing because the source has no index level for that month. The overall mean and the 2014–2026 mean therefore exclude that month. I did not impute it, as the task forbids imputation.53- Growth rates for 2014 combine two vintages with different revision and seasonal-adjustment states.54- I labelled `feasibility` "partial" rather than "complete" because one window month is missing. The task asks for missing months to be counted, so this is a judgement call.55- `vintage_used` in `analytic.csv` gives the vintage of P_t. The lag P_{t−12} comes from 2016-07-15 for dates up to 2014-12 and from 2026-10-28 after that.56- `results.json` has three extra keys beyond the required ones: `n_months_window`, `n_months_growth_2001_2013` and `n_months_growth_2014_2026`.57