Blanchard-Kahn conditions: indeterminacy

I’m running a relatively simple ‘q’ investment model, with an AR(1) shock in the log of TFP. The supply side is a bit complicated so there are 12 equations, but capital is the only endogenous state variable. I solve for the steady state, but then doing a stochastic simulation I get

Error using print_info (line 45)
Blanchard Kahn conditions are not satisfied: indeterminacy

Error in stoch_simul (line 98)
print_info(info, options_.noprint, options_);

Error in investment_Nov2015 (line 197)
info = stoch_simul(var_list_);

Error in dynare (line 180)
evalin(‘base’,fname) ;

After looking at some related posts here, I tried running model_diagnostics(M_,options_,oo_), but that didn’t return anything. I am relatively inexperienced with Dynare, so I can’t rule out some really dumb mistake (hopefully not in the economics), but hoping for some insight. I’ve attached the code as a plain text file.
investment_model.txt (1.08 KB)

It seems you are violating Dyare’s timing convention for predetermined states like capital (see the manual). Try using

predetermined_variables k;

Thanks, that worked! Somehow had missed that in the manual. :blush:

So I have a followup question, which may be more mathematical than Dynare, and since this thread is a couple weeks old I’m not sure if this will be seen, in which case I’ll create a new topic. I am surprised that changing the timing affects the dynamic stability of the model. Specifically, I tried making a control variable pre-determined (either by using the “predetermined variables” statement or by changing the timing in the model) and I got the error

Error using print_info (line 42)
Blanchard Kahn conditions are not satisfied: no stable equilibrium

The intent of making the control variable pre-determined is simply to have it respond (essentially) to the expected value of the shock rather than to the actual realization of the shock. That would obviously change the IRF, but why would turn the model into one that has “no stable equilibrium”?

I suppose this is related to the original question, but I didn’t care so much because changing the timing solved the problem. In this case a change in timing created a new problem. Thanks in advance.

Your model needs as many stable roots as predetermined variables to have a saddle path solution. When you alter the timing, this balance gets destroyed. You will not be on the stable manifold anymore. The reason has to do with difference equations. See the attached slides from my lecture.
BK_conditions.pdf (249 KB)

Thanks, but I think I am talking about something slightly different. I am not changing a control variable into a state variable, just changing the information set. In a LQ model, for example, one can get a solution for the control variable as a function of the state variables and the current shock. If the control has to be chosen before the current shock is realized, the solution is essentially the same except the realized value of the shock is replaced by its expectation. So in the attached textbook LQ investment model, instead of I = (1/b)q as the solution for I, it would be I = (1/b)E_{t-1}(q), but the fundamental properties of the model are preserved. Somehow changing the timing in the dynare program does something different, though. (As I said, I tried both the “predetermined” statement and directly changing the timing in the model.) Thanks again.
Investment_LQ.pdf (59.5 KB)

You seem to be confusing something. If a variable has to be chosen before the shock realizes, it becomes predetermined. There are cases like the one you attached where this change in timing does not sufficiently change the eigenvalues to change the uniqueness/determinacy properties. For example in the New Keynesian model, you often can have the central bank reacting to expected inflation instead of realized inflation without changing the determinacy. But this is not a general property of any model. For each case you have to check whether making a variable predetermined is problematic.

I appreciate your responses, so I don’t wish to seem argumentative, but I don’t think this is not confusion on my part. It’s not just that the eigenvalues don’t change “sufficiently” in some models. In LQ models like the one I attached they do not change at all if the model timing changes, due to certainty equivalence. That is a mathematical fact. Yet if I change the timing in dynare, even for the simple LQ model such as the one I attached in my last post, I get the message

Error using print_info (line 42)
Blanchard Kahn conditions are not satisfied: no stable equilibrium

So I think this is an issue about dynare syntax (about which I will happily admit I may be confused), not about the mathematics of difference equations. I am hoping there is some trick that allows me to change the timing of what information the decision-maker has, that does not result in the above error.

Specifically, In the simple LQ model, the equations are

aY - k - q + betq(+1) = 0;
bI - q = 0;
k = k(-1)*(1-del)+I;

where u is the shock. This model solves correctly in dynare. My question is this: How would I code it to make “I” chosen before u and q are known? Declaring I predetermined or changing the timing in the equations results in the “no stable equilibrium” error, even though as I say the eigenvalues are unchanged. Thank you.

Maybe I do not understand your question/the setup of your problem, but it is almost impossible that the eigenvalues do not change. After linearization, you can represent any problem that can be solved with stoch_simul in the generic matrix form

By changing the timing in Dynare, you moved one entry of the left-hand side to the right-hand side. This will in general affect the eigenvalues of this linear difference equation. This has nothing to do with certainty equivalence.

1 Like

Thanks, I think we are talking about different things. I realize that for the simple LQ model I posted on 11/18, what I want is easy: Just replace

b*I - q = 0


b*I - EXPECTATION(-1)(q) = 0.

For some reason it wasn’t quite so simple in the more complicated model I’m actually working with, but I think I understand the syntax better now and will take a stab at figuring it out. Sorry for any confusion and thanks for your efforts.

1 Like

I think the most important thing is that you understand the timing structure in your model and how it maps into the typical timing convention in recursive linear solutions. What you outline in your solution is to introduce an auxiliary variable of the type often occuring in e.g. models with Epstein-Zin preferences.

Hi all,
I have the same problem. But I do not know how to fix it.

Error using print_info (line 45)
Blanchard Kahn conditions are not satisfied: indeterminacy

Error in print_info (line 45)
error([‘Blanchard Kahn conditions are not satisfied:’ …

Error in initial_estimation_checks (line 69)
print_info(info, DynareOptions.noprint, DynareOptions)

Error in dynare_estimation_1 (line 179)
oo_ = initial_estimation_checks(objective_function,xparam1,dataset_,M_,estim_params_,options_,bayestopt_,oo_);

Error in dynare_estimation (line 89)

Error in nahayi (line 674)

Error in dynare (line 180)
evalin(‘base’,fname) ;

Plz help me;

As always:

  1. Check your timing
  2. Without the mod-file it is impossible to provide any further diagnostics.
1 Like

Hello professor
I have a big problem with Dynare. Whenever I want to run my model I face this message :

Error using print_info (line 32)
Blanchard & Kahn conditions are not satisfied: indeterminacy.

Error in stoch_simul (line 103)
print_info(info, options_.noprint, options_);

Error in blank.driver (line 289)
[info, oo_, options_, M_] = stoch_simul(M_, options_, oo_, var_list_);

Error in dynare (line 293)
evalin(‘base’,[fname ‘.driver’]) ;

Could you help me?

Without the mod-file it is impossible to tell.

How to judge what variables are the predetermined variables?

Based on economic intuition: when something cannot be altered at time t, it cannot be predetermined.

Can we think that all state variables are predetermined variables?

Yes, all endogenous state variables are predetermined variables.