PolicyEngine / PolicyEngine/microcosm-dynamics
Replication anchors: DYNASIM-scored reforms and the minimum model surface for each
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 1
- Forks
- 1
- Avg merge
- 1h 46m
- Merged PRs (30d)
- 28
Description
Replication anchors: DYNASIM-scored reforms and the minimum model surface for each
The gate-1 program certified an earnings-history generator; the reform-delta diagnostic (#72) showed it reproduces aggregate reform incidence within noise on formula-side reforms. The natural next question is external: can this stack replicate reform analyses that DYNASIM has published? This issue catalogs the published anchors (every number transcribed from a fetched Urban Institute PDF, 2026-07-07), maps each provision to the minimum model components it needs, and proposes the phased build. It is a design issue, not a registration; each phase would lock its own pre-registered gate before its first scored run, exactly as gate 1 did.
The anchor shortlist (ranked by table quality × definition precision × model surface)
| Rank | Anchor | What it gives us | Surface needed |
|---|---|---|---|
| 1 | Mermin (2005), "Benefit Reductions" (Urban 411260, DYNASIM3 run 432) | Single provisions — price indexing, progressive price indexing (30th-pctile bend), COLA −0.4pp, NRA→70 — each with clean %-of-scheduled-benefit-by-quintile tables (retirees 62–67 and 80–85, 2050) plus exact 75-yr payroll effects | earnings + formula + claiming (+ mortality for 80–85 rows) |
| 2 | Smith/Johnson/Favreault (2020), "Five Democratic Approaches" (103050, DYNASIM4 ID980, 2019 TR) | Appendix tables A.1–A.5 isolate every provision's actuarial-balance cost — a per-provision Rosetta stone (e.g. $250k donut cap +2.05, CPI-E −0.37, 125%-FPL minimum −1.00, caregiver credit −0.12 to −0.51, 75% survivor −0.12, all % of payroll); Table 15 gives each provision's bottom-quintile share | full projection for levels; patterns decomposable |
| 3 | Johnson & Smith (2020), Larson vs Johnson (103288, ID980) | Median 2065 benefit by 20+ subgroups for two complete named bills (Social Security 2100; Johnson 2016), clean text table; the scheduled-vs-payable baseline discipline | full package |
| 4 | Steuerle & Smith (2021), "First Things First" (103768) | Minimum benefit → aged-poverty step-by-step: current-law scheduled 9.1% / payable 15.2% → poverty-level minimum 1.5% → all six steps 0.4% (2065); cost = +43% of the 2.59%-of-payroll deficit | earnings + formula + minimum + household income |
| 5 | Favreault & Steuerle (2007), spouse/survivor packages (311436, run 440v2) | The only clean marriage/survivor anchor: earnings-sharing and survivor variants with winners/losers by sex × marital status and 2049 poverty by group | marriage/survivorship + differential mortality |
| 6 | Smith (2015), "Can SS Be Solvent?" (72196) | Exact solvency-year deltas: cap to $150k +1yr, elimination +21yr, payroll +1pp +5yr, +2pp +18yr, FRA→72 <1yr | revenue + projection (aggregates only) |
Cross-model triangulation: SSA OCACT single-provision scores (ssa.gov/oact/solvency/provisions, HTML tables per run) and bill memos (Social Security 2100 baseline −2.84% payroll under the 2018 TR), and SSA MINT Policy Brief 2009-01 on taxable-maximum distributional effects. SSA pages 403 on programmatic fetch; verify manually before publication.
Component requirements per provision
Components: EH earnings histories (certified, gate 1) · SF statutory PIA formula (pinned oracle, cross-validated) · CA claiming ages · M differential mortality · MS marriage/survivorship · FC fertility/caregiving · DI disability · REV payroll/revenue side · LR long-run projection under Trustees assumptions.
| Provision | EH | SF | CA | M | MS | FC | DI | REV | LR |
|---|---|---|---|---|---|---|---|---|---|
| Taxable max (benefit side) | ✓ | ✓ | ✓ | ✓ | |||||
| Payroll rate | ✓ | ✓ | ✓ | ||||||
| COLA changes (incl. CPI-E) | ✓ | ✓ | ✓ | ✓ | ✓ | ||||
| Price / progressive price indexing | ✓ | ✓ | (✓) | ✓ | |||||
| FRA / ERA increases | ✓ | ✓ | ✓ | ✓ | ✓ | ||||
| Minimum benefits | ✓ | ✓ | ✓ | (✓) | (✓) | ✓ | ✓ | ||
| Bend points / PIA factors | ✓ | ✓ | ✓ | ||||||
| Survivor 75% / spousal / earnings sharing | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||
| Caregiver credits | ✓ | ✓ | ✓ | (✓) | ✓ | ||||
| Long-term-beneficiary bonus | ✓ | ✓ | ✓ | ✓ | |||||
| Full packages (SS 2100, Johnson, BPC) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
(✓) = needed only for poverty/household or subgroup rows, not the core benefit calculation.
Data already staged for the demographic components
All on disk at ~/PolicyEngine/psid-data, label-verified: mh85_23 (marriage histories), cah85_23 (childbirth/adoption histories), MX23REL (person-relationship map), death years in ind2023er — exactly the holdout basis gates.yaml gate 2 already names. External estimation/validation sources: SSA cohort life tables (differential mortality), Statistical Supplement claim-age distributions (claiming), Trustees intermediate assumptions (projection).
Proposed phases (each behind its own pre-registered gate)
- Phase A — formula mechanics on observed careers (buildable now). Replicate the incidence structure of anchor 1's PI/PPI tables (%-of-scheduled by quintile) and OCACT-style single-provision patterns on completed PSID careers, with the population-concept delta (observed cohorts vs DYNASIM's 2050 retirees) documented rather than hidden.
- Phase B — claiming + differential mortality. Unlocks the COLA rows, NRA→70, the 80–85 age rows, long-term bonus. Gate: mortality hazards vs SSA cohort life tables + PSID deaths; claim-age distribution vs the Statistical Supplement.
- Phase C — marriage/survivorship (gate 2 proper). Unlocks anchor 5 (the survivor/earnings-sharing winners/losers tables) — DYNASIM's signature territory. Holdouts: the staged mh85_23/MX23REL files.
- Phase D — fertility/caregiving. Unlocks caregiver credits (anchor 2's most progressive provision: 52–62% of gains to the bottom lifetime-earnings fifth).
- Phase E — projection + revenue. Trustees-assumption projection and payroll side; unlocks the actuarial-balance Rosetta stone (anchor 2's A-tables) and full-package scores.
Protocol notes for any replication run
- Baseline convention matters: DYNASIM tables use two current-law baselines — scheduled (full formula) and payable (post-exhaustion cut). Every replication must state which denominator it matches.
- Replication targets are incidence patterns with documented assumption deltas, not point-forecast matching — per the paper's domains-of-validity doctrine (different Trustees vintages, base data, and behavioral assumptions are named deviations, not failures).
- Anchors are PDF tables (no machine-readable versions exist); transcriptions above were made from
pdftotextoutput of the fetched PDFs and should be re-verified against the PDFs when a phase registers its gate.
Full per-provision catalog with transcribed table rows available on request (research pass 2026-07-07); source PDFs archived locally.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reading gates.yaml, especially the gate 2 holdout basis, and review the staged files under ~/PolicyEngine/psid-data. The issue defines a multi-phase replication program rather than a bounded change, so a contributor would need to select and scope one phase before implementation. Done would require a registered gate and documented comparison against the named DYNASIM anchor.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- data-engineering
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100