Fix vat liability scaling#17
Draft
vahid-ahmadi wants to merge 5 commits into
Draft
Conversation
Implements corrections from a policy / economics / statistics referee panel.
Substantive (theory):
- Secondary dominated region: a banded reduced rate reverts to 20% at the
£105k band top, creating a second notch (a' = T1(τ−r)/(1−τ)). Total
dominated width is therefore £21,562 (15%) and £22,569 (10%), essentially
unchanged vs the £21,250 baseline — the reduced rate splits the empty band
rather than shrinking it. Only the taper removes the distortion; the level
move relocates it. Corrected in model.tex, intro.tex, conclusion.tex.
- Reconcile notch rate: the £21,250 width uses the statutory 20% turnover
rate while the costing/behavioural layers use each firm's ~3% net wedge.
Reframe "model-free" → "exact, elasticity-free (conditional on the
turnover-tax notch)"; clarify the 137k count indexes exposed population,
not optimal locators.
- Demote e=0.17 from "headline" to "illustrative midpoint"; anchor the
e-range's only external point (Kleven–Waseem ≈0.05); note 0.17/0.32 are
notch-implied, not data-identified.
Statistics / inference:
- Caveat that bootstrap SEs/CIs reflect resampling dispersion of a synthetic
file of analyst-chosen size, not population sampling error.
- Reconcile appendix elasticities (notch-width ≈0.45, marginal-buncher ≈0.66)
vs body sweep {0.05,0.17,0.32}: different objects, all non-identified.
- Fix estimator contradictions: bin width £100 → £1,000 (bunching.tex);
counterfactual polynomial "cubic" → degree-7 (a_data.tex), matching code.
Policy:
- Reconcile £203.8bn base as a theoretical-liability (VTTL-style) aggregate
above cash receipts (footnote); cite HMT Spring Budget 2024 for the £185m
anchor.
- Add compliance-cost caveat (cite Keen & Mintz 2004) to the distortion
ranking limitations.
Housekeeping:
- Correct the static-sweep convexity mechanism (higher per-firm liability,
not denser mass) and three sec:bunching → sec:behavioural cross-refs.
- Move orphaned/contradictory model sections (results, counterfactuals,
literature) to paper/future/; update body.tex comments.
- README firm count 2.0M → 2.5M; conclusion voluntary-reg wording → 43%.
- Rebuild paper/main.pdf.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The reduced-rate case needs the secondary-notch identity, so the opening of "How each reform changes the dominated region" now references both eq:dominated and eq:dominated-secondary rather than implying everything follows from the single primary-notch formula. Rebuild main.pdf. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Second-pass revisions from the three-referee re-review (all minor):
- Base reconciliation: intro now flags the £508m (£85k data-year base) vs the
£374m £90k-sweep figure for the same £100k move; static.tex notes both
£183.6bn and £203.8bn are VTTL-style theoretical-liability bases.
- "HMRC's £185m" → "the Government's published £185m" (cite is HM Treasury).
- model.tex: own that the 137k dominated-band count is conditional on the
uniform within-band fill and would shift under another shape; the width a,
not the count, is exact.
- behavioural.tex: resolve the Δy* symbol collision (structural marginal-buncher
excess now Δy_H ≡ n_H−T*, distinct from the appendix's £5.6k bunching span);
note the body's 0.17/0.32 differ from the appendix's ≈0.66 marginal-buncher
elasticity, both non-identified.
- data.tex: note ρ_i up to 1.5 permits negative value added (input-VAT-reclaim
positions).
- conclusion.tex: flag absent sectoral incidence of the menu reforms as future
work (VAT-by-sector excluded from the optimiser).
- a_inference.tex: complete tab:degwin to the full {5,6,7,8}×{£10–25k} grid
(16 cells, from the released estimator output) so it matches the prose.
- Rebuild main.pdf (35pp).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… ~0.6 Per-firm net VAT liability is now STANDARD_VAT_RATE*(turnover-input) (was raw value added, missing the rate); input/output ratio re-centred ~0.98 -> ~0.6 and clamped [0.1,0.95] so value added is always positive (eliminates the ~47% negative-VA firms). Applied consistently in generate/calibration/validate/dynamic. Calibration knob l1_reg_coef is PROVISIONAL (repair of near-threshold density in progress). Results/figures intentionally not committed yet. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Knob-tuning (l1_reg_coef, vat_liability_band_importance) was explored to repair the near-threshold density but did NOT restore positive bunching excess mass (E stays 0 even when the simple below/above density step turns positive). So the branch keeps the v_i/rho fix with DEFAULT knobs; the bunching reproduction issue is deferred to a tracking issue. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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.
What this does
Fixes a per-firm scaling defect in the synthetic-data model:
vat_liability_kwas storing raw value added (turnover − input), missing the ×0.20 VAT rate — per-firm "net VAT" was ~5× too large.The fix:
v_i = STANDARD_VAT_RATE · (turnover − input)and ρ re-centred to ~0.6 (clamped[0.1, 0.95], so value added is always positive), applied consistently acrossconfig / generate / calibration / validate / dynamic.What's verified good ✅
Why it's a DRAFT and must not merge ❌
The corrected (turnover-correlated) liability makes the weight optimiser pile weight just above £85k, which reverses the near-threshold density step and collapses the bunching signal: excess mass E: 8,712 → 0, ratio b: +0.06 → −0.14. The 2024-25 vintage also degrades. Calibration-knob tuning (
l1_reg_coef,vat_liability_band_importance) can flip the simple density step positive but the estimator still returns E=0 — knob-tuning does not restore it. So merging this would ship a paper whose headline bunching result is broken.What remains (see #15)
Decide the bunching story under the corrected model — either a deeper calibration change (e.g. a near-threshold density target) or an honest reframing of Section 5 — then a full re-run and propagation of all headline numbers.
Notes
main(paper/Sections/data.tex,paper/main.pdf); needs a rebase before it could ever be considered.🤖 Generated with Claude Code