How to read IRF in Dynare


I have a simple NK model with asset returns. Here is the code. I am not sure how to read the IRF output from Dynare.

For example, in the IRF graph, one standard deviation monetary policy shock(-15 bps quarterly) corresponding to 0.002 increase in log returns. Is this 20 bps changes in return? How to convert to annually? So, 15 bps quarterly ==> 60bps annually for monetary policy shock and 0.002*4 = 0.008 or 80 bps increase in asset return?


var x y y_n div m re_div p_d pi i a;

//structural shocks


beta sigma phi
theta delta epsilon mu kappa
i_pi i_x sigma_i rho_i i_bar
rho_a mu_a a_bar sigma_a;

beta =0.98;
sigma =1; // risk aversion
phi =0.35; // Utility parameter on Labor N(t) – Inverse of Frisch labor elasticity

a_bar = 0.0047; // long run growth rate of productivity 0.0047
mu_a =a_bar*(1-rho_a);
rho_a = 0.8; // persistency of log TFP

delta = 1; // leverage ratio
epsilon = 6; // goods aggregation parameter
mu = log(epsilon/(epsilon-1));
theta =0.65; //price dispersion
kappa =(1 - theta )(1 - theta * beta )( sigma + phi )/ theta;

i_pi = 1.5; //1.5
i_x = 0.125;
rho_i = 0.63; //interest rates smoothing
i_bar = - log(beta); // constant in the policy rule - make DIS equation stationary & x_ss = 0

sigma_a = 0.1; //0.202 Gourio(2012)
sigma_i = 0.183/(i_x*(1-rho_i)); //0.151

x = x(+1) - 1/ sigma (i - pi(+1) + log(beta) + sigma(1-rho_a)(1+phi)(a - a_bar)/(sigma+phi) ); //DIS
pi = kappa * x + beta * pi(+1); //NKPC
i = rho_ii(-1) + (1-rho_i)(i_bar + i_pi*(pi) + i_x* x - i_x*(sigma_i/100)*eps_i ); //Taylor

a = (1-rho_a)a_bar + rho_aa(-1) + (sigma_a/100)*eps_a; //State Equation - Permanent log(TFP)

//////update here
// Asset Pricing
y_n = a*(1+phi)/(sigma+phi) - mu/(sigma+phi); // log nature output level
y = x + y_n; // log output level
div = (1+phi)a - (sigma+phi)y; // firm real profit, or dividend
exp(m) = beta
(y-y(-1))); // log pricing kernal

exp(re_div) = (1 + exp(p_d))exp(deltadiv)/(exp(p_d(-1) + delta*div(-1)));
1 = exp(m(+1)+re_div(+1));

end ;

x = 0;
pi = 0;
y_n = a_bar*(1+phi)/(sigma+phi)- mu/(sigma+phi);
y = a_bar*(1+phi)/(sigma+phi)- mu/(sigma+phi);
div = mu;
m = log(beta); //log(beta)-sigma*a_bar
re_div = - log(beta);
p_d = log(beta/(1-beta)); //
i = i_bar;
a = a_bar;


var eps_a = 1;
var eps_i = 1;

stoch_simul(irf=40) re_div p_d div m x y y_n pi i;

Hi Max,
generally it’s up to you to decide the timing in your model. If you whant you can define the interval between t and t+1 as one year, one month or one quarter. Clearly, the parametrization must cange. Generally, and it is the case of your model I think, people set the interval to one quarter.
Dynare than computes IRF as distance from the steady state of the trayector of the variable following the shock, after having applied a first order taylor approximation of the model around the steady state.
For example, an IRF that after one period goes to i.e. +1 tells you that after one period, your variable of interest is 1% higher than its steady state value.
It is trivial for you, because Dynare gives the steady state value of each vairable, to retrieve the couresponding value in absolute terms. Note that this result is conditioned upon a first order approximation. If you are dealing with higher order moments you may prefere a second or a third order (that are supported directly on dynare) or an even higher order (that you have to computer yourself, but to my knowledge nobody has ever needed that).
To come to your last point, to go from quarterly data to annual data you need to annualize everything. The correct equation generally is (depends on the capitalization method):


but most of the times your approximation is sufficient.

Hope it is useful


Hi Massimo,

Thanks for help. So basically you mean, for a 15 bps monetary shock, if I get 0.002 in the y axis (in the IRF figure) for stock returns, this will mean I get a 0.00002*stock_return_stead_state value percentile changes in stock return? this is going to be a very small number, seems not right, isn’t it?


If you get 0.002 on the y axis it means that (in that period) your variable of interest (in this case the stock price) is 0.002% higher than its steady state, so basically if you have simulated a 15 bp increase of the target rate that is the effect.
However, I’ve tried to run your mod file and I found a couple of issues.
First, one parameter is not initialized correctly; it is mu_a, check that out. IN dynare you can initialize parameters as combinations of other parameters, as you did, but first you have to declear their values. In your case, mu_a depends on 2 parameters. One is decleared before mu_a the other after. When dynare compiles the file, it gives values to parameters in the order with which you decleare them.
So when it arrives to mu_a, that is made of something he knows (a_bar) and something he ignores (rho_a), is not able to assigne a value to it.
Secondly, you are speaking of a 15 b.p. increment in the policy rate. Your variance is of 1 and is multiplied by 2 parameters, I did not made the calculation, but are you sure that the final outcome is 15 b.p.?
I suggest you try to solve the issue with the parameter and try again to run your model.

More fundamentally, you should not be doing asset pricing in a partially linearized model. Asset prices depend on higher order properties that are washed out of the model when you linearize (unless you do log-linear asset pricing as Jerman /1998) did).

And to answer the original question: if your model is quarterly, an interest rate shock of 0.0015 (15 basis points) will correspond to an annualized change in the interest rate of 4*0.0015=0.006=0.6%.
When the log return increases by 0.002 that is 20 basis points in quarterly terms and 80 basis point in annual terms.