Populace · planning document · 2026-07-14

Employer–firm relationships in Populace

A US-first plan for attaching job spells with employer attributes to the Populace dynamic person panel, following the ECPS recipe (impute from panel data → calibrate to administrative aggregates) and the populace-dynamics evaluation discipline (pre-registered gates, noise floors, one-shot candidate runs).

Why

What this unlocks

Firm-size-keyed policy

ESI/ACA employer mandates, state paid-leave and retirement-mandate thresholds, small-business exemptions — all keyed to employer size, which the CPS person record alone can't drive dynamically.

Labor-market dynamics

Separations, job-to-job moves, and tenure become modeled transitions, so earnings trajectories inherit realistic employer-attachment persistence instead of purely statistical noise.

Incidence & pass-through

A firm side (industry × size × geography) is the hook for minimum-wage incidence, payroll-tax pass-through, and eventually coworker/firm spillovers.

Architecture — how it plays with populace-dynamics

Workstream A — Daphne · person side (spells & transitions) Workstream B — Vahid · firm side (targets & calibration) Shared / interface SIPP job-level panel job IDs, tenure, industry, establishment size (not firm) CPS ASEC + tenure supp. NOEMP: the true firm-size label; host cross-section PSID · NLSY long-horizon tenure labels SUSB · BDS · CBP · SynLBD firm-type margins & dynamics QWI · J2J · JOLTS · BED flow & earnings aggregates microimpute (QRF) job spells + employer attributes onto CPS persons; spell transition hazards (phase 1) firm-type register (BLM) discrete firm types: industry × size class × state, to SUSB/BDS margins (phase 2: types, not IDs) match layer (interface) job-spell schema = the contract: A emits spells with attributes, B assigns firm types + calibrates to QWI/J2J (disjoint from gates) dynamics harness PanelView windows, E1–E12 battery, pre-registered gates, noise floors first PolicyEngine-US employer-keyed rules (ESI, mandates)

Same shape as the earnings pipeline: SIPP plays the role PSID plays for earnings (the label panel that trains and scores transitions), QWI/BDS play the role SSA aggregates play (calibration targets). No new evaluation machinery — job-spell views slot into the existing harness/ PanelView + moment battery, and every scored model goes through candidate registration and a one-shot run, like the US earnings candidates.

US open-data landscape

SourceWhat it gives usRoleCaveats
SIPP (2014+ panels)Monthly job-level records: within-panel job IDs (EJB(n)_JOBID, dependent-interview-edited), start/end dates, industry, location/establishment size (EJB1_EMPSIZE — the redesign dropped the all-locations question), earnings per job, up to 7 jobsPrimary label panel — trains job-spell transitions and provides the holdout for gate scoringIDs don't link across panels; seam effects; heterogeneous 1–4-year windows post-2018 (2018 panel is wave-1 only); measures establishment size, not firm size
CPS (ASEC + tenure supplement)Industry, class of worker, firm size at all locations (NOEMP/IPUMS FIRMSIZE — the only worker-reported firm-size label available), job tenure (biennial supplement)Cross-sectional base the spells are imputed onto (the ECPS host); primary firm-size training labelWorker-reported; no employer ID; tenure only biennial; size bands changed 2011–2018 vs 2019+ — pooled years must harmonize
LEHD QWI & J2JHires, separations, job-to-job flow rates by industry × firm size/age × geography × sex × ageCalibration targets for the match layer (microcalibrate)Aggregates only — microdata is restricted; dimensions are pairwise-restricted (firm size XOR firm age; one demographic pair at a time; sub-sector industry × size at state level only; private ownership only); publishes mean earnings, never medians; extra release lag on size/age tabs; state coverage gaps
SUSB / BDSFirm and establishment counts, employment by firm-size class × industry × state; firm entry/exit (BDS)Margins for the synthetic firm register; firm birth/death rates for phase 2Firm ≠ establishment distinction needs care; size classes are banded
QCEWQuarterly employment and wages by county × industryGeographic/industry employment marginsNo firm-size dimension at fine geography
PSIDEmployer tenure, job-change indicators over 50+ yearsLong-horizon validation (does simulated tenure accumulate realistically over decades?)Person-level only; biennial after 1997; tenure series has wording/bracket breaks — needs a harmonized series
JOLTS · BED · NLSY · CBP · SynLBD (added in review round 1)JOLTS: monthly hires/quits/layoffs by industry & establishment size. BED: quarterly job gains/losses by firm size. NLSY79/97: decades-long panels with true within-panel employer IDs. CBP: establishment size × county. SynLBD: public synthetic establishment panel with realistic firm dynamicsExternal cross-checks on flow rates (JOLTS/BED), long-horizon employer-attachment labels (NLSY), fine-geography register margins (CBP), phase-2 firm-dynamics shapes (SynLBD)JOLTS/BED are establishment-based; NLSY cohorts aren't population-representative; SynLBD is itself synthetic — shapes, not truth

The key constraint: the true matched employer–employee microdata (LEHD) is restricted. So we never observe a real firm's roster — we construct one that is consistent with every published margin. That's the same epistemic position ECPS is in with tax records, and the same answer applies: calibrate hard, validate against every aggregate that exists.

Phasing

PHASE 0 · static

Employer attributes as person covariates

  • Impute industry, firm-size class, tenure onto CPS persons (QRF from SIPP/ASEC)
  • Calibrate employment-by-firm-size × industry to SUSB
  • Enough for firm-size-threshold policy in PolicyEngine-US, cross-sectionally
PHASE 1 · dynamic

Job-spell transitions

  • Hazard-style transitions: separation, hire from nonemployment, job-to-job, size/industry of destination
  • Trained on SIPP, scored in the harness against holdout SIPP windows
  • Calibrated to QWI/J2J flow rates by age × sex × industry
PHASE 2 · two-sided

Firm-type register (BLM-style)

  • Model firm types (Bonhomme–Lamadon–Manresa discretization), not firm identities — margins can identify types; rosters are unidentified
  • Assignment mechanism must be named and gated: E12 targets the moments random assignment would get wrong (AKM variance shares, coworker correlation); firm entry/exit vs BDS, dynamics shapes from SynLBD
  • Go/no-go requires phase-1 gates and the E12 identification story; absent that, claims scope down to firm-size-keyed policy only — no coworker/spillover claims. Nobody has published a credible synthetic matched US employer-employee file; this would be first, and the paper must say so

Evaluation criteria (gate-style, to be pre-registered before any model run)

Mirrors gates.yaml discipline: person-disjoint 20% holdout, paired splits across candidates, half-vs-half noise floors on SIPP, thresholds locked before the first run, amendments public. Proposed battery:

#Moment / viewReferencePass criterion (to lock)
E1Employment share by firm-size class × major industry (cross-section)SUSBwithin ±5% relative on every cell ≥1% of employment
E2Separation, hire, and J2J rates by age band × sexLEHD J2Jwithin noise floor × margin on each rate
E3Tenure distribution by age band (P25/P50/P75)CPS tenure supplementquantile error vs floor
E42-window employer-retention persistence (PanelView pairs, window 2) — does a person keep the same employer attributes next period?SIPP holdoutgeometry blocks vs half-vs-half floor
E5Multi-window attachment runs (window ≥3) — catches chained-model persistence understatement, the exact failure the earnings runs view exists forSIPP holdoutruns-view geometry vs floor
E6Industry mobility matrix (origin × destination major industry)SIPP holdout + J2Jrow-wise distance vs floor
E7Earnings-by-firm-size gradient (mean monthly earnings across full firm-size × industry cells — QWI publishes means, not medians)QWI earnings (EarnS)cell-wise error vs floor (skew-sensitive; floor first)
E8Nonemployment spell durations (zero-spell battery, reused from moments.zero_spells)SIPP holdoutexisting zero-spell criterion
E9Earnings-change distribution conditional on transition type (stay / job-to-job / exit / entry) — the layering-coherence gate: does a simulated J2J move produce a realistic earnings change?SIPP holdoutdistributional distance vs floor, per transition type
E10Regression gate: the existing PSID earnings gates must still pass after the spell layer is attached — the employer extension may not silently degrade the ratified earnings modelexisting gates.yaml viewsunchanged pass on locked thresholds
E11Job-to-job flows by origin × destination firm-size class (the size ladder — first-order for minimum-wage incidence)LEHD J2JODrow-wise distance vs floor
E12 (phase 2 only)Within-firm vs between-firm earnings variance decomposition + coworker-earnings correlation — the moments that would be wrong under random worker-to-firm assignment; plus firm growth-rate distribution and job creation/destruction vs BDSpublished bias-corrected AKM/segregation estimates (Song et al.; KSS); BDSvariance shares within published CIs; BDS reallocation rates vs floor

noise floors firstthresholds locked pre-runcandidates registered on issue #42 patternone-shot runs, committed artifacts in runs/

Two pre-lock protocol rules (review round 1)

Risks & open questions

SIPP seam bias

Transitions bunch at interview seams. Mitigation: estimate at wave frequency, treat within-wave months as interpolation; document in the floor-building run.

No public matched microdata

Firm rosters are synthetic by construction. We can validate every margin but never a real roster; phase-2 claims must be framed accordingly in the paper.

Firm size measurement — decide what the variable means

SIPP measures establishment size; CPS ASEC measures firm size, worker-reported; SUSB is administrative enterprise size. Band reconciliation isn't enough: pre-register whether the imputed variable means administrative firm size (SUSB-coherent, but survey labels are error-laden training targets) or reported size (then SUSB is the wrong E1 reference). Multi-job holders (~5% of workers) also break one-person-one-firm accounting — decide primary-job-only in phase 0 and adjust job-count vs person-count targets.

Interaction with earnings gates

Job spells and earnings trajectories must stay coherent (a J2J move should move earnings). Proposal: earnings conditional on spell events (the MINT/PENSIM layering precedent) — but coherence is gated by E9 (earnings-change by transition type) and E10 (existing PSID gates must not regress), not by a cross-sectional gradient. The conditioning DAG across phases must be specified: phase 0 imputes tenure from covariates including earnings, so the ordering is circular as drafted.

Short label windows vs long-horizon claims

SIPP identifies hazards over ≤4 years and IDs don't cross panels; no E-item as originally drafted covered decadal tenure accumulation. Add a PSID/NLSY-referenced long-window tenure view (the runs-view machinery generalizes). PENSIM's "no job changes after 50" shortcut is the cautionary tale.

Division of labor — two independent workstreams

Designed so two people can work in parallel with no blocking dependencies: everything meets at three frozen interface contracts, agreed in week 1 and versioned as code.

WORKSTREAM A · PERSON SIDE · DAPHNE

Job spells & transitions

  • Data readers: SIPP job-level reader in data/ (label-verified, family.py pattern); CPS ASEC NOEMP + tenure-supplement loaders; harmonized PSID/NLSY tenure series
  • Imputation: QRF job-spell + employer-attribute imputation onto CPS persons (phase 0); spell transition hazards — separation, hire, J2J, destination attributes (phase 1)
  • Evaluation it owns: SIPP noise floors, E3, E4, E5, E8, E9, E10, long-window tenure view; the seam-vs-J2J reconciliation run
  • Deliverable to B: person panel emitting spells in the frozen spell schema
WORKSTREAM B · FIRM SIDE · VAHID

Targets, register & calibration

  • Target pipeline: fetch/version SUSB, BDS, CBP, QWI, J2J, JOLTS, BED extracts as committed reference tables (like data/external/ in the UK work), each with a provenance note
  • Register: canonical firm-size banding decision; BLM firm-type register drawn to SUSB/BDS margins; firm entry/exit dynamics from BDS/SynLBD (phase 2)
  • Calibration: microcalibrate spell-carrying persons to the QWI/J2J target cells; owns the target/gate partition registration
  • Evaluation it owns: E1, E2, E6, E7, E11, E12; aggregate-side floor studies
INTERFACE CONTRACTS — frozen week 1, changed only by joint PR

Sync points: week 1 (freeze C1/C2), week 4 (lock C3), week 10 (joint phase-2 go/no-go with Max). Everything else is asynchronous — A can build readers/imputation against fixture spells; B can build the target pipeline and register against a synthetic spell file conforming to C1.

Precedents — what similar projects did

ModelEmployer representationLesson for this plan
PENSIM (DOL/PSG)Full job histories (start/stop, industry, firm size per job) from SIPP-estimated tenure models; no firm register — employers are attribute bundles on spellsPhases 0–1 are essentially PENSIM with a modern imputation stack plus pre-registration — proven territory. Its "no job changes after 50" shortcut shows what a too-short label panel forces
MINT (SSA)Imports PENSIM job-change sequences, attaches to administrative earnings historiesThe conditional-layering precedent — but MINT's earnings are administrative, so coherence is anchored; here earnings are modeled too, making E9/E10 load-bearing
DYNASIM4 (Urban) & CBOLT (CBO)Job-change probabilities and industry/pension coverage as person-level states; no firms40 years of US dynamic microsimulation never needed a firm register for benefit-rules work — firm-size-as-covariate suffices for threshold policies
Census SIPP Synthetic BetaSynthetic person records from linked SIPP–IRS–SSA; never released person-firm linksIts validation study found margin-matching did not deliver joint-distribution validity — the direct empirical warning behind E12
Census SynLBDFully synthetic establishment panel with realistic growth/entry/exit; no workers in itA synthetic firm register with credible dynamics is feasible; borrow its distributional shapes for phase 2. No one has published the matched worker-firm version
AKM / BLM literatureMeasurement theory: firm effects, worker-firm sorting, firm-class discretizationModel firm types (BLM), not identities; target bias-corrected (KSS) variance shares — raw AKM estimates carry limited-mobility bias
MOSART (Norway) · Destinie (France)MOSART: real register links. Destinie: sector-as-covariate, no employersEmployer realism exists where the data has links, not because anyone solved synthesis. Note: the UK follow-on is easier for phase 2 (ASHE is employer-sampled; IDBR margins are rich)

Milestones

Workstream A — Daphne (person side)Workstream B — Vahid (firm side)
SIPP job-level reader (label-verified, family.py pattern); CPS NOEMP/tenure loaders; ADR drafted jointly · freeze C1/C2Target pipeline: SUSB/BDS/QWI/J2J/JOLTS extracts committed with provenance notes; canonical banding proposal (C2)
SIPP noise-floor runs; seam-vs-J2J reconciliation run; draft E3–E5/E8–E10 thresholdsAggregate-side floor studies; target/gate partition; draft E1/E2/E6/E7/E11 thresholds · joint: referee round, lock C3
Phase-0 QRF imputation of spells + attributes onto CPSCalibration of the imputed file to partitioned QWI/SUSB cells; E1/E7 evidence artifacts
Phase-1 transition candidates registered; one-shot runs against locked gatesBLM firm-type register prototype; E12 feasibility study (are published AKM/coworker moments sufficient targets?)
Joint: phase-2 go/no-go review with Max, based on committed gate evidence + the E12 identification story