Time-varying effective lower bound


I am trying to estimate a DSGE model using UK data, 1997-2020. I am using the new OccBin features in Dynare 5.0, including an effective lower bound on the nominal interest rate.

A unique challenge with the UK data is that the effective lower bound is time varying. Up until 2016, the ELB was believed to be 0.5%, and the Bank of England set interest rates at that level after the financial crisis. After 2016 however, the Bank introduced the “term funding scheme”, a complicated conditional subsidy to financial institutions desgined to allow them to pass on a further cut in the interest rate through to households (see Nardi et al 2018 for a full outline).

As a result, the bank’s percieved ELB changed from 0.5% to 0.25%. My question is, is there a way to allow the ELB to be time-varying when conducting my estimation? Or is there some other recommended workaround? My current solution is simply to pretend that interest rates were 0.5% after 2016, but this is clearly unsatisfactory.

With thanks,
Jacob Stevens

I am not entirely sure I understand the conceptual issue. From the point of view of the model, the ELB is the point where money and bonds becomes perfect substitutes so that the interest cannot fall any further. Whether the central bank correctly estimates/perceives that level, is usually irrelevant. We see in many advanced economies that interest rates can become quite negative as it is costly to hold cash. It seems like the BoE never really tested that bound. They rather focused on affecting the pass-through of monetary policy to private sector interest rates (aka the spread). So I am not sure that the matter is really one of changes in the ELB or in the implied shadow rate.

I think I would define the ELB differently - in this context, it is the lower limit on the Central Bank’s reaction function for short term interest rates. What we are really doing is specifying a policy function for the central bank - they set the short run interest rate at either a rate i_{taylor} or a rate ELB, whichever is higher. One source of this lower limit on the CBs reaction might be cash/bond substitution, but this is not necessarily the only factor driving the ELB. In this case, the Bank of England believed it could not lower the short run rate further than 0.5% without risking financial instability (Nardi et al 2018). Later, they felt that the Term Funding Scheme had chnaged this situation, and they could lower it further (ibid).

To summarise: conceptually, the ELB (here) is the lower limit on the Central Bank’s reaction function, a discontinuity in the policy rule. This discontinuity can be time-varying, and was for the BofE.

EDIT: I suppose another way of thinking about this is as a strucutural shock to the policy rule. Pre-2016, the BofE follower the policy rule i_t = max(i_{Taylor}, 0.5\%). From 2016, there was a strucutral shift to a new policy new i_t = max(i_{Taylor}, 0.25\%).

I see. So this is a one-time permanent regime change that was not anticipated. In this case, you may be able to specify a unit-root shock that shifts ELB.
We haven’t tried whether this works in Occbin, but you may want to give it a try.

Yes, a unit-root shock that shifts the ELB should work.

Many thanks, I will give this a try.

One further clarification on the use of a unit root with OccBin - when I call the command:

       name 'ELB'; bind iSR < 0.001247663; relax iT - 1e-06*vr_s1*Ups > 0.001247663;

occbin_setup(likelihood_max_kalman_iterations = 50, more_options_here_in_full_modfile...);

estimation(datafile=data_Hamilton, mode_check);

I get the error “Blanchard & Kahn conditions are not satisfied: no stable equilibrium”. This is only the case after I introduce the unit root (as expected). If I instead run a stochastic simulation using the same modfile, there is no error. To make dynare run the estimation, the estimation call needs to include “diffuse_filter” as below:

estimation(datafile=data_Hamilton, mode_check, diffuse_filter);

That is, I need to manually call a diffuse_filter for the estimation. My understanding from Giovannini, Pfeiffer and Ratto (2021) is that the PKF filter used by Occbin should be diffuse by default, i.e. the PKF filter now used by Dynare for Occbin estimation should always be diffuse by construction. By including the “diffuse_filter” option here, am I inadvertently calling a different filter to the standard PKF outlined in GPR?

Could you please provide me with the file to replicate the issue?

PH5_MWE.zip (1.3 MB)

I attach a zipfile containing a (simplified) version of my model, with a file AA_contents.txt explaining the various files. Most important are run.m (invoking Dynare), PH.mod (primary modfile), and estimation_bayes.m (suplementary modfile setting up the priors and invoking estimation() ). Many thanks for having a look, please do let me know if you need any further simplifications made.

In case anyone else has the same issue and finds this - the solution was to set the “lik_init = 3” option in the estimation command, as otherwise Dynare sets the qz_criterium below one. This seems to be specific to Occbin as dynare_estimation_init.m normally uses the kalman_algo option to decide on lik_init (which is left as default when using Occbin).

Thanks for pointing this out. This looks like a bug that I will investigate further.

I added a ticket at Occbin: clarify combinations of filters and initializations (#1855) · Issues · Dynare / dynare · GitLab