Inconsistent IRFs: Mixing log() and Level Equations in Dynare Model Block?

Hi all,

I’m running into weird IRFs in my closed-economy NK DSGE (Rotemberg prices, indexation, Taylor rule with smoothing, capital, AR(1) log-shocks, etc.). My impulses to a 25 bp rate hike are too sharp, interest rate actually falls on impact, and converge monotonically, and inflation troughs in 1–2 quarters rather than 3–6.

I’ve realized that inside my model; … end; block I mix level equations and explicit logs. For example:

  // production in levels
  y      = a * k(-1)^alpha * n^(1-alpha);

  // “gap” defined as growth in logs
  x      = log(y) - log(y(-1));

  // Taylor rule in part-log, part-level
  i      = rho_i * i(-1)
         + (1 - rho_i)*(phi_pi*log(pi) + phi_x*x)
         + eta_i;

  // AR(1) TFP in logs
  log(a) = rho_a * log(a(-1)) + eps_a;

  1. Does Dynare’s linearization “see” these mixed units as inconsistent, so that IRFs get mis-scaled/falsely signed?
  2. If so, what’s the cleanest way to avoid it? (Rewrite all equations in logs?)
  3. Are there any standard diagnostics or warnings I’m missing that would flag this mix in the model block?

I’d appreciate any guidance (or references) on best practice here, thanks!
nk_v4.mod (4.3 KB)

The mixing of logs and levels seems fine. What you report may not be too unusual. It has been discussed e.g. at Positive monetary policy shock with nominal interest rate falling?

Thank you for your reply Prof. I asked you a question on the post you mentioned, because I have a decline in the real interest rate too.

I defined it as r_real = r/pi(+1) where r is the gross nominal interest rate (1 + central bank rate) and pi is the gross inflation.

I replied in that post. I don’t know the answer but the reference there may help.