Ramsey optimal monetary policy
Posted: Fri Nov 11, 2011 5:19 pm
I am trying to replicate Figure 6.4 (Impulse response functions to a Technology Shock under the Optimal Policy) of Gali 2008 chapter 6 using the 'ramsey_policy' command.
When I use the ramsey_policy command it seems to work fine for the case of sticky wages and sticky prices (theta_p=0.66, theta_w=0.75) and sticky wages only (theta_p=0.0001, theta_w=0.75) but gets results that look very wrong for sticky prices only (theta_p=0.66, theta_w=0.0001). Specifically, with sticky prices only the optimal policy does not involve zero output gap and zero price inflation (which was proved in chapter 3 to be optimal).
I am fairly sure the model is coded fine as I use exactly the same code, only with a taylor rule for the nominal interest rate, i, included in the model, to get the IRFs to a monetary policy shock in Figure 6.3 for all three cases (both sticky, just sticky prices, just sticky wages).
Also, if I follow section 6.4 of the book and derive the system of equations characterizing the equilibrium (Gali pg 134) and use this to get the IRFs via stoch_simul then I get the same graphs as Figure 6.4.
Can anyone see why the ramsey_policy command is having problems with the sticky price only case?
The following is the code for the ramsey_policy. Attached are, in reverse order, three .mod files for getting Figure 6.3, getting Figure 6.4 by calculating the Ramsey fn, and getting Figure 6.4 by solving the system of eqns.
PS. Am using Dynare 4.2.0 running in Octave.
PPS. In implementing ramsey_policy I followed http://www.dynare.org/DynareWiki/OptimalPolicy
When I use the ramsey_policy command it seems to work fine for the case of sticky wages and sticky prices (theta_p=0.66, theta_w=0.75) and sticky wages only (theta_p=0.0001, theta_w=0.75) but gets results that look very wrong for sticky prices only (theta_p=0.66, theta_w=0.0001). Specifically, with sticky prices only the optimal policy does not involve zero output gap and zero price inflation (which was proved in chapter 3 to be optimal).
I am fairly sure the model is coded fine as I use exactly the same code, only with a taylor rule for the nominal interest rate, i, included in the model, to get the IRFs to a monetary policy shock in Figure 6.3 for all three cases (both sticky, just sticky prices, just sticky wages).
Also, if I follow section 6.4 of the book and derive the system of equations characterizing the equilibrium (Gali pg 134) and use this to get the IRFs via stoch_simul then I get the same graphs as Figure 6.4.
Can anyone see why the ramsey_policy command is having problems with the sticky price only case?
The following is the code for the ramsey_policy. Attached are, in reverse order, three .mod files for getting Figure 6.3, getting Figure 6.4 by calculating the Ramsey fn, and getting Figure 6.4 by solving the system of eqns.
- Code: Select all
/*
* Finds the ramsey optimal policy for the model of Gali chapter 6 (note that Galis figures are all annualized).
*/
var y_tilde pi_p pi_w omega_tilde omega_n omega y y_n r_n n a i v annualized_pi_p annualized_pi_w;
varexo epsilon_as epsilon_vs;
parameters beta sigma varphi alpha epsilon_p epsilon_w mu_p mu_w theta_p theta_w lambda_p lambda_w kappa_p kappa_w captheta psi_n_ya psi_n_omegaa rho_a sigma_epsilon_as rho_v sigma_epsilon_vs vartheta_y_n rho phi_p phi_w phi_y;
/*
*For explanation of what is going on, see the GaliChpt6.mod code which
*goes through this model.
*/
beta = 0.99;
sigma = 1;
varphi = 1;
alpha = 0.33;
epsilon_p = 6/5;
epsilon_w = 6/5;
theta_p = 0.66;
theta_w = 0.0001;
rho_a=0.9;
rho_v=0.5;
sigma_epsilon_as=1;
sigma_epsilon_vs=0.25;
phi_p=1.5;
phi_w=0;
phi_y=0;
rho=-log(beta);
mu_p=log(epsilon_p/(epsilon_p-1));
mu_w=log(epsilon_w/(epsilon_w-1));
captheta = (1-alpha)/(1-alpha+alpha*epsilon_p);
lambda_p = (1-theta_p)*(1-beta*theta_p)*captheta/theta_p;
lambda_w = (1-theta_w)*(1-beta*theta_w)/(theta_w*(1+epsilon_w*varphi));
kappa_p = alpha*lambda_p/(1-alpha);
kappa_w = lambda_w*(sigma+varphi/(1-alpha));
psi_n_ya = (1+varphi)/(sigma*(1-alpha)+varphi+alpha);
psi_n_omegaa = (1-alpha*psi_n_ya)/(1-alpha);
vartheta_y_n = (1-alpha)*(mu_p-log(1-alpha))/(sigma*(1-alpha)+varphi+alpha);
model;
pi_p=beta*pi_p(+1)+kappa_p*y_tilde+lambda_p*omega_tilde;
pi_w=beta*pi_w(+1)+kappa_w*y_tilde-lambda_w*omega_tilde;
omega_tilde=omega_tilde(-1)+pi_w-pi_p-(omega_n-omega_n(-1));
y_tilde=-(1/sigma)*(i-pi_p(+1)-r_n)+y_tilde(+1);
y_tilde=y-y_n;
y = a + (1-alpha)*n;
y_n=psi_n_ya*a+vartheta_y_n;
omega_tilde=omega-omega_n;
omega_n=log(1-alpha)+psi_n_omegaa*a-mu_p;
r_n=rho+sigma*psi_n_ya*(a(+1)-a);
a=rho_a*a(-1)+epsilon_as;
v=rho_v*v(-1)+epsilon_vs;
annualized_pi_p=4*pi_p;
annualized_pi_w=4*pi_w;
end;
/*
* To compute the Ramsey optimal monetary policy we have to remove the
* Taylor rule from the baseline model
* i=rho+phi_p*pi_p+phi_w*pi_w+phi_y*y_tilde+v;
*/
shocks;
var epsilon_as; stderr sigma_epsilon_as;
var epsilon_vs; stderr sigma_epsilon_vs;
end;
/*
*Note, we cannot calculate the steady state as the model is incomplete due
*to missing the interest rate rule
*/
planner_objective 1/2*((sigma+(varphi+alpha)/(1-alpha))*y_tilde^2 + epsilon_p/lambda_p*pi_p^2 + epsilon_w*(1-alpha)/epsilon_w*pi_w^2);
ramsey_policy(irf=12, planner_discount=0.99) y_tilde annualized_pi_p annualized_pi_w omega;
PS. Am using Dynare 4.2.0 running in Octave.
PPS. In implementing ramsey_policy I followed http://www.dynare.org/DynareWiki/OptimalPolicy