PolicyEngine / PolicyEngine/microcosm
Calibrate wages by wage band (SSA net compensation or SOI W-2 statistics)
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 0
- Forks
- 4
- Avg merge
- 1d 3h
- Merged PRs (30d)
- 94
Description
Finding
The FUTA dashboard rerun (futa-wage-base-dashboard#2) computes revenue as Σ weight × min(wage, base) × 0.6%, so it depends on the distribution of wages below a cap rather than on total wages. Comparing the certified national file (populace-us-2024-spm-20260915) with the raw ASEC 2025 file at Census weights, income year 2024:
| Microcosm | Raw ASEC (Census weights) | |
|---|---|---|
| Wage earners | 167.0M | 166.7M |
| Σ min(wage, $7,000) × 0.6% | $6.685B | $6.765B |
| Σ min(wage, $43,000) × 0.6% | $31.78B | $34.74B |
| Total payroll-tax wages | $10.74T | $12.07T |
The $7,000-capped base matches within 1.2%; the $43,000-capped base is 8.5% lower in Microcosm. Wages are calibrated in aggregate (SOI by AGI band, BEA, CBO) but not by wage band per earner.
Contributing mechanism (computed): the 2024-period wage equals the reported wage for every pooled record, including records from income years 2022 and 2023 (sim ÷ raw wage ratio 1.000 at the 10th, 50th and 90th percentiles across all 166,321 persons). asec_pool.py scales weights by year and does not age dollar amounts, so roughly two thirds of the sample carries 2022 or 2023 nominal wages in the 2024 period, and calibration compensates through weights.
Proposal
Bind an administrative wage-band distribution as a fiscal target. Two candidates, both person-level W-2 wages:
- SSA net compensation statistics (all W-2 earners by wage band; the 2023 table is the source of the $43,000 median that defines the reform).
- IRS SOI Form W-2 statistics (wage income by size of wages and earner type): https://www.irs.gov/statistics/soi-tax-stats-individual-information-return-form-w2-statistics
Either gives the min(wage, B) curve at every B. Steps per docs/us-fact-to-target.md: mint the facts in Chronicle, splice the feed, support oracle (every wage earner carries the variable, so support is broad), bind to employment_income_before_lsr or payroll_tax_gross_wages, register, probe, test. Separately decide whether pooled prior-year wages should be aged to the target year before calibration.
FUTA collections should stay a held-out check, not a target: the model's FUTA variable has known mechanical gaps (exempt employers, per-employer caps; see the companion issue), and fitting collections would move weights to absorb them.
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 with docs/us-fact-to-target.md and asec_pool.py, then compare the proposed SSA and IRS SOI W-2 wage-band sources. Trace how facts are minted in Chronicle, spliced into the feed, bound to employment_income_before_lsr or payroll_tax_gross_wages, registered, probed, and tested. Done means a supported wage-band calibration target is covered by tests, with the prior-year wage-aging decision addressed separately.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- data
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100