Two shocks shock_matrix

Hello all,

Below I’m sending an adaptation of this example code by Prof Pfeifer. I have two shocks (both unanticipated) and I’m trying to understand two very simple things.

i. When I only have a single shock (e_t), why is the output in the log_y_et vector not matching the y_IRFmodel025csolo output (row 15 for log_y_et)? (ps. I can confirm that both systems received the same shock by comparing row 11 to ttau_et. However, the same is not true for the outcome variables.)

ii. How can I generate a negative shock? I have tried different alternatives, yet I still have the problem of getting different values which confuses me a lot. Should I be changing signs in the .m file or in the shock_matrix line? (as both again are giving different numbers)

For instance, if I use
“shock_matrix(1,strmatch(‘et’,M_.exo_names,‘exact’)) = - 0.5
I do not think this is really generating me a negative tax shock since output (again row 15 in y_IRFmodel025csolo) seems to respond negatively to a tax cut. In contrast, when I do the sign flip of the shock in the .m file without the use of shock_matrix, I get a negative tax shock increasing output, which sounds more right economically.

I appreciate any helps on this, thank you so much for your time and consideration.


ModelC_order2_steadystate.m (2.3 KB) ModelC_order2.mod (3.3 KB)

Also, I have forgot to phrase that tax shock hits at time t and monetary policy shock hits at time t+10.

Many thanks!

I’ve just noticed the third documents was not uploaded. Please find attached.

Dynare_9.17.m (1.9 KB)

  1. You are using a second order approximation. Dynare will by default use generalized IRFs, i.e. integrate over future shocks. In contrast, simult_ will only give you one simulation path (where you shut off all future shocks).
shock_matrix(1,strmatch('et',M_.exo_names,'exact')) = -0.5; % only tax shock.

will give you a negative shock of size 0.5.

Thank you Prof. Pfeifer.

On point 1. That clarifies that they are not really comparable. Although, I would have thought they would be comparable in a single, one-off shock setting.

I have one more related question. When I simulate the same shock but opposite sign like

a. shock_matrix(1,strmatch(‘et’,M_.exo_names,‘exact’)) = -0.5;
b. shock_matrix(1,strmatch(‘et’,M_.exo_names,‘exact’)) = 0.5;

One is a tax cut, and the other is a tax increase. simult_ returns me the outcome of output falling in both scenarios. On the other hand, stoch_simult suggest that tax cut would clearly increase output.

Why is simult_ not generating an output increase as in stoch_simult? Is there any way to make it do that?

Thank you very much!
Danke Schon!

  1. The GIRF is not a single one-off shock setting.
  2. You are plotting IRFs as a deviation from the deterministic steady state, but the system should converge to the stochastic steady state. Thus, your responses look weird. Moreover, your variance are crazy big, if I see it correctly. Note that at order>1, you must not scale by 100.

Dear Prof Pfeifer,

Thank you for the clarification. Indeed, lowering the variance scale has helped a lot with the impulse responses.

Is it possible to plot IRF as a deviation from stochastic steady state? I would like to compare them to the deterministic versions.

Best regards,


Dear Prof Pfeifer,

The code was very helpful, thank you so much. I have a generic follow-up question on this exercise. When I do a tax cut and a tax increase using second order approximation, I get a much larger effectiveness of a tax increase than a tax cut. Is there a simple explanation why this might be the case?


I am not aware of a simple explanation beyond the generic “nonlinearities may matter”.