Skip to content

Explain SPM threshold calculation and conditional rolling forecasts - #2

Merged
MaxGhenis merged 14 commits into
masterfrom
max/spm-release-rebuild-20260908
Sep 9, 2026
Merged

MaxGhenis merged 14 commits into
masterfrom
max/spm-release-rebuild-20260908

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

This paper explains how Supplemental Poverty Measure thresholds are calculated and projected from public expenditure and rent data. It distinguishes the current retrospective replication, the immutable pre-committed 2025 nowcast and its observed outcome, and conditional forecasts beyond available microdata.

The extension advances both the 20-quarter CE and five-year ACS windows through 2035, estimates real expenditure growth separately from price inflation, and reports a zero-real-growth sensitivity. It anchors national thresholds and housing shares to published 2025 values, documents public-data geography and vintage bridging, and discloses donor support, topcoding, and the limited scope of retrospective geographic validation. Generated tables use the complete pinned canonical forecast artifact; the earlier scientific snapshots and timestamp evidence remain unchanged.

Validation: 36 paper tests and the 14-table drift guard pass. HTML and PDF render successfully; the forecast and diagnostic tables were visually checked for pagination and legibility. Fable has approved the final paper, and the required CI drift check passes. This PR documents the method and evidence; package and downstream production promotion are separately gated.

MaxGhenis and others added 6 commits September 4, 2026 08:25
…hresholds

BLS published the 2025 SPM thresholds on 2026-08-24 (41,323 / 34,326 /
41,701; growth 4.40-6.33% over the corrected 2024 base). The
evaluation the paper committed to in advance, computed by
scripts/evaluate_nowcast_2025.py from the pinned artifacts and the
corrected 2024 base exactly as committed:

  committed (amended) nowcast   -0.69 / -0.55 / -2.27   MAE 1.17%
  original (pre-repair) nowcast -0.54 / -0.22 / -2.18   MAE 0.98%
  replication ratio alone       +0.62 / +0.03 / -1.61   MAE 0.75%
  composite CPI aging alone     -2.01 / -1.14 / -2.93   MAE 2.02%
  all-items CPI-U (status quo)  -2.56 / -1.70 / -3.48   MAE 2.58%

Signed mean of the committed nowcast (-1.17%) is inside the -0.1 to
-1.4 range stated in advance; the ranking the repaired backtest
produced held out of sample; the miss is renters (+6.33% actual vs
+3.92% nowcast). Our composite tracks BLS's own published FCSUti
deflator within 0.7pp in every year 2020-2025.

Also folded in: Census SEHSD WP 2026-17 (2026-08-19) revised rates -
corrected series 0.1-0.3pp below published for 2019-2023, 12.9 -> 13.0
for 2024 (our microsim had the magnitude right and the 2024 sign
wrong; the flagged flat 2023->2024 pair became 12.7 -> 13.0, n.s.);
a footnote sizing the fixed-2019 vs chain-linked composite definition
difference (<= 0.06pp growth, 0.006pp backtest MAE); the October 2025
CPI placeholder still present at the API while BLS's page shows
2.70% CPI-U growth (undocumented treatment); the pre-commitment OTS
proof preserved as SHA256SUMS.precommit(.ots), now a complete Bitcoin
attestation (block 961505, 2026-08-07 23:18 UTC), with the
post-evaluation checksums stamped separately.

New pinned artifacts: data/bls_2025_thresholds.json,
data/census_wp2026_17_rates.json, data/evaluation_2025.json. The
pre-render guard now runs the evaluation script and re-derives every
figure quoted from it.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…-review findings

BLS's current thresholds workbook (spm_thresholds.xlsx, linked from the
SPM home page; sheet still titled 2005-2024) carries 2025 at full
precision with standard errors: 41,322.707 / 34,325.998 / 41,700.556
(SE 327 / 560 / 393). Bundled with hash pinned; evaluation re-run -
MAEs unchanged at two decimals. Misses in SE units: owners -0.87 and
-0.34, renters -2.4.

From the 2026-09-04 cross-model code review (verified): footnote on
three remaining replication approximations (annual deflation of the
terminal Q1, tenure-code folding, GROCER allocation scope), and a
reproducibility disclosure that the implementation's default CPI
store carried a mis-mapped internet series (SEEE) and so returned a
different 2025 price ratio (1.0297) from the committed six-series
composite (1.0322); reconciliation is on the PR #32 branch and the
2026 series choice is spm-calculator issue #35.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…unts it found

A 2026-09-04 reproducibility audit showed the substring-only guard
passing under edits it should reject: 41,036.34 -> 141,036.34, tenure
amounts swapped, a table include redirected, a generated table
missing, and an emptied SHA256SUMS (zero entries, zero failures).

The guard now: enforces allowlists of generated tables and QMD
includes; requires SHA256SUMS to cover exactly the artifacts present;
matches registered figures at numeric-token boundaries and the tenure
amounts as ordered triples in the sentences that state them; registers
counts and ranges derived from the artifacts (correction <=1.6%,
package errors 7.4% in N of six years, renter falls in N years, SE
range, effective shelter weight 55 vs 47, evaluation per-tenure and
range figures, BLS 2025 SEs, Census 2023->2024); restores the tables
on failure instead of leaving the checkout mutated; and reports scope
honestly (external citation figures and dates are not registered).

On its first run it found two miscounts that survived every prior
review: the package was wrong in five of six years (2021's owner
values were ~1% off), not four; renter thresholds fell in all six
years, not five. Both fixed and the catch is noted in the paper.

Also from the audit: data/PROVENANCE.md (generator, inputs, source of
every artifact); the sensitivity script now takes --output and stamps
its own provenance; data/COMMITMENT-MANIFEST.txt lists both nowcast
vintages (tag objects, commits, artifact hashes) and is stamped;
README gains a clean-room recipe with toolchain versions and the
pre-commitment evidence; the paper pins the full implementation SHA,
says "every push to master and every pull request", links the exact
Wayback capture, states how the original values are anchored
(capture + release timestamps; the Bitcoin proof covers the amended
manifest), and lists replication_results.json among the artifacts
untracked in the implementation at the pinned commit.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…nal-nowcast; clearer error when the tag is unreachable
@MaxGhenis MaxGhenis changed the title Separate current SPM research from preserved forecast commitments Calculate and project SPM thresholds from public consumption data Sep 8, 2026
@MaxGhenis MaxGhenis changed the title Calculate and project SPM thresholds from public consumption data Explain SPM threshold calculation and conditional rolling forecasts Sep 9, 2026
@MaxGhenis
MaxGhenis marked this pull request as ready for review September 9, 2026 22:26
@MaxGhenis
MaxGhenis merged commit cc858aa into master Sep 9, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant