Single-sector default, heterogeneous CES epsilon, and UK-calibrated structural parameters#66
Single-sector default, heterogeneous CES epsilon, and UK-calibrated structural parameters#66vahid-ahmadi wants to merge 6 commits intomainfrom
Conversation
Two changes:
1. Make single-sector (M=1) the default run mode. The 8-sector industry
calibration is now opt-in via `multi_sector=True` parameter on
solve_steady_state() and run_transition_path(), or via the
`multi-sector` CLI flag:
uv run python examples/run_oguk.py ss pooled # M=1
uv run python examples/run_oguk.py ss pooled multi-sector # M=8
2. Enable calibrated heterogeneous CES elasticities (epsilon) in the
8-sector mode. Previously forced to 1.0 (Cobb-Douglas) for all
sectors due to solver NaN issues — now uses literature values from
Chirinko (2008) and Knoblach et al. (2020):
Energy=0.50, Construction=0.70, Trade & Transport=1.00,
Info & Finance=1.20, Real Estate=0.40, Business Services=1.30,
Public & Other=0.90, Manufacturing=0.80
Supporting changes:
- Recalibrate TFP (Z) using CES Solow residuals instead of
Cobb-Douglas residuals when epsilon != 1
- Use hybr root-finder (Powell hybrid) instead of LM for
multi-sector SS — LM gets stuck at ~1e-5 residuals
- Relax mindist_SS and RC_SS to 1e-4 for multi-sector
Requires OG-Core PR PSLmodels/OG-Core#1096 (numerical guards for
CES production functions).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Update default parameters from generic macro literature values to UK-specific estimates: delta_annual 0.05→0.065 (ONS CAPSTK), g_y_annual 0.01→0.011 (OBR EFO), frisch 0.4→0.35 (Blundell et al.), beta_annual 0.96→0.965 (ONS savings ratio), world_int_rate 0.0175→0.02 (BoE gilt yields). Add sector-specific depreciation rates for 8-sector mode from ONS capital consumption data. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Future improvement suggestionsCalibration1. Open-economy parameters (
|
OG-Core PR #1096 (numerical guards for CES with heterogeneous epsilon) merged 2026-04-13 and first shipped in ogcore 0.15.6. The heterogeneous CES epsilon path in multi-sector mode can produce NaN with earlier versions when inputs are near zero, so raise the floor accordingly. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
@vahid-ahmadi The code changes look good. We just need the unit test failure fixed. Also, let's bump the version to 0.3.2, please. |
Raise floors on numpy, scipy, and pygam so uv does not resolve scipy==1.11.4/numpy==1.26.4 transitively on Python 3.13 (no cp313 wheels exist, which triggered a source build and mesonpy failure in CI). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
policyengine 4.3.0 ships with a data release manifest pinned to policyengine-uk==2.88.0. Any newer policyengine-uk (e.g. 2.88.9) has no published manifest, so import of policyengine.core raises DataReleaseManifestUnavailableError and pytest collection fails. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Summary
multi_sector=Trueonsolve_steady_state()/run_transition_path(), ormulti-sectorCLI flag. This makes the default run faster and matches OG-Core's built-in M=1 defaults.frischg_y_annualdelta_annualbeta_annualworld_int_rate_annualdelta_tau_annual) now varies by sector using ONS CAPSTK data, from 3% (Real Estate — long-lived structures) to 10% (Info & Finance — IT equipment).Usage
Dependencies
Depends on PSLmodels/OG-Core#1096 (numerical guards for CES production functions, merged 2026-04-13), first available in OG-Core 0.15.6. The
ogcorefloor inpyproject.tomlhas been bumped to>=0.15.6accordingly.Test plan
🤖 Generated with Claude Code