Skip to content

Grade the 2025 SPM poverty prediction and publish the diagnosis code - #10

Merged
MaxGhenis merged 5 commits into
masterfrom
max/prediction-grade-2025-20260917
Sep 29, 2026
Merged

MaxGhenis merged 5 commits into
masterfrom
max/prediction-grade-2025-20260917

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Sep 17, 2026 •

Copy link
Copy Markdown
Contributor

What this adds

  • data/predictions/2025-spm-poverty-rates-2026-09-11.grade-2026-09-17.json: a dated grade of the September 11 prediction against P60-290 (Table 4 printed values and margins, Table 5 rates to two decimals). The registered file is unchanged; its checksum still verifies.
  • analysis/prediction-grade-2025/: the code and results that take the misses apart, with a README.
  • A paragraph in the top-level README that reports the outcome.

Results

Group Registered change Census change Miss
All people +0.22 +0.07 +0.15
Under 18 +0.86 −0.06 +0.92
65 and over −0.52 +0.24 −0.76

Census marks none of the three changes as statistically different from zero at the 90 percent level.

Model change = threshold effect + resource effect, against the same split on the 2026 CPS ASEC file (from #8):

Group Model Census
All people +0.22 = +0.70 − 0.49 +0.07 = +0.80 − 0.73
Under 18 +0.86 = +1.40 − 0.54 −0.06 = +1.09 − 1.15
65 and over −0.52 = +0.27 − 0.79 +0.24 = +0.71 − 0.47

The rerun on policyengine-us 2.2.1 reproduces the registered changes to within 0.000001 points, so the amendment rule in the registered file is not triggered.

Checks

  • python scripts/check_paper.py passes; python -m unittest discover -s tests passes (42 tests).
  • decompose.py, near_line_growth.py, senior_deduction.py and raw_aging.py were rerun from the saved arrays and the 2025 ASEC file; outputs match the committed results. The six population runs were not repeated for this PR; their per-run metadata is committed.

Uprating by source (added 2026-09-28)

analysis/prediction-grade-2025/uprating/ traces the misses to per-record growth rates. Social Security grows 8.3% per record, pensions 19.5% and self-employment −5.8% (CBO aggregates), against about 4.0%, 3.7% and +8.7% per recipient in the CPS ASEC. Rerunning 2025 with other rates, as the change from 2024 in points (Census: +0.07 / −0.06 / +0.24):

2025 run All Under 18 65+
Registered +0.22 +0.86 −0.52
Social Security, pensions and self-employment changed, Social Security at the COLA +0.25 +0.57 +0.15
Same, Social Security at the survey's 4.04% +0.17 +0.53 −0.02
Wages by wage decile +0.24 +0.85 −0.52
Wages by decile of family resources (schedule within sampling error) +0.09 +0.71 −0.59

Twelve population runs on policyengine 6.0.0; scripts, per-run metadata, per-variant threshold/resource splits and survey comparisons are committed. Three independent Opus review rounds checked the mechanism claims against the installed code and every number against the result files; the round-3 verdict was a pass. The drift check and 42 tests pass.

Merge order

The blog post that links these files (PolicyEngine/policyengine-app-v2#1214) points at master paths, so this PR should merge before that post publishes. The README here links analysis/asec-2026-anchored-thresholds, which arrives with #8.

🤖 Generated with Claude Code

Add a dated grade record beside the registered September 11 prediction
(the registered file is unchanged), and the analysis that separates each
miss into a threshold effect and a resource effect: three population runs
with thresholds held at 2024 plus CPI-U, the senior-deduction
counterfactual, resource growth near the line, and a raw 2025 CPS ASEC
aging check. A rerun on policyengine-us 2.2.1 reproduces the registered
changes, so no amendment is needed.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
MaxGhenis and others added 4 commits September 28, 2026 15:31
…ions and self-employment

Adds analysis/prediction-grade-2025/uprating: a per-source split of near-line
resource growth, six 2025 reruns that replace one growth rate at a time, and
CPS ASEC 2025-vs-2026 comparisons of per-recipient and per-decile growth.

Social Security (+8.3% per record) and pensions (+19.5%) grow at aggregate
rates, and self-employment falls with CBO business income (-5.8%). Replacing
them moves the modeled changes from +0.22/+0.86/-0.52 to +0.25/+0.57/+0.15
(Census +0.07/-0.06/+0.24). Wage growth by wage decile changes nothing.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ix survey claims

After an independent review:
- add wages_by_family_decile, all_three_cpi_avg, all_three_ss_survey and all_four
- split_variants.py splits each variant's change into threshold and resource
  effects on the variant run itself; the child threshold gap in the baseline
  comes mostly from the self-employment uprating
- survey: age-adjusted Social Security per recipient (3.45%), population-control
  caveat, self-employment definitions, family-income wage deciles, and the
  noncitizen composition shift
- README: label the Social Security series as its parameter file does, CPI-U
  annual average, significance caveat

All four changes give +0.10/+0.42/+0.06 against Census +0.07/-0.06/+0.24.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Social Security at the survey's 4.04% for recipients 66 and over
  (all_three_ss_66plus); senior resources then match the survey and the
  remaining senior gap is on the threshold side
- household-bootstrap standard errors for wage growth by decile of family
  resources: the bottom decile's excess (1.8 points, SE 2.1) is within
  sampling error, so the family-income schedule is reported as a sensitivity
- READMEs: lead with the three source changes (child miss down about a
  third, senior miss 0.76 to 0.09-0.26), state that the threshold/resource
  split is order-dependent, and keep the nonresponse caveat

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…orted clause)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis
MaxGhenis merged commit 22d8b7a into master Sep 29, 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