Occbin Toolkit for Zero Lower Bound

Hello everyone,

I am trying to solve a small-scale NK model at the ZLB using the OCCBIN toolkit (Guerrier and Iacoviello 2015).

I might have understood the toolkit wrong.
In my model, I assumed the gross short-term rate(Rs, deposit rate) to be one for hitting the zero lower bound (model_childwork_ZLB.mod) while the benchmark model follows Taylor-type rule (model_childwork_noZLB.mod)

I am trying to compare easing monetary policy between the conventional monetary policy (short-term interest rate instrument, Rtr) and the unconventional monetary policy (quantitative easing, QE).


What I am still unsure is how much big each shock should be to drive the economy ZLB, and how do you know to quantify this?
For my model, I tried to give negative credit shocks (‘et’) for periods 1 to 6, and then give expansionary shock at period 7 for either conventional one (‘er’) or unconventional one (‘eq’).

My IRF however shows that real short rate, instead of nominal short rate, is binding to zero. But my constraint, if met my purpose, should show that the nominal short rate doesn’t move during the zero lower bound.
Are my constraints incorrectly written, or can you tell me where my problem lies? Also, I would like to know whether the shock I assigned actually made the economy binding. How can I know that?

exe_work_ZLB.m (6.6 KB)
model_childwork_ZLB.mod (11.5 KB)
model_childwork_noZLB.mod (11.5 KB)
param_ZLB.mat (2.6 KB)param_save.m (10.2 KB)


let me start commenting on your codes.

  1. I would use the shadow rate within the constraints.
    E.g. constraint = 'Rtr< 1-Rss'; or alternatively constraint = 'Rtr<-log(Rss)';
    Both are equivalent at first order.

  2. Within the mod-file of the alternative regime (model_childwork_ZLB.mod) you do not need to set any parameter values. Also stoch_simul, steady, resid, check, the initval-block etc. is not required there (and not reasonable).

  3. At the first glance, one might think that your model does not compute the steady state correctly. But this is not the case. If you enter the resid; command into the baseline regime (model_childwork_noZLB.mod), Dynare displays zero residuals.

  4. If your model is well behaved maxiter=10; should be sufficient.

You are computing the difference between two IRFs. Therefore, it would be easier to see if you additionally plot the interest rate without differencing.

There are many ways to figure this out.

An easy way would be drawing the interest rate for the baseline sequence (without differencing with a second simulation). E.g. figure, plot(1:nperiods,sim_zlb_exo(:,p_lnRs))

1 Like

I cannot be grateful enough for your detailed comments, thank you!!!

Hi, I just have a quick question. If my irf shows that the ZLB wasn’t binding for the period I intended,what are the ways to handle that? Increase negative shock size?

Thanks again for your time!

As far as I can see the ZLB is binding.
You can verify this by setting a breakpoint in the file solve_one_constraint.m for example in line 181.
You will see that violvecbool_ will have ones, which indicates the zlb is binding.

But there is something strange going on in your model.
In periods when the ZLB is binding the interest rate Rs is constant at some small positive value. This is obviously a mistake since the IRF of Rs should equal -log(Rss)=-0.0050 during the ZLB periods.

@jpfeifer can this be a numerical issue?

Now I see the issue. The steady state of the Rs is 0.9881. This is not equal to Rss=1.0050 .
Therefore, the IRF of Rs is at 1- 0.9881 during the ZLB periods.
It seems to be the case that Dynare found a steady state with a negative interest rate. But this steady state is not the desired one.

1 Like