250 lines
9.1 KiB
Modula-2
250 lines
9.1 KiB
Modula-2
/*
|
|
* This file replicates the model studied in:
|
|
* Lawrence J. Christiano, Roberto Motto and Massimo Rostagno (2007):
|
|
* "Notes on Ramsey-Optimal Monetary Policy", Section 2
|
|
* The paper is available at http://faculty.wcas.northwestern.edu/~lchrist/d16/d1606/ramsey.pdf
|
|
*
|
|
* Notes:
|
|
* - This mod-files allows to simulate a simple New Keynesian Model with Rotemberg price
|
|
* adjustment costs under three different monetary policy arrangements:
|
|
* 1. a Taylor rule with a fixed inflation feedback coefficient alpha
|
|
* -> set the Optimal_policy switch to 0
|
|
* 2. a Taylor rule where the inflation feedback coefficient alpha is chosen
|
|
* optimally to minimize a quadratic loss function (optimal simple rule (OSR))
|
|
* -> set the Optimal_policy switch to 1 and the Ramsey switch to 0
|
|
* 3. fully optimal monetary under commitment (Ramsey)
|
|
* -> set the Optimal_policy switch to 1 and the Ramsey switch to 1
|
|
*
|
|
* - The Efficent_steady_state switch can be used to switch from an distorted steady state
|
|
* due to a monopolistic distortion to one where a labor subsidy counteracts this
|
|
* distortion. Note that the purely quadratic loss function in the OSR case does not capture
|
|
* the full welfare losses with a distorted steady state as there would be a linear term
|
|
* appearing.
|
|
*
|
|
* - This files shows how to use a conditional steady state file in the Ramsey case. It takes
|
|
* the value of the defined instrument R as given and then computes the rest of the steady
|
|
* state, including the steady state inflation rate, based on this value. The initial value
|
|
* of the instrument for steady state search must then be defined in an initval-block.
|
|
*
|
|
* - The optim_weights in the OSR case are based on a second order approximation to the welfare function
|
|
* as in Gali (2015). The relative weight between inflation and output gap volatility is essentially
|
|
* given by the slope of the New Keynesian Phillips Curve. Note that the linear terms that would be
|
|
* present in case of a distorted steady state need to be dropped for OSR.
|
|
*
|
|
* - Due to divine coincidence, the first best policy involves fully stabilizing inflation
|
|
* and thereby the output gap. As a consequence, the optimal inflation feedback coefficient
|
|
* in a Taylor rule would be infinity. The OSR command therefore estimates it to be at the
|
|
* upper bound defined via osr_params_bounds.
|
|
*
|
|
* - The mod-file also allows to conduct estimation under Ramsey policy by setting the
|
|
* Estimation_under_Ramsey switch to 1.
|
|
*
|
|
* This implementation was written by Johannes Pfeifer.
|
|
*
|
|
* If you spot mistakes, email me at jpfeifer@gmx.de
|
|
*
|
|
* Please note that the following copyright notice only applies to this Dynare
|
|
* implementation of the model.
|
|
*/
|
|
|
|
/*
|
|
* Copyright © 2019 Dynare Team
|
|
*
|
|
* This is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* It is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* For a copy of the GNU General Public License,
|
|
* see <https://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
//**********Define which monetary policy setup to use ***********
|
|
|
|
@#ifndef Optimal_policy
|
|
@#define Optimal_policy=1
|
|
@#ifndef Ramsey
|
|
@#define Ramsey=1
|
|
@#endif
|
|
@#endif
|
|
|
|
//**********Define whether to use distorted steady state***********
|
|
|
|
@#ifndef Efficent_steady_state
|
|
@#define Efficent_steady_state=0
|
|
@#endif
|
|
|
|
@#ifndef Estimation_under_Ramsey
|
|
@#define Estimation_under_Ramsey=0
|
|
@#endif
|
|
|
|
var C $C$ (long_name='Consumption')
|
|
pi $\pi$ (long_name='Gross inflation')
|
|
h $h$ (long_name='hours worked')
|
|
Z $Z$ (long_name='TFP')
|
|
R $R$ (long_name='Net nominal interest rate')
|
|
log_C ${\ln C}$ (long_name='Log Consumption')
|
|
log_h ${\ln h}$ (long_name='Log hours worked')
|
|
pi_ann ${\pi^{ann}}$ (long_name='Annualized net inflation')
|
|
R_ann ${R^{ann}}$ (long_name='Annualized net nominal interest rate')
|
|
r_real ${r^{ann,real}}$ (long_name='Annualized net real interest rate')
|
|
y_nat ${y^{nat}}$ (long_name='Natural (flex price) output')
|
|
y_gap ${r^{gap}}$ (long_name='Output gap')
|
|
@#if Optimal_policy==0
|
|
Welfare ${W}$ (long_name='Welfare')
|
|
@#endif
|
|
;
|
|
|
|
varexo epsilon ${\varepsilon}$ (long_name='TFP shock')
|
|
;
|
|
|
|
parameters beta ${\beta}$ (long_name='discount factor')
|
|
theta ${\theta}$ (long_name='substitution elasticity')
|
|
tau ${\tau}$ (long_name='labor subsidy')
|
|
chi ${\chi}$ (long_name='labor disutility')
|
|
phi ${\phi}$ (long_name='price adjustment costs')
|
|
rho ${\rho}$ (long_name='TFP autocorrelation')
|
|
@# if !defined(Ramsey) || Ramsey==0
|
|
pi_star ${\pi^*}$ (long_name='steady state inflation')
|
|
alpha ${\alpha}$ (long_name='inflation feedback Taylor rule')
|
|
@# endif
|
|
;
|
|
|
|
beta=0.99;
|
|
theta=5;
|
|
phi=100;
|
|
rho=0.9;
|
|
@# if !defined(Ramsey) || Ramsey==0
|
|
alpha=1.5;
|
|
pi_star=1;
|
|
@# endif
|
|
@# if Efficent_steady_state
|
|
tau=1/(theta-1);
|
|
@# else
|
|
tau=0;
|
|
@# endif
|
|
chi=1;
|
|
|
|
model;
|
|
[name='Euler equation']
|
|
1/(1+R)=beta*C/(C(+1)*pi(+1));
|
|
[name='Firm FOC']
|
|
(tau-1/(theta-1))*(1-theta)+theta*(chi*h*C/(exp(Z))-1)=phi*(pi-1)*pi-beta*phi*(pi(+1)-1)*pi(+1);
|
|
[name='Resource constraint']
|
|
C*(1+phi/2*(pi-1)^2)=exp(Z)*h;
|
|
[name='TFP process']
|
|
Z=rho*Z(-1)+epsilon;
|
|
@#if !defined(Ramsey) || Ramsey==0
|
|
[name='Taylor rule']
|
|
R=pi_star/beta-1+alpha*(pi-pi_star);
|
|
@#endif
|
|
[name='Definition log consumption']
|
|
log_C=log(C);
|
|
[name='Definition log hours worked']
|
|
log_h=log(h);
|
|
[name='Definition annualized inflation rate']
|
|
pi_ann=4*log(pi);
|
|
[name='Definition annualized nominal interest rate']
|
|
R_ann=4*R;
|
|
[name='Definition annualized real interest rate']
|
|
r_real=4*log((1+R)/pi(+1));
|
|
[name='Definition natural output']
|
|
y_nat=exp(Z)*sqrt((theta-1)/theta*(1+tau)/chi);
|
|
[name='output gap']
|
|
y_gap=log_C-log(y_nat);
|
|
@#if Optimal_policy==0
|
|
[name='Definition Welfare']
|
|
Welfare=log(C)-chi/2*h^2+beta*Welfare(+1);
|
|
@#endif
|
|
end;
|
|
|
|
steady_state_model;
|
|
Z=0;
|
|
@# if !defined(Ramsey) || Ramsey==0
|
|
R=pi_star/beta-1; %only set this if not conditional steady state file for Ramsey
|
|
@# endif
|
|
pi=(R+1)*beta;
|
|
C=sqrt((1+1/theta*((1-beta)*(pi-1)*pi-(tau-1/(theta-1))*(1-theta)))/(chi*(1+phi/2*(pi-1)^2)));
|
|
h=C*(1+phi/2*(pi-1)^2);
|
|
log_C=log(C);
|
|
log_h=log(h);
|
|
pi_ann=4*log(pi);
|
|
R_ann=4*R;
|
|
r_real=4*log((1+R)/pi);
|
|
y_nat=sqrt((theta-1)/theta*(1+tau)/chi);
|
|
y_gap=log_C-log(y_nat);
|
|
@#if Optimal_policy==0
|
|
Welfare=1/(1-beta)*(log(C)-chi/2*h^2);
|
|
@#endif
|
|
|
|
end;
|
|
|
|
@# if defined(Ramsey) && Ramsey==1
|
|
//define initial value of instrument for Ramsey
|
|
initval;
|
|
R=1/beta-1;
|
|
end;
|
|
@# endif
|
|
|
|
shocks;
|
|
var epsilon = 0.01^2;
|
|
end;
|
|
|
|
@#if Optimal_policy==0
|
|
//use Taylor rule
|
|
stoch_simul(order=2) pi_ann log_h R_ann log_C Z r_real y_nat Welfare;
|
|
@#else
|
|
@# if !defined(Ramsey) || Ramsey==0
|
|
//use OSR Taylor rule
|
|
|
|
//set weights on (co-)variances for OSR
|
|
optim_weights;
|
|
pi theta/((theta-1)/phi);
|
|
y_gap 1;
|
|
end;
|
|
|
|
//define OSR parameters to be optimized
|
|
osr_params alpha;
|
|
|
|
//starting value for OSR parameter
|
|
alpha = 1.5;
|
|
|
|
//define bounds for OSR during optimization
|
|
osr_params_bounds;
|
|
alpha, 0, 100;
|
|
end;
|
|
|
|
//compute OSR and provide output
|
|
osr(opt_algo=9) pi_ann log_h R_ann log_C Z r_real;
|
|
|
|
@# else
|
|
//use Ramsey optimal policy
|
|
|
|
//define planner objective, which corresponds to utility function of agents
|
|
planner_objective log(C)-chi/2*h^2;
|
|
|
|
//set up Ramsey optimal policy problem with interest rate R as the instrument,...
|
|
// defining the discount factor in the planner objective to be the one of private agents
|
|
ramsey_model(instruments=(R),planner_discount=beta,planner_discount_latex_name=$\beta$);
|
|
|
|
//conduct stochastic simulations of the Ramsey problem
|
|
stoch_simul(order=1,irf=20,periods=500) pi_ann log_h R_ann log_C Z r_real;
|
|
evaluate_planner_objective;
|
|
|
|
@# if Estimation_under_Ramsey==1
|
|
datatomfile('ramsey_simulation',{'log_C'})
|
|
|
|
estimated_params;
|
|
rho,0.5,uniform_pdf, , ,0,1;
|
|
end;
|
|
varobs log_C;
|
|
|
|
estimation(datafile=ramsey_simulation,mode_compute=5);
|
|
@# endif
|
|
@# endif
|
|
@# endif |