Repository navigation
Close the Step 6 commodity identity on the balanced Supply table (#1161) - #1162
Conversation
…ply (#1161) Make output minus the producer-price Use row fell from $189bn-$1.46T to $2.9-25bn outside 2020-22, and to a named Step 5 tax residual in 2020-22. - Make's tax wedge is placed from the tax allocator's own cells, fitted to the balanced Use tax rows and Supply tax columns, instead of the pre-balance rows spread over each industry's output mix. - The margin placement is fitted so each good gives up its Supply TRADE + TRANS (plus trade-level tax) and each margin commodity books what its Make output requires. - New exact gates: goods give-up vs Supply, and the identity residual equals the Step 5 tax disagreement and nothing else. The residual goes to the sidecar. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
bl-young
left a comment
There was a problem hiding this comment.
Looks good to approve as a Step 6 builder fix. The wedge fit, margin reconcile, and identity gates match the #1161 diagnosis; CI impact stays deferred until a stored MUT + config pin.
One thing to confirm: after _reconcile_placement, Producers' Value is PUR - stripped, and scaling margins up to Supply give-up can push individual buyer cells negative. Those would flow into producer-price Use and then A. Have you seen negative PRO / producer Use cells on the 2017-2024 builds? If yes, how large and on which commodities; if not, worth a quick scan or a light gate so we notice if a later vintage introduces them.
Also: the 2021-22 leftover is owned as Step 5 tax row/column disagreement (plus #809 on margin commodities). Is there already a follow-up filed or planned to move industry T00TOP/T00SUB with commodity TOP/SUB in the balance, or should we open one before this stacks further?
|
Thanks. Both answered below. Negative producer-value cells: yes, a few, and they are new with this PR. I scanned the stored Margins tables of the newest build,
On
The largest negative cells overall are expected and are not counted above: change in inventories ( I'd propose a follow-up rather than changing this PR: a gate in Step 6 that reports industry-buyer cells with producers' value below zero, and a clip that moves the excess margin to the commodity's other buyers. Step 5 tax rows: that's #1163, filed on board 36 when #1162 went up: move industry |
|
Filed as #1177 (board 36): a Step 6 gate and clip for industry-buyer cells with negative producers' value. |
Closes #1161.
What was wrong
In the nowcast MUT, each commodity's output in the Make table should equal its row total in the producer-price Use table. Before this change the two disagreed by $189bn in 2017, growing to $1.46T in 2022 and $1.44T in 2024 (summed across commodities, ignoring sign). BEA's published 2017 tables close the same test to $1.1bn.
Step 6 (
mut_from_balanced, the purchaser-to-producer conversion) introduced it in three places:TRADEandTRANScolumns.T00TOP/T00SUBrows and the Supply table'sTOP/SUBcolumns. In 2022,T00TOPmoved by $88bn net. Make still added the pre-balance rows, so Make's industry totals disagreed with the Use table's value added too.Published 2017 settles the open question in the issue about taxes. Each good's stripped margin in BEA's tables is its Supply
TRADE + TRANSplus the trade-level share of itsTOP(sales and fuel taxes ride inside the trade margin), to $1.1bn across all goods. So the tax-inclusive margin is correct. The error was in the amounts, not the convention, and #823 is not needed for this fix.The change
nowcast_va_taxes:t00top_cellsandt00sub_cellsreturn the tax rows on the Make axes (industry × commodity produced). The existing rows are now their row sums, unchanged. The--checkstill reports T00TOP r = 0.947, T00SUB exact. The trade-level leg now lands only on the wholesale and retail commodities a trade industry produces.supply_to_make.make_from_sut: optionalwedge_cellsplaces the wedge from those cells instead of the output-mix spread. Against BEA's published 2017 Make (--check), matching cells rise from 160,788 to 161,047 of 161,604, and the $18.3bn housing residual is gone.nowcast_mut:balanced_make_wedgefits those cells to the balanced Use tax rows (Make's industry totals then equal value added) and to the balanced Supply tax columns._reconcile_placementfits the margin placement so each good gives up exactly its Supply margin and each margin commodity books what its Make output requires. Each (good, margin commodity) pair keeps its buyer split.commodity_identity_residual).Results: Make output minus producer-price Use row, summed across commodities ignoring sign ($bn)
All eight years build and pass every gate (in memory, from the local balanced tables
v0.5.0_a166975; 2017 fromv0.5.0_011f41f).What remains is Step 5's, and the gates prove it. On every commodity other than the 24 trade and transport commodities, the leftover equals exactly the amount by which the balanced Use tax rows and the balanced Supply tax columns disagree for that commodity's producers. Step 6 cannot place a subsidy on a commodity when the industry that makes it carries a different subsidy. The 2021–22 leaders:
531OREother real estate (SupplySUBmoved from −1.6 to −28.7 by the balance; industry row did not follow)531HSTtenant-occupied housing5241XXinsurance carriers541100legal servicesThe trade and transport commodities carry the margin columns' failure to net to zero (#809): $17.6bn in 2022, $0.3–7.2bn in other years.
Industry identity. Make's industry output now equals each producer-price Use column plus value added, except where the balanced SUT's own industry identity is off (
S00600$3.5–3.9bn, real estate $0.2–1.6bn). Those match the balanced SUT to the $0.1M. Onmain, Make also carried the pre-balance taxes, which put the trade industries off by $1.4–3.0bn on top.Trade-off to review
Against BEA's published 2017 before-redefinition tables, totals get closer but individual Use cells get a little further:
The 2017 rates are BEA's own 2017 placement, so unreconciled cells sit as close to the published table as they can. Requiring Use rows to equal Make output moves the trade commodities' rows onto our balanced Supply table, whose trade give-up by wholesale and retail commodity is $162bn away from BEA's in 2017 (on goods rows it is $22bn of $3.3T). That is a Supply-table difference, not Step 6's to hide.
Not in this PR
nowcast_mut_vintagein the configs. After merge, runpython -m bedrock.transform.iot.nowcast_mutfor 2017–2024 with upload.xfailontest_compare_output_from_make_and_use. It reads the stored MUT, so it can come off once the new vintage is stored and configured.T00TOP/T00SUBwith theTOP/SUBof the commodities it makes. That is the follow-up for the 2021–22 residual.Checks run locally
ruff check,ruff format --check, andmypyclean on the three files.nowcast_va_taxes --checkpasses andsupply_to_make --checkpasses.🤖 Generated with Claude Code