Skip to content

Add PolicyEngine vs SFC comparison table#16

Merged
MaxGhenis merged 10 commits intomainfrom
add-sfc-comparison-table
Jan 19, 2026
Merged

Add PolicyEngine vs SFC comparison table#16
MaxGhenis merged 10 commits intomainfrom
add-sfc-comparison-table

Conversation

@MaxGhenis
Copy link
Copy Markdown
Contributor

@MaxGhenis MaxGhenis commented Jan 19, 2026

Summary

Adds a detailed comparison table showing PolicyEngine microsimulation estimates alongside Scottish Fiscal Commission (SFC) official costings from their January 2026 Economic and Fiscal Forecasts.

Features

  • Side-by-side comparison of PE vs SFC estimates by provision and year
  • Toggle between static and post-behavioural SFC costings
  • Color-coded difference indicators (< £10m, £10-30m, > £30m)
  • Sign convention matches autumn budget dashboard: negative = cost, positive = revenue

Key findings from comparison

Provision PE Estimate SFC Estimate Notes
Basic rate uplift -£33m -£27m Close match
Intermediate rate uplift -£30m -£23m Close match
Higher rate freeze +£245m +£116m PE ~2x higher - likely behavioural responses
Advanced rate freeze +£124m +£7m Large discrepancy - needs investigation
Top rate freeze +£13m +£1m PE ~10x higher
SCP baby boost -£14m -£3m SFC assumes 18-month rollout (half-year in 2027)

Important context for reviewers

  1. Sign convention: Negative = cost to government, positive = revenue (matching OBR comparison style)

  2. Baby boost discrepancy explained: SFC's £3m in 2027-28 reflects only ~6 months of impact due to 18-month implementation timeline. PE assumes full-year from April 2027.

  3. Threshold freeze discrepancies: PE shows much higher revenue than SFC, likely because:

    • SFC includes behavioural responses (tax avoidance, reduced work)
    • Possible different baseline inflation assumptions
    • PE uses static microsimulation only
  4. Costing methodology: Each provision is costed independently against baseline (not JCT-style stacking where each is costed against baseline + previous provisions).

  5. Related PR: policyengine-uk #1486 adds 2026 higher/advanced/top rate freeze to baseline (already announced in Budget 2025-26).

Data source

From SFC Table A.1 (page 95):

Provision 2026-27 2027-28 2028-29 2029-30 2030-31
Basic rate threshold +7.4% -27 -28 -30 -31 -32
Intermediate rate threshold +7.4% -23 -24 -25 -26 -27
Higher rate freeze (2027-28/2028-29) +116 +232 +245 +258
Advanced rate freeze +7 +13 +14 +14
Top rate freeze +1 +3 +3 +3
SCP baby boost -3 -7 -7 -7

Test plan

  • Table renders with correct sign convention
  • All 6 provisions display with PE and SFC values
  • Static/behavioural toggle works
  • Difference highlighting appears correctly
  • Review with colleague for accuracy

🤖 Generated with Claude Code

Add a detailed comparison table showing PolicyEngine estimates alongside
Scottish Fiscal Commission (SFC) official costings from their January 2026
Economic and Fiscal Forecasts.

The table includes:
- Basic rate threshold uplift (+7.4%)
- Intermediate rate threshold uplift (+7.4%)
- Combined income tax threshold uplift
- Higher/advanced/top rate threshold freeze extensions (2027-28, 2028-29)
- SCP baby boost (Premium for under-ones)

Data sourced from SFC Table A.1 (page 95) showing both static and
post-behavioural costings by provision.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@vercel
Copy link
Copy Markdown

vercel Bot commented Jan 19, 2026

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

Project Deployment Review Updated (UTC)
post-scottish-budget-dashboard Ready Ready Preview, Comment Jan 19, 2026 7:15pm

Request Review

- Add individual reform functions for each SFC provision:
  - Basic rate threshold +7.4%
  - Intermediate rate threshold +7.4%
  - Higher rate freeze (2027+)
  - Advanced rate freeze (2027+)
  - Top rate freeze (2027+)
- Fix sign convention to match autumn budget dashboard:
  - Negative = cost to government
  - Positive = revenue for government
- Update SFC comparison table with all 6 provisions
- Add note about independent costing (not JCT-style stacking)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Issues:
- scottish-budget-2k2: Investigate advanced/top rate freeze discrepancy
- scottish-budget-nwg: Merge policyengine-uk baseline fix PR #1486

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Update expected reform count from 4 to 9
- Add new reform IDs to expected sets
- Fix sign convention: negative = cost, positive = revenue
- All tests now match autumn budget dashboard convention

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add all 8 individual reforms to stacked bar chart
- Use autumn budget color scheme:
  - Teal spectrum for costs (SCP, income tax uplifts)
  - Amber spectrum for revenue raisers (threshold freezes)
- Chart shows costs below x-axis, revenue above
- Dynamic legend shows only policies with non-zero values

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Make y-axis symmetric around zero in budgetary impact chart
- Include all 8 provisions in living standards and decile charts
- Use ALL_POLICY_IDS instead of selectedPolicies for data transforms

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Generate explicit tick marks at regular intervals
- Always include 0 in tick marks
- Choose appropriate interval based on range (100, 200, 250, 500)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Fix y-axis tick values: remove +50 offset so ticks show round numbers
  (e.g., £800m, £600m instead of £850m, £650m)
- Add static values to sfc_comparison.csv calculated from SFC's
  published behavioural adjustment rates (8% for higher-rate, 25% for
  advanced-rate, 85% for top-rate freezes)
- Update SFCComparisonTable note to explain static value derivation
- Toggle already existed, now has data to switch between

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@MaxGhenis
Copy link
Copy Markdown
Contributor Author

Merging. @vahid-ahmadi to investigate the gaps against SFC and also fix some of the graphs, e.g. no threshold freezes in decile charts etc. (I haven't checked household but that also probably needs it).

@MaxGhenis MaxGhenis merged commit 1f19ebf into main Jan 19, 2026
3 checks passed
@MaxGhenis MaxGhenis deleted the add-sfc-comparison-table branch January 19, 2026 19:31
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