PolicyEngine / PolicyEngine/microcosm
populace_us_2024 under-1 geography: CA carries 21.7% of US infants (~1.9x its population share), MI 1.0% (a third of its share)
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 0
- Forks
- 4
- Avg merge
- 1d 3h
- Merged PRs (30d)
- 94
Description
Found while adjudicating analysis-notebooks#135 (MI under-age-1 reproducer). The state-file undercount that issue reported was fixed upstream (policyengine-us-data 1.115.4-patch promotion re-uploaded states/*.h5 on 2026-05-20; states/MI.h5 now totals 10.12M ≈ Census), but rerunning the reproducer surfaced a different, current defect on the populace side: the default national dataset's under-age-1 population has a badly miscalibrated state distribution.
Artifact
policyengine-us ≥1.78x DEFAULT_DATASET:
hf://datasets/policyengine/populace-us/populace_us_2024.h5@populace-us-2024-c86a631-6e1bcd0271a5-20260619T002242Z
(measured with policyengine-us 1.782.0, 2026-07-23).
Measured (2024 base year)
| State | Total pop (share of US) | Under-1 (share of US under-1) | Share ratio |
|---|---|---|---|
| US | 339,778,816 | 4,022,936 | — |
| CA | 39,305,184 (11.6%) | 874,630 (21.7%) | 1.9x |
| TX | 31,305,984 (9.2%) | 320,918 (8.0%) | 0.87x |
| MI | 10,139,983 (3.0%) | 39,552 (1.0%) | 0.33x |
| NY | 19,884,002 (5.9%) | 316,235 (7.9%) | 1.34x |
| FL | 23,396,240 (6.9%) | 256,417 (6.4%) | 0.93x |
The 2026 layer has identical shares (CA 21.7%, MI 1.0%) — this is the base artifact's geography, not the multi-year projection.
from policyengine_us import Microsimulation
sim = Microsimulation() # default = populace_us_2024 pin above
age = sim.calculate("age", 2024).values
w = sim.calculate("person_weight", 2024).values
sc = sim.calculate("state_code", 2024, map_to="person").values
# w[(age < 1) & (sc == "MI")].sum() -> 39,552 ; sc=="CA" -> 874,630
Why this is wrong
- National total is roughly right: 4.02M under-1 vs 3,596,017 US births in 2023 (NCHS, Births: Final Data for 2023) — +12%, fine at this altitude. The distribution is not.
- Implied crude birth rates: CA 22.3/1,000 vs MI 3.9/1,000 — a 5.7x spread across large states (in-dataset US average 11.8/1,000). Real state fertility differentials are tens of percent, not multiples.
- External anchor for MI: ~104K births/year (MDHHS, receipts in analysis-notebooks#135) vs 39.6K modeled under-1s (−62%).
- Cross-artifact disagreement: the us-data per-state file
states/MI.h5(1.115.4-patch) puts MI under-1 at 61,938 — itself low vs births, but 1.5x the populace national slice for the same state/year.
Downstream
Any under-1/infant-targeted analysis inherits 2–3x state-level errors: baby-bonus and newborn-credit scoring, under-1 poverty on the child-poverty dashboard (its state audit carries pe_pop_under_1 per state), and MT/other newborn provisions. CA-targeted infant analyses run ~2x hot; MI ~3x cold.
Question for the calibration surface
Is single-year age 0 (or any age-by-state cut finer than under-5) in the target surface for populace_us_2024? If under-1 is uncontrolled per state, this is the expected failure mode; a state-level under-1 (or births) target would pin it.
Reproducer notebook: us/poverty/michigan_under_age_1.ipynb in analysis-notebooks (PR link to follow in first comment).
🤖 Generated with Claude Code
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 running the reproducer in us/poverty/michigan_under_age_1.ipynb and comparing the default populace_us_2024 output with the states/MI.h5 artifact. Then trace the DEFAULT_DATASET calibration surface to determine whether age-by-state targets are controlled; done should include an agreed correction or calibration decision for the under-1 state distribution.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- data
- Issue type
- Bug
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Needs clarification
- Newbie friendliness
- 35/100