Explain SPM threshold calculation and conditional rolling forecasts - #2
Merged
Merged
Conversation
…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
marked this pull request as ready for review
September 9, 2026 22:26
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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.