Skip to content

SmoothTaylorRule + time-unit aware rate#83

Open
agurgone wants to merge 7 commits into
mainfrom
bug/taylor-rule
Open

SmoothTaylorRule + time-unit aware rate#83
agurgone wants to merge 7 commits into
mainfrom
bug/taylor-rule

Conversation

@agurgone

Copy link
Copy Markdown
Contributor

Issue:
PolednaPolicyRate produced policy rates at the wrong frequency (annual) despite the model can be run at a different (quarterly) frequency. This may be transmitted to other variables through the monetary policy channel, affecting the macroeconomy and agents' balance sheets.
Moreover, it uses quarter on quarter PPI inflation, which is too noisy for a monetary policy rule and tend to overstimate inflation, and growth instead of output gap.

Summary
This PR adds a new SmoothTaylorRule option for central bank policy and makes rate setup aware of the model time_unit.

Main changes
pass time_unit through data setup and simulation setup
convert bank and policy rates from annual values to per-period values
add calibration and runtime support for SmoothTaylorRule
add cpi_yoy_inflation and output_gap to the economy
use those new measures in central bank decisions
update tests and config options

Notes
The work is split into 4 commits:

propagate time_unit
convert bank rates to per-period units
add SmoothTaylorRule
add economy metrics used by the policy rule

Testing
Unit tests were updated for the new rate handling and policy logic.

Comment thread macro_data/processing/synthetic_banks/default_synthetic_banks.py Outdated
Comment thread macromodel/agents/central_bank/func/policy_rate.py

@jose-moran jose-moran left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You have code duplicates, I think things can be simplified. I'm also not sure about your rate/12 thing.

@agurgone

Copy link
Copy Markdown
Contributor Author

Monetary Policy Rule & Transmission

This model implements a Smooth Taylor Rule estimated on quarterly data for France (2000–2014). While the simulation operates at a periodic frequency, the rule is defined in annualised nominal terms to maintain consistency with central bank reporting and the Taylor Principle.

1. The Policy Rule (Annualised)

The estimation uses annualised units (e.g., 0.05 for 5%) for both the policy rate and inflation. This ensures the parameters reflect the central bank's response to annual targets.

$$i_t^{annual} = \rho i_{t-1}^{annual} + (1-\rho)\left[ r^* + \pi^* + \phi_\pi(\pi_t^{yoy} - \pi^*) + \phi_q q_t \right] + \varepsilon_t$$

Estimated Parameters (France 2000–2014)

Parameter Value Interpretation
$\phi_\pi$ 1.8942 Response to inflation (A 1% rise in YoY inflation triggers a 1.89% rise in the annual target)
$\phi_q$ 0.4738 Response to the output gap
$r^*$ -0.0025 The estimated annual natural real rate of interest
$\rho$ 0.9036 The quarterly smoothing parameter, indicating high policy persistence

2. Periodic Implementation

To calculate the actual interest flow in the model (e.g., for household budget constraints), we apply the simple inverse of annualisation. This reflects the standard banking convention where periodic rates are a linear slice of the nominal annual quote.

$$ i_t^{period} = \frac{i_t^{annual}}{\text{periods per year}}$$

  • Example: A prescribed 5% annual rate translates to a 1.25% quarterly credit to deposits.
  • Note on Compounding: While the central bank targets the nominal rate, the household's Effective Annual Rate (EAR) will endogenously exceed the target (e.g., $5.09%$) as interest compounds on the balance sheet across periods. This allows the model to capture realistic wealth effects while maintaining a standard nominal policy reaction function.

@agurgone agurgone requested a review from jose-moran May 12, 2026 23:19
@agurgone

Copy link
Copy Markdown
Contributor Author

it should be ready for merging.

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.

2 participants