Extension 2: Parameters

We add the parameter \(\rho_I\) to the Taylor rule. For now it multiplies zero, and the next extension puts the lagged interest rate in its place.

Model

\[ \begin{aligned} \hat X_t &= E_t\hat X_{t+1}-\sigma^{-1}\left(\hat I_t-E_t\hat\Pi_{t+1}-\hat R_t^*\right),\\ \hat\Pi_t &= \kappa\hat X_t+\beta E_t\hat\Pi_{t+1},\\ \hat I_t &= \rho_I\cdot 0+(1-\rho_I)\left(\phi_\Pi\hat\Pi_t+\phi_Y\hat X_t\right),\\ \hat R_t^* &= \rho_A\hat R_{t-1}^*+\sigma(\rho_A-1)\omega\sigma_A\epsilon_t^A. \end{aligned} \]

The lower and upper bounds for \(\rho_I\) are \(-0.1\) and \(0.1\).

Neural network solution

Formulation

We add \(\rho_I\) to the estimated parameter set, before the parameters of the shock process,

\[ \tilde\Theta=\{\beta,\sigma,\eta,\phi,\phi_\Pi,\phi_Y,\rho_I,\rho_A,\sigma_A\}. \]

The state, shocks, and policy outputs are unchanged. The analytical solution used in the earlier examples applies to the original Taylor rule, so we omit that comparison from this extension onward.

In the code

Add a parameter input

The new parameter is named rho_i. We insert it before rho_a and sigma_a, the two shock parameters. Its reference value is zero and its training range is \([-0.1, 0.1]\). The complete parameter lists are shown below. The other values and ranges are unchanged.

examples/rank/rank_extension_02.py
# Reference values. They also generate the data later on.
PARAMETERS = {
    "beta": 0.97,
    "sigma": 2.0,
    "eta": 1.125,
    "phi": 0.7,
    "phipi": 1.875,
    "phiy": 0.25,
    "rho_i": 0.0,  # New in Extension 2: Taylor-rule persistence.
    "rho_a": 0.875,
    "sigma_a": 0.06,
}

# Training ranges. Every parameter with a range is a network input.
RANGES = {
    "beta": torch.distributions.Uniform(0.95, 0.99),
    "sigma": torch.distributions.Uniform(1.0, 3.0),
    "eta": torch.distributions.Uniform(0.25, 2.0),
    "phi": torch.distributions.Uniform(0.5, 0.9),
    "phipi": torch.distributions.Uniform(1.25, 2.5),
    "phiy": torch.distributions.Uniform(0.0, 0.5),
    "rho_i": torch.distributions.Uniform(-0.1, 0.1),
    "rho_a": torch.distributions.Uniform(0.8, 0.95),
    "sigma_a": torch.distributions.Uniform(0.02, 0.1),
}

Every parameter with a range is a network input, so adding rho_i also adds one input.

Adjust the Taylor rule

The complete residual calculation is below. It evaluates current policies, computes next-period expectations, and checks all three equations. The new factor 1 - rho_i appears in the Taylor-rule residual. The Euler equation and Phillips curve keep their previous form.

examples/rank/rank_extension_02.py
def residuals(self, e, detach_next=True):
    par = self.par_draw

    # Evaluate today's policies.
    X, Pi, I = self.policy()

    # Next period's state for each shock draw.
    state_next = self.next_state(e)

    # Evaluate next period's policies at that state.
    with torch.set_grad_enabled(not detach_next):
        X_next, Pi_next, _ = self.policy(state_next)

    # Average over the draws to approximate the conditional expectations.
    EX_next = X_next.mean(dim=0)
    EPi_next = Pi_next.mean(dim=0)

    # F_1: Euler equation.
    euler = X - (EX_next - (I - EPi_next - self.state.zeta) / par.sigma)
    # F_2: Phillips curve.
    phillips = Pi - (self.ss.kappa * X + par.beta * EPi_next)
    # F_3: Taylor rule. New in Extension 2: scale the policy response by (1 - rho_I).
    taylor = I - (1 - par.rho_i) * (par.phipi * Pi + par.phiy * X)
    return [euler, phillips, taylor]

At rho_i = 0, this rule reduces to Extension 1’s rule. No new policy output or state is needed.

Results

Solution

Mean squared residuals during training, with their average on top and each equation below, smoothed by a moving median over 100 iterations.

Output gap \(\hat X_t\) as each estimated parameter varies, the others at reference values, after a productivity innovation of minus one standard deviation.

Inflation \(\hat\Pi_t\) as each estimated parameter varies.

Nominal rate \(\hat I_t\) as each estimated parameter varies.

Likelihood

Training and validation mean squared error of the likelihood network.

Log likelihood as risk aversion \(\sigma\) varies, the other parameters at reference values. The line is the likelihood network and the dots are particle-filter evaluations at random values.

The same comparison for every estimated parameter.