Repository navigation
Conversation
CBO's standard household income counts Medicare at the government's average cost per enrollee, net of premiums paid by enrollees, and counts the Part D low-income subsidy separately as a means-tested transfer (CBO, January 2026, publication 61910; Distribution of Household Income in 2021, Appendix A; Habib 2018, Appendix B). The default list used medicare_gross_cost, which is gross of premiums and includes the subsidy. Add cbo_medicare_benefit: Medicare spending per enrollee less per-enrollee Part A, B and D premium income and the Part D low-income subsidy per Medicare enrollee, from the 2026 Medicare Trustees Report. Every enrollee gets the same value, as CBO assigns the average. Fix the medicare_gross_cost docstring, which said gross matched CBO. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
YAML: the 2025, 2015 and 2035 values, and five people with different premiums (Part A premium, income-related premiums, under 65, not enrolled) who all get the same average. Python, parameters only: transcription and conservation against the Trustees cells, the Part D series against #10111's share x premium plus income-related premiums, Part B premium income including income-related premiums, bounds through 2200, the post-2035 extension keeping each series' share of spending, and January reads. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stacked on #10111 (which is stacked on #10107). Retargets to
mainonce those merge.Summary
The default CBO household income (
cbo_household_income, income before means-tested transfers and federal taxes) counted Medicare withmedicare_gross_cost: CMS Medicare spending per enrollee, gross of the premiums that finance it and including the Part D low-income subsidy (LIS). CBO's standard measure counts Medicare at the government's average cost per enrollee, net of premiums paid by enrollees, and counts the LIS separately, as a means-tested transfer.This PR:
cbo_medicare_benefit= Medicare spending per enrollee − Part A, B and D premium income per Medicare enrollee − Part D LIS per Medicare enrollee, the same for every enrollee;gov.household.cbo_social_insurance_benefitsin place ofmedicare_gross_cost;calibration.gov.hhs.medicare(premium_income_per_enrollee.part_a/part_b/part_d,part_d_low_income_subsidy_per_enrollee);medicare_gross_costdocstring, which said gross Medicare "matches the gross Medicare benefit concept used in the CBO household-income framework". It matches only CBO's expanded sensitivity measure.medicare_gross_costandmedicare_costare unchanged. pe-us has no expanded CBO measure, so no gross variant is needed in the CBO lists.What CBO does
cbo.gov blocks automated fetches; these were read in a browser on 2026-10-11 (page numbers are PDF file pages).
The three questions
cbo_medicare_benefitsubtracts the average premium income per enrollee, not the person's own premiums. That is why it is a new variable rather thanmedicare_cost, which subtracts each person's Part A premium and income-related premiums. Undermedicare_cost, a 2025 enrollee with 20 quarters of coverage would get $9,135 and a $1 million earner $9,180, against $15,351 for others. Under CBO's method all three get $15,033.The series
Each series is a Trustees aggregate over Table V.B3's total enrollment ("Number of beneficiaries with HI and/or SMI coverage"), in dollars per Medicare enrollee per year. Every cell was checked on the rendered page.
From 2036 each series carries
uprating: calibration.gov.hhs.medicare.per_capita_cost, so it keeps its 2035 share of spending. Part B premium income per enrollee grows 7.3% in 2035; compounding that to 2100 would push premiums toward half of spending.cbo_medicare_benefitThe 2025 LIS drop is the Trustees' own figures. 2025 is the first year of the full Inflation Reduction Act benefit redesign (file page 119). That year LIS per subsidy enrollee falls from $2,833 to $1,226 and the direct subsidy rises (IV.B9, file page 158).
Impact
Pending: a base (#10111 head 4024d2e) vs PR (3d8bb6d) microsimulation of
cbo_household_incomefor 2026 on the default dataset is queued on the shared heavy lock.Invariants and tests
Python, parameter reads only (
tests/core/test_cbo_medicare_benefit_series.py, 197 cases, 10.6 s, 1.0 GB peak including the model import, local macOS):part_d.enrollment_share × part_d.premiums_per_enrolleeplus V.E4 IRMAA per enrollee. These are two derivations from different cells.YAML (
cbo_medicare_benefit.yaml): 2015, 2025 and 2035 values; not enrolled gives 0. Five people in one household get the same value even though their premiums differ: Part A premium, IRMAA, under 65, not enrolled.cbo_household_income.yamlis updated to the net value.Known unrelated failure on this stack:
test_no_group_variables_in_person_adds.py::test_known_violations_only_shrink. Main fixed it in #10092, after the #10107 base was cut.Not modeled and follow-ups
cbo_means_tested_transfers.per_capita_costaverages all enrollees, and that affects every consumer. Follow-up: Scale Medicare per-enrollee spending to enrollees outside nursing homes #10126, stacked on this PR.Sources
ffa56b9137006872300b0346149eae1613d09a172b6ba118aad48e66dfc48fa81b3de7a4faeee5ad42059e10740603182b716a5fa7b53b30d360b45b9e474d959c5755666847a78103016f04da937326744071a9a6736f4e77e91ce9e7af8629axiom: n/a: CBO distributional income measure (analysis construct), not a statutory provision
🤖 Generated with Claude Code