PolicyEngine / PolicyEngine/microcosm

State top-tail income mass is uncalibrated: CO M+ AGI at 24% of SOI in buildp-acs-local (fails progressive-bracket scoring)

Open
#940 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Python
Stars
0
Forks
4
Avg merge
1d 3h
Merged PRs (30d)
94

Description

Summary

Scoring Colorado Initiative 195 (Amendment 87 — graduated income tax with 7.4/7.9/8.4% brackets at $500k/$750k/$1M) on populace-us-2024-buildp-acs-local produced a revenue estimate of $1.116B for TY2027, versus ~$1.9B implied by IRS SOI actuals and ~$1.98B from the Colorado Legislative Council Staff fiscal impact statement. Diagnosis: the CO top tail matches SOI on filer counts but truncates income per filer, and the affected region carries no calibration targets.

Evidence (model vs IRS SOI Historic Table 2, CO TY2023)

AGI band Returns (model/SOI) Income (model/SOI)
$200k–$500k 131% 128%
$500k–$1M 139% 154%
$1M+ 184% 77%
  • Mean $1M+ filer AGI: $1.27M model vs $3.03M SOI — the $3M–$100M+ filers are absent.
  • Income mass above the $1M threshold (the base of an 8.4% bracket): $7.8B model vs $31.7B SOI (24% coverage).
  • Meanwhile CO aggregates calibrate tightly in this release: return count −0.02%, AGI +0.12%, taxable income −0.10%, cap gains −0.48%.
  • The only per-band CO targets are taxable-interest returns/amounts (all within ~1%), with a top band of 500k_plus and no 500k/750k/1M splits. The federal income_tax_before_credits_amount target for CO runs −3.10% against +0.12% AGI — an independent signal of a thin tail.

Scaling the reform's upper-bracket revenue by the SOI coverage ratio (0.68 on the like-for-like bracket base) moves the estimate to ≈$1.9B, within 5% of the LCS annualized figure — i.e., essentially the entire individual-side gap is tail-income truncation.

Proposal

Add state × AGI-band income-amount targets (at minimum AGI amount and return counts from SOI Historic Table 2, which publishes both by state) for bands up to and including $1M+, to the acs-local target set. Count-only or proxy-only (taxable interest) calibration leaves income mass in the top band unconstrained, which fails exactly the progressive-bracket reforms state ballot measures keep proposing. A 1m_plus amount target alone would have caught this: the model would have needed ~4× the income mass in that band.

If per-band amount targets are too aggressive for the sparse solver, an alternative is a single state-level "AGI above $1M" mass target, which directly pins the quantity top-bracket reforms tax.

Reproduction

  • Dataset: populace_us_2024_acs_local.h5 @ populace-us-2024-buildp-acs-local-592ae5d6-20260819T020303Z, CO subset (state_fips 8; 30,079 households), policyengine-us 1.825.0, period 2027.
  • Reform: gov.contrib.states.co.progressive_income_tax.in_effect (PR PolicyEngine/policyengine-us#9431).
  • Dashboard using this estimate: https://github.com/PolicyEngine/co-initiative-195 (validation tab documents the gap).
  • SOI reference: Historic Table 2, CO TY2023 (23in06co.xlsx).

🤖 Generated with Claude Code

https://claude.ai/code/session_016aAzQ2DZmw9BX4GpzU7UKP

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by locating the acs-local target set and its calibration configuration, then compare the Colorado subset against IRS SOI Historic Table 2, especially the 1m_plus band. Add state-by-AGI-band income-amount and return-count targets, or the stated above-$1M mass alternative, and rerun the CO reproduction to confirm the top-tail income mass is constrained.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
data-engineering
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.