diff --git a/README.md b/README.md index 11c7bae..4dad0b8 100644 --- a/README.md +++ b/README.md @@ -61,10 +61,15 @@ have their own `data/current/SHA256SUMS`; they do not replace the frozen forecast or become a new prospective commitment. `data/PROVENANCE.md` describes both collections and the original implementation pin. -## Pre-committed 2025 poverty-rate prediction +## September 11, 2026 development poverty-rate prediction + +**Status as of September 13, 2026:** these development estimates remain +provisional pending a comparison on the final, qualified model and +population release. They are separate from the paper's threshold-method +results. `data/predictions/2025-spm-poverty-rates-2026-09-11.json` records, before the -Census Bureau's 2026-09-15 release, PolicyEngine's prediction for the 2025 SPM +Census Bureau's 2026-09-15 release, a pre-committed prediction for the 2025 SPM poverty rate: the Census 2024 rate plus the modeled 2024-to-2025 change under the rolling CE and ACS threshold method (13.2 percent overall on the corrected 2024 series; 14.3 for children; 14.6 for people 65 and over). Its SHA-256 is in diff --git a/paper/index.qmd b/paper/index.qmd index ff9426c..0e45c6e 100644 --- a/paper/index.qmd +++ b/paper/index.qmd @@ -6,7 +6,7 @@ author: affiliations: - name: PolicyEngine email: max@policyengine.org -date: 2026-09-12 +date: 2026-09-13 date-format: long bibliography: ../bibliography/references.bib format: @@ -715,17 +715,8 @@ also alter growth relationships. The sample and trend sensitivities identify specific uncertainties but do not provide forecast intervals. Threshold choice affects modeled poverty through the distribution of -resources near the line, not through threshold growth alone. In a frozen -historical PolicyEngine simulation, projected SPM poverty under the -committed 2025 nowcast was 0.4 percentage points higher than under -CPI-U-adjusted thresholds. That simulation uses the model's CPI-U -parameters, rather than the realized annual-average CPI-U rule evaluated -above. The recorded sensitivity depends on its original population and -model vintage; it is not a result from the current model or a general -conversion between threshold errors and -poverty-rate errors. Its saved receipt lacks immutable model and dataset -identities, so an exact independent replay of this historical sensitivity -has not been established. +resources near the line. A poverty-rate impact estimate therefore requires +a specified population and resource model. # Appendix A: method versions and forecast commitment {.unnumbered} @@ -769,8 +760,8 @@ old timestamp covers the amendment. The repository documents those identities and checks the retained bytes; this revision does not independently reverify blockchain attestations. -This paper makes no new forecast commitment or scheduled cutoff. The -previously discussed 2026 CE collection window already closed in 2026Q1. +This paper makes no new threshold forecast commitment or scheduled cutoff. +The previously discussed 2026 CE collection window already closed in 2026Q1. Any future commitment would require an actual timestamp and a recorded available-input cutoff before the outcome is published. @@ -800,9 +791,10 @@ digest is: ``` Exact source and release identities are recorded alongside the inputs; -`data/PROVENANCE.md` describes the separate collections. The frozen -poverty sensitivity additionally requires its original model and -population dataset to reproduce. +`data/PROVENANCE.md` describes the separate collections. The repository +also preserves a historical poverty sensitivity. Its receipt lacks +immutable model and population dataset identities, so exact replay has +not been established. To verify the reported tables, clone the paper repository with its full tag history and check out the manuscript revision being evaluated. Run diff --git a/scripts/check_paper.py b/scripts/check_paper.py index ccc0156..f132236 100644 --- a/scripts/check_paper.py +++ b/scripts/check_paper.py @@ -415,8 +415,8 @@ def count_word(value: int) -> str: rate = json.loads((DATA / "nowcast_rate_impact.json").read_text()) delta_2025 = rate["2025"]["all"]["delta_pp"] check( - "poverty sensitivity 0.4pp", - has_number("0.4 percentage points", min_count=1) and abs(delta_2025 - 0.4) < 0.05, + "archived poverty sensitivity rounds to 0.4pp", + abs(delta_2025 - 0.4) < 0.05, ) backtest = (TABLES / "backtest.md").read_text()