Skip to content

Impute is_pregnant in CPS using CDC birth rates + add calibration targets #563

@daphnehanse11

Description

@daphnehanse11

Problem

is_pregnant is a pure input variable in policyengine-us with no formula and no data in any CPS dataset. This means zero people are pregnant in microsimulations, breaking:

  • Medicaid pregnancy category enrollment
  • WIC pregnancy eligibility and household size
  • CHIP (standard + FCEP pathways)
  • SNAP ABAWD exemptions
  • Medicaid work requirement exemptions
  • State TANF programs (MT, IL, DC, CO, MA, AK, WI)
  • Various state Medicaid programs (CA immigration exemption, CO OmniSalud, etc.)

The CPS does not ask about current pregnancy status. A previous attempt (#164) used negative ages on newborns but was intentionally reverted (#168) because it created phantom household members affecting SNAP and filing status.

Approach

Step 1: Stochastic assignment in cps.py

  • In add_takeup(), use CDC WONDER age-specific birth rates to probabilistically assign is_pregnant = True to women aged 15-44
  • Formula: P(pregnant | age) = (birth_rate / 1000) * (39/52) where 39/52 accounts for 9-month pregnancy duration within a year
  • Use seeded_rng("is_pregnant") for reproducibility
  • Store rates in parameters/take_up/pregnancy.yaml with state-level rates

Step 2: Calibration target via ETL

  • Create etl_pregnancy.py following etl_medicaid.py pattern
  • Target: person_count with is_pregnant == True constraint per state
  • Source: CDC WONDER Natality birth counts by state
  • Register "CDC WONDER Natality" as valid source in create_field_valid_values.py

Key design decisions

  • Set current_pregnancies on the mother directly — do NOT create additional persons
  • Birth counts are a reasonable proxy (miscarriages/abortions excluded but downstream programs mostly serve women who carry to term)
  • State-level rates only (age-group cross would hit CDC suppression thresholds)

Closes #180, closes #193

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