Skip to content

Clarify simultaneous dollar-and-count calibration vs TRIM caseload-only#33

Open
MaxGhenis wants to merge 2 commits into
masterfrom
clarify-calibration-targets
Open

Clarify simultaneous dollar-and-count calibration vs TRIM caseload-only#33
MaxGhenis wants to merge 2 commits into
masterfrom
clarify-calibration-targets

Conversation

@MaxGhenis

Copy link
Copy Markdown
Contributor

Summary

Tightens three imputation-row descriptions to make the methodological contrast on calibration targets explicit, in response to a question about how TRIM aligns benefit outlays to admin:

  • PE-US: L0 reweighting solves a single constrained optimization with state+national SNAP outlay dollars AND state-level recipient-household counts as simultaneous targets. Same shape for TANF (dollars + unit counts), Medicaid (spending + enrollment counts), and SSI (outlay dollars, with age × SSI counts).
  • TRIM3: caseload counts + benefit-band composition are the primary targets. Total SNAP/TANF outlay dollars are an emergent property of (participation × rule-computed benefit), not solved for directly. SSI is the exception — TRIM3's own SSI docs note alignment to "administrative SSI caseload AND benefits."

PE-US SNAP calibrationTargets list also gains the recipient-household-count entry that was already in policyengine-us-data/calibration/target_config.yaml but wasn't surfaced here.

Test plan

  • 61/61 tests pass; lint & build clean
  • PE-US targets cross-checked against policyengine-us-data/calibration/target_config.yaml
  • TRIM3 SNAP row's framing matches the program documentation at https://boreas.urban.org/documentation/foodstamps/main.php (caseload + composition alignment, not dollar targets)

🤖 Generated with Claude Code

PE-US's L0 reweighting and TRIM3's caseload-driven calibration sound
similar at the surface ("aligned to administrative totals") but differ
on what's actually solved for. The previous YAML wording underplayed
the difference. Tightened three imputation rows:

PE-US SNAP: description now states that L0 simultaneously matches
  state and national SNAP outlay dollars AND state-level SNAP
  recipient-household counts in a single constrained optimization
  pass — total dollars and caseloads are both pinned to admin
  targets, not just one or the other. Calibration-targets list adds
  the previously-implicit recipient-household-count target (it's in
  policyengine-us-data/calibration/target_config.yaml but wasn't
  surfaced here).

TRIM3 SNAP: clarifies that total SNAP benefit outlay dollars are an
  emergent property of (participation × rule-computed benefit), not
  an explicit calibration target. The benefit-band composition
  target approximates the dollar total via the participant
  distribution, but doesn't solve for dollars directly. Cites
  Wheaton & Tran (Urban) on SNAP anti-poverty effects.

TRIM3 TANF: same structural note — TANF outlay dollars not an
  explicit constraint; PE-US's L0 has them as a state and national
  target alongside recipient-unit counts.

Other rows (TRIM3 SSI explicitly calibrates both caseload AND
benefits per their own docs, which our existing row already
captures; PE-US TANF, SSI, Medicaid rows already list both dollar
and count targets) are unchanged.

61/61 tests pass; lint clean.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@vercel

vercel Bot commented May 22, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
policyengine-model Ready Ready Preview, Comment May 22, 2026 10:28am

Request Review

…ormula

Per-program calibration framing needs one more distinction. PE-US's
SNAP / TANF / SSI rows have rule-computed per-unit benefits (benefit
= f(income, household size, deductions, etc.)), so calibrating BOTH
caseload counts AND dollar outlays is genuinely informative — the
two targets constrain different dimensions of the imputation.

Medicaid is different. PE-US has no per-individual benefit formula
in the model; per-capita spending is assigned as a CMS-derived
constant. So "Medicaid spending" effectively falls out as (enrolled
people × per-capita spend), and adding a separate L0 dollar target
provides little information beyond the enrollment-count target.

Updated the PE-US Medicaid imputation row to call this out
explicitly, and re-labelled the calibration targets to mark
enrollment counts as primary and national spending as derivative.

61/61 tests, lint clean.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant