Skip to content

Carry educational attainment as an auxiliary variable (imputation predictor + ACS-calibratable margin) #297

Open

Description

@MaxGhenis

Proposal

Carry educational attainment (ASEC A_HGA, collapsed to a small class set, e.g. the SCF's four edcl classes) on the populace-us support spine as an auxiliary variable: not a rules-engine input, but a conditioning variable for imputation and a calibratable margin.

Why

  1. Imputation quality. Attainment is among the strongest available predictors of income and wealth conditionals. Standard multiple-imputation guidance is to include strong auxiliaries in the imputation model even when no downstream analysis consumes them — the joint quality of the variables we do care about depends on conditioning richness. The imputation-paper experiments (github.com/PolicyEngine/imputation-paper) had to drop education from the SCF↔CPS shared predictor set and its absence visibly weakens the conditional signal; its "populace-scale" experiment adds it back from raw ASEC and measures the effect.
  2. Calibration surface. ACS publishes attainment margins by age and state (S1501), so the variable is not just a predictor: it is a target family for the local-area program, cheap to add to the Ledger lane.
  3. Cost is low. A_HGA ships in every ASEC vintage the spine pools; the mapping to a 4-class attainment variable is a few lines in unit construction.

Scope note

Flag it in provenance as auxiliary (carried for conditioning/calibration, not consumed by rules), so nobody reads its presence as a tax-benefit modeling claim. Related: #253 (tuition expenses) is about a rules input and is orthogonal — this issue is about attainment as a conditioning/calibration variable.

🤖 Generated with Claude Code

Activity

  1. added
    tier:standardSpec'd build/assembly with acceptance tests; suitable for Opus/GPT-class agents
    on Jul 4, 2026
  2. MaxGhenis commented on Sep 30, 2026

    @MaxGhenis
    ContributorAuthor

    This is now a deliverable for the student debt pilot (tracker: PolicyEngine/us-student-debt#1). Appendix A month 1, Project 2: "Add educational attainment to Microcosm and calibrate against Census state totals." Month 3 then computes "state-level degree ROI before/after taxes, transfers, and net of debt payments" for a two-year and a four-year degree. Assigning to David.

    Changes to the proposal above, needed for that use:

    • Classes. The SCF's four edcl classes can't separate an associate's degree from "some college". Keep at least: less than high school, high school diploma or GED, some college with no degree, associate's (occupational and academic together), bachelor's, and graduate or professional. ASEC A_HGA has these codes, and so does ACS SCHL for the ACS-local lane.
    • Readable by the analysis. The ROI work reruns PolicyEngine with counterfactual earnings for each degree-holder, so the attainment column has to sit next to PE outputs for the same person. Either add a policyengine-us input enum (named for its source, e.g. cps_educational_attainment, per the explicit-definition-names rule), or export it as a Microcosm auxiliary column the analysis joins on person id. Pick one and note it here.
    • Calibration. Use state totals from ACS 1-year S1501. The Chronicle package is in PolicyEngine/chronicle#310. Also check the SCF debt imputation (PolicyEngine/microcosm#1073) with attainment as a predictor, since education debt depends heavily on it.
    • Timing. Month 1 ends about 10/21. The client's causal multipliers arrive by the end of month 2 (their obligation; Addendum 1 clause 5). Attainment should be in a build before then.

    Acceptance: the column is in a US build; state totals are compared with S1501 (receipt); the column is flagged in provenance as described above; and there's a short note on which classes the ROI analysis uses.

  3. DTrim99 commented on Oct 22, 2026

    @DTrim99
    Collaborator

    Choice: a Microcosm auxiliary column, not a policyengine-us input. The fiscal-refresh build writes cps_educational_attainment (and the raw A_HGA beside it) on the person table with --cps-educational-attainment; the ROI analysis joins it on person_id. No policyengine-us change is needed, and the stored-input register flags it as auxiliary (US_AUXILIARY_STORED_COLUMNS: carried for conditioning and calibration, not consumed by rules).

    Classes (the seven S1501 population-25+ categories; the first two merge to the six asked for):

    Class ASEC A_HGA ACS SCHL
    less_than_9th_grade 31-34 01-11
    9th_to_12th_grade_no_diploma 35-38 12-15
    high_school_graduate_includes_equivalency 39 16-17
    some_college_no_degree 40 18-19
    associates_degree (occupational + academic) 41-42 20
    bachelors_degree 43 21
    graduate_or_professional_degree 44-46 22-24
    not_in_universe 0 (under 15) blank, or under 15

    Codes checked against the ASEC 2023-2026 public-use data dictionaries (Item 18h) and the 2024 PUMS dictionary. The ROI analysis uses associates_degree (two-year) and bachelors_degree (four-year) against the high_school_graduate_includes_equivalency baseline.

    Draft PR: #1356

  4. added a commit that references this issue on Oct 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

tier:standardSpec'd build/assembly with acceptance tests; suitable for Opus/GPT-class agents

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions