Skip to content

Medicaid category-level enrollment significantly off: expansion 2x too high, disabled/pregnant undercounted #557

@baogorek

Description

@baogorek

Summary

@daphnehanse11 analyzed the impact of Utah HB 15 (Medicaid expansion repeal) and uncovered multiple data and model issues that significantly affect Medicaid category-level accuracy. The model produces ~172k expansion adults in Utah vs ~83k in admin data — more than 2x the actual figure — while disabled and pregnant categories are severely undercounted or missing entirely.

These findings are related to #555, which independently identified inflated income aggregates from the same calibration pipeline. Both issues share an underlying theme: the calibration-produced income distribution is inaccurate, and the calibration lacks sufficient program-level constraints.

Model vs Admin Data: Utah Medicaid Enrollment by Category

Category Model Estimate MACPAC Admin Data Difference
Children ~215k 233k -8%
Expansion Adults ~172k 83k +107%
Other Adults ~7k 46k -85%
Disabled ~14k 49k -71%
Aged ~19k 26k -27%

Issue 1: Income distribution — too many adults below 138% FPL

The core driver of the expansion overcount. The calibration pipeline only targets total Medicaid enrollment at the state level; no category-level targets exist to constrain the expansion vs non-expansion split. Because the calibrated income distribution places too many adults below 138% FPL, the model overassigns people to the expansion category.

This is directly related to #555, where the same calibration pipeline was found to produce distorted income distributions (inflated aggregates).

Issue 2: Disabled adult undercount

  • Model: ~14k disabled Medicaid enrollees in Utah
  • MACPAC admin: 49k

The only pathway into is_ssi_disabled_for_medicaid is ssi > 0 via is_ssi_recipient_for_medicaid. This misses:

  • Medically needy disabled individuals
  • Section 1619(b) participants (working disabled who retain Medicaid)
  • State-specific disability categories

Only ~12.5k non-senior adults have SSI in the Utah dataset, creating a hard ceiling well below the actual disabled Medicaid population.

Issue 3: Zero pregnancy data

is_pregnant is False for every person in both national and state-level datasets. The CPS does not collect pregnancy status, and it is not imputed in the data pipeline.

This affects 57 files in policyengine-us spanning Medicaid, CHIP, WIC, SNAP, TANF, and Early Head Start eligibility logic. Pregnant women either fall into the ADULT expansion category (if income-eligible) or don't qualify at all, rather than receiving the higher income thresholds and categorical eligibility that pregnancy confers.

Issue 4: Zero monthly_hours_worked

monthly_hours_worked is always zero despite people having positive employment income. Weekly hours are computed from CPS data but never converted to monthly.

This silently activates the OBBBA Medicaid work requirements (effective 2027), which filter out adults working fewer than 80 hours/month. With monthly_hours_worked = 0 for everyone, the work requirement removes ~145k expansion adults — a massive and incorrect reduction.

Issue 5: How the original ~84k estimate was accidentally "right"

Before PR PolicyEngine/policyengine-us#7272 fixed the medicaid_category ordering bug, the model's expansion count was artificially inflated by the category priority logic. That inflation was partially offset by the work requirements filtering (Issue 4), and the two errors approximately cancelled out, landing near the ~83k admin figure by coincidence. After fixing #7272 without simultaneously addressing the work requirements bug, the expansion count jumped to ~172k.

Next Steps

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions