You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Carry educational attainment as an auxiliary variable (imputation predictor + ACS-calibratable margin) #297
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
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.
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.
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.
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.
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.
Activity
MaxGhenis commentedon Sep 30, 2026
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:
edclclasses 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. ASECA_HGAhas these codes, and so does ACSSCHLfor the ACS-local lane.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.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.
Carry CPS educational attainment as an auxiliary column and bind S150…
Point the #297 runner at the data shard's stored-input tests
Add the #297 receipt and its findings on instrument differences and t…
Quote the merged some-college row's national gap in the #297 receipt
Carry CPS educational attainment as an auxiliary column and bind S150…
Carry CPS educational attainment as an auxiliary column and bind S150…
DTrim99 commentedon Oct 22, 2026
Choice: a Microcosm auxiliary column, not a policyengine-us input. The fiscal-refresh build writes
cps_educational_attainment(and the rawA_HGAbeside it) on the person table with--cps-educational-attainment; the ROI analysis joins it onperson_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):
A_HGASCHLless_than_9th_grade9th_to_12th_grade_no_diplomahigh_school_graduate_includes_equivalencysome_college_no_degreeassociates_degree(occupational + academic)bachelors_degreegraduate_or_professional_degreenot_in_universeCodes 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) andbachelors_degree(four-year) against thehigh_school_graduate_includes_equivalencybaseline.Draft PR: #1356
Record the #297 receipt at the branch head (Modal run 20261022T171517…