Using "unit_root_vars"

The attached small non-stationary teaching model runs perfectly under Dynare 4.4.0, although producing the
"WARNING: mod1.dyn:39.1-41: ‘‘unit_root_vars’’ is now obsolete; use the ‘‘diffuse_filter’’ option of ‘‘estimation’’ instead*
Note that the model is only simulated, not estimated, and there appears to be no option in “stoch_simul” equivalent to ‘‘diffuse_filter’’.

However, commenting out the “unit_root_vars” line causes the model to crash with the message
“The steadystate file did not compute the steady state”

Is this behaviour a bug or something more subtle?

Regards
Donihue
mod1.mod (607 Bytes)

The behavior without the diffuse_filter option is correct. If your model has a unit-root, there are infinitely many steady states and you need to tell Dynare which one to use. You did so using the steady_state_model-block. But the the provided steady state is not a steady state, hence the error message.

The bug is that when you use the diffuse_filter option, the correctness of the steady state is not checked as options_.steadystate.nocheck
is set to 1. The displayed IRFs and the model solution are computed at values that are not a steady state.

Hi,

A model containing a random walk with drift has no steady state. But conditional on this variable (if this variable is the only trend in the model) the model admits a steady state. In your case,
you chose arbitrarily a value for the steady state of the trended variable (lgdp_eq) which is wrong by definition, and conditionally on this you set the steady state of the other variables accordingly. Your approach is correct. But you should not use the unit_root_vars command (which is deprecated), you should not use the resid command because you know that your steady state is wrong (or just to check that the residuals of the static equations are zero except for the equation with the random walk with drift for lgdp_eq). If you remove theses two commands and add the option nocheck to the steady command, your mod file will run fine. You just have to replace:

steady;

by

steady(nocheck);

Dynare will then set the steady state by considering what you defined in the steady state block and will not check that this steady state is correct.

Best,
Stéphane.

Thank you both, Johannes and Stéphane, for your replies, which seem to confirm my suspicion that one can set almost anything at all (even values wrong “by definition”) as steady-state values so long as “steady” does not “check”, which seems to be what the obsolete “unit_root_vars” command ensures.

Stéphane, could you possibly enlighten me as to why one must also remove the “resid” command to get the model to work with “steady(nocheck)”?

Regards
Donihue

I guess because only the steady command with nocheck actually sets the option. If you want to use resid(1) for the display, put

[quote]options_.steadystate.nocheck=1;
[/quote]

before it.

Thank you, Johannes. That did indeed work.

Is there a reference somewhere for the various possible “options_” in a mod file?

Regards
Donihue

No, there isn’t as many options are rather only for internal use, depending on certain commands (like this one). The closest thing is looking at global_initialization.