The rank condition conundrum

I have a recurring problem with rank condition not being verified - eigen values exceeding forward looking variables. I would like to clarify a few things; at the risk of them possibly being very basic doubts -

  1. How does one decide if a particular variable is predetermined or not. I understand that ‘traditional’ suspects in the most basic models are capital and bonds. But what is the litmus test one needs to ask to check if an endogenous variable is predetermined?

  2. Once we’ve identified pre-determined variables, how should one proceed with timing these variables in Dynare?
    Some papers seem to advocate writing equations that have k(+1) or B(+1) on the LHS. The Dynare manual then advises to add a command “predetermined_variables” at the beginning of the code.
    e.g. k_hat(+1)=(1-delta)k_hat+(delta(i_hat+tau_i_hat)); or (b_ssb_hat(+1))=((1+r)b_ss(b_hat+r_hat-pie_hat(+1)))+(g_ssg_hat)-(t_ss*t_hat);

Other papers avoid using (+1) for any equation involving predetermined variables.

The Dynare manual says that both should lead to the same result conceptually. Except that in my code that isn’t the case! The eigen values are different in each case (and rank condition unsatisfied). Is there a best practice to adopt for timing predetermined variables?

  1. Finally, for fulfilling rank condition with insufficient variables, can I consider ‘definition’ equations in my model and modify their timings? For instance, when one defines domestic inflation: pie_h_hat=pr_h_hat-pr_h_hat(-1)+pie_hat; can we instead rephrase this as pie_h_hat(+1)=pr_h_hat(+1)-pr_h_hat+pie_hat(+1); simply to generate the adequate number of forward looking variables?

Any help with these questions would be much appreciated.


  1. Economic intuition provides the answer. Any variable that can be endogenously changed within the current period is not predetermined. Take today’s capital stock. It is predetermined, because you cannot change it within the current period when e.g. the TFP shock realizes. Rather, it was decided through yesterday’s investment choice. This is what makes it predetermined. So ask yourself: if a shock at time t realizes, can this variable still react/be chosen to reflect the shock realization.

  2. This is a matter of notation. Dynare internally uses the stock at the end of period notation where k(-1) enters the production function. Most papers present the model using the stock at the beginning of period notation where k enters the production function. You can use this timing convention together with the predetermined_variables command. It does not matter which convention you use as long as you are consistent. Simply use the notation of the paper you are following. If results are not the same, you did not succeed in shifting the timing of all affected variables correspondingly.

  3. No, you cannot simply switch the timing to make the model run. There is one and only one unique correct timing dictated by economic intuition. You need to find it. Usually it is best to start from a simple running version of the model and then add features to it. Thereby you can control in every step what is going on.