dynamics / learn

How the model works — and how to check it

microcosm-dynamics is a dynamic microsimulation of Social Security built on the PSID panel. This page explains the machine, the validation discipline around it, and how to read the benchmark wall — then lets you quiz yourself.

Watch it work

A dynamic microsimulation follows people, not averages. Below: a small synthetic cohort moves through time — observed panel history on the left, module-driven simulation on the right of the seam. Earnings ribbons thicken and fade with age; marriages link lines; children start new ones; claiming rings fire between 62 and 70; lines end when mortality fires. Line weight is survey weight — heavier lines stand for more of the population — and the hatched patch is an imputed stretch of history. The strip underneath shows the calibration step: an aggregate of the simulated cohort landing against an external reference — compared, never tuned.

1968
earnings (darker = more) marriage / birth benefit claiming death simulated years imputed gap

Illustrative synthetic cohort — generated for teaching. PSID microdata is restricted and never displayed.

The model

Dynamic microsimulation is the method behind DYNASIM (Urban Institute) and MINT (Social Security Administration): start from real people's longitudinal records, age each person forward through estimated transition models — work, marriage, children, disability, death, benefit claiming — then run program rules over the projected lifepaths and add them up. It's how you answer questions that cross decades and generations: who gains from a benefit formula change in 2050, and what it does to payroll revenue on the way there.

microcosm-dynamics builds on the Panel Study of Income Dynamics — the longest-running household panel in the world, following the same families since 1968. The choice trades the administrative earnings precision of MINT's matched frame for something the field has never had: a Social Security microsimulation whose data, code, and validation record are fully public and reproducible end to end.

The pipeline

Inside the annual loop

Each projection year runs the modules in a fixed order, and each module reads only the prior year's panel plus the current-year state already resolved above it — the order is a directed acyclic graph, not a convention:

  1. Mortality. Death draws from hazards that anchor NCHS period life tables and apply differentials estimated from the PSID's own 1968–2023 death file, by age band and sex. Decedents leave the risk set before anything else happens that year.
  2. Aging. Ages advance; indexing series and the wage base roll forward.
  3. Marriage — one core. A single certified hazard state machine covers first marriage, divorce, remarriage, and widowhood, plus the spousal age gap. A gated modifier reweights who marries first by career-earnings tercile without changing how many marry. Every downstream module reads this one marital state; nothing re-simulates it.
  4. Fertility. Births draw from the fertility component; paternal attribution reads the married state; new children enter the panel as people.
  5. Disability. A forward Markov model over the PSID's self-reported work-limitation panel — incidence and recovery by age band and sex — with the statutory DI-to-retirement conversion applied at full retirement age.
  6. Earnings. A chained quantile-regression-forest generator: each year's draw conditions on age and a person-level permanent component, with ranks mapped to dollars through a wage-indexed age profile. Fitted only on data through 2014 — the leakage cutoff the holdout gate enforces.
  7. Claiming. Claim ages draw from the SSA Statistical Supplement's observed claim-age distribution by sex and entitlement year, vintage-frozen to the cutoff. Calibrated, not behavioral — it reproduces current-law claiming patterns; a behavioral claiming model is on the roadmap.
  8. Household composition. A reconciliation pass — cohabitation, parental-home exits, multigenerational households, household size — consuming the marital state read-only.

Every random draw comes from a per-(draw, module, year, person) stream registry, so a run reproduces exactly and no module can perturb another's randomness.

Weights, imputation, and calibration

No survey arrives ready. Three standard repairs make a panel usable, and the visualization above encodes the first two:

How the panel and the cross-section fit together

Two datasets, two jobs. The panel knows how lives change; the cross-section knows who the country is. The projection needs both, and they meet at exactly one seam:

The panel — microcosm-dynamics

PSID: the same families, 1968–2023. Supplies transitions — the estimated modules of the annual loop (mortality, marriage, disability, earnings, claiming), each certified on a temporal holdout.

Knows how lives change. Its sample is small and its weights are survey weights.

The cross-section — microcosm

Calibrated national microdata (CPS frame). Reweighted to administrative totals, with imputations for what surveys never ask.

Knows who the country is in one year — but not what happens to anyone next year.

↘  ↙
The seam — transport, period 0

The panel-estimated generators are deployed onto the pinned national frame — 166,302 people in 57,240 households, hash-pinned. Each frame adult gets a seeded entry state (marital, disability, earnings position), and where the policy rules need a career — AIME needs 35 years of earnings — a synthetic history is transported: one persistent earnings rank drawn per person and threaded through the certified age-indexed quantile maps, so a 55-year-old at the 80th percentile has been near the 80th percentile their whole career. A dedicated pre-registered gate scored whether the transported states and histories reproduce the right joint distributions on the new frame, separately from whether the dynamics are right.

Projection — transitions only, no annual re-calibration

The annual loop runs forward on the national frame, year over year → a projected national panel → the policy layer computes benefits and payroll revenue over the projected lifepaths. Calibration happens once, at the seam: weights carry forward under a pinned rule, deaths remove people, births add them, and no year is re-aligned to external demographic or economic totals. (DYNASIM and MINT align projected aggregates to the Trustees' assumptions year by year; here annual levels stay free so validating against those series means something.)

(one-way)
Benchmark wall — validation only

Levels and shares are compared against SSA, Trustees, CBO, DYNASIM, and MINT. Nothing flows back: the model never calibrates to the benchmarks it is judged against.

The division of labor in one line: the panel supplies transitions, the calibrated cross-section supplies representativeness. The first estimates published so far are survey-frame — scored on the panel's own held-out years, isolating the dynamics from transport error; the transport seam is how the same machinery produces national-frame estimates, and it carries its own gate so error can't hide between the two.

How the engine earned certification

The projection engine's gate is the clearest picture of the whole method. The loop:

That loop — gate first, blind scoring, published failures, diagnosed causes, amended designs — is the general recipe here, and it's what makes the passing result mean something.

The discipline

The defining commitment is that generation is cheap and verification carries the weight. Three mechanisms:

Reading the wall

The benchmark wall registers every quantity the model shares with an external source — SSA administrative data, the Trustees, CBO, DYNASIM, MINT — and shows the comparison, including the misses. Two laws govern it:

Validation-only. Benchmark rows are never tuning targets. Nothing in estimation reads them, and expected values come from independent references — so agreement means something, and divergence gets explained rather than optimized away.

No unexplained gaps. Every divergence carries a classification and a written explanation. A gap without one fails the build.

Results so far

Claiming-age shares (NRA-to-70) vs published DYNASIM3 resultswithin ±0.4pp, all quintiles
Payroll revenue share vs CBO−1.1% to +0.2%
COLA −0.4pp reform vs external estimate+0.3% to +0.7%
Price-indexing reform±1.6%
Labor-income proxy vs true covered earnings+22% to +34%

The gap census

module_missing 59 unverified_source 20 concept_mismatch 18 label_mismatch 3 frame_no_alignment 1 unexplained 0

Most of the wall's 101 rows are open gaps today — quantities the model doesn't yet compute, each with a written reason. That's deliberate: the wall doubles as the public roadmap, and progress is measured by gaps closing on the record, run over run.

The correction program

The first estimates labeled their earnings input honestly as a labor-income proxy. True FICA-covered earnings — what Social Security actually taxes and credits — differ from labor income by 22–34% in aggregate across the projection. Replacing the proxy properly turned into a research program of its own:

Status — August 4, 2026. The annotation corpus closed today: all 81 instrument documents now carry sealed annotations, each one an adversarial adjudication of machine-generated candidates against the actual page bytes. The unit-authority amendment is in its fifth referee round; in the latest round, two independent reviewers re-derived the classification from the raw PDFs and converged on the same two residual defects. An earlier round struck 209 readings where the pipeline had inferred U.S. dollars from monetary context — descriptions like "hourly earnings" with no currency stated. The contract forbids invented units, so those fields stand as explicitly unit-less rather than carrying an assumed currency.

The corrected series publishes when the whole chain passes its gates — the current forecast is on the ledger, where it will be graded.

Drill

Tap to flip · arrow keys to move

Glossary

Dynamic microsimulation
Project a population person-by-person through estimated transition models, then run policy rules over the simulated lifepaths.
PSID
Panel Study of Income Dynamics — US household panel following the same families since 1968; the model's estimation frame.
DYNASIM
The Urban Institute's dynamic microsimulation, in its fourth generation. Published DYNASIM3 claiming results are the model's closest external comparator.
MINT
Modeling Income in the Near Term — SSA's microsimulation, built on survey records matched to administrative earnings.
Temporal holdout
Certification by fitting on early panel waves and scoring blind on held-out later years, with thresholds locked in advance.
Validation-only
The rule that benchmark comparisons never feed back into estimation — the wall measures the model; it never trains it.
Gap classes
Every benchmark divergence is classified: a missing module, an unverified source, a concept or label mismatch, a frame that can't align — or unexplained, which is required to be zero.
Forecast ledger
Append-only public schedule forecasts with p50/p80 dates, graded at resolution; superseded entries stay on the record.
Covered earnings
Earnings subject to FICA — what Social Security credits and taxes. The correction program replaces the model's labor-income proxy with this concept.