SImulation using occbin

Hi everyone,
I did not get a reply in my previous post about deposit fee and using occbin to set constraints for when the deposit fee should apply. In my case it will only apply when the nominal interest rate, i < 1. In this model as mentioned in my previous post, we do implement negative interest rates in times of recession to revive the economy faster (hypothesis). For this setup I am using:

  • a baseline model with ZLB
  • adjusted model with NO ZLB and added deposit fee and CBDC

With that being said. I tried to follow up on Johanne’s advice and ended up with the following codes. But Comparing this to the Gali_chapter_3_ZLB file professor Johannes shared, I get oddly different graphs.

In the ZLB file provided where professor helped me resolve the simulation issue with ZLB (a different model) - I get no numbers. Just graphs. And I am not sure if the grphs look right.

In the Occbinerror file I attached, I now changed and tried to simulate it. I also added more variables into the plotting of graphs. It runs and gives results.

But comparing to your file, Professor Johannes, I am not sure what is correct and mistake here between the two.

I get no numbers anymore only graphs.
My graphs used to have name such as shock nu, z etc. Now they only say occbin simulation

I am looking at the manual also, trying to figure out the mistake
Gali_Chapter_3_ZLB.mod (8.2 KB)
Occbinerror.mod (10.3 KB)

Your implementation does not make sense. You are setting

[name = 'Deposit Fee Activated', bind='tau_bind']
tau_fee = gamma_zero;

That means once you enter the bind regime, tau_fee is always equal to gamma_zero. There is no way for it to ever change convert back to the relax regime.

But previously I tried setting constraint as advised using Occbin:

[name='deposit fee when i < 1 percent']

tau = -gamma* i;

[name = 'Deposit Fee Activated', bind='tau_bind']

tau_fee = gamma_zero;

[name = 'Deposit Fee Activated', relax='tau_bind']

tau_fee = tau;

end;

options_.TeX=1;

occbin_constraints;

name 'tau_bind'; bind tau_fee >= gamma_zero; relax tau_fee < gamma_zero;

end;

Wasn’t this correct? The code worked at that time. I am only missing the tables and matrixes as I got when running the regular file (see old.mod file please)-
Old.mod file hsa baseline Gali 2015 as you have posted with my additions.

However when I use constraint (see Occbinerror.mod) I only get graphs but no longer matrixes and tables.
The point with the constraint is that it does not go lower than zero as long as the interest rate is above 1. However when it goes to 1 I want to apply the negative value (activate deposit fee).

  • So deposit fee is only applied when approaching interest rate of 1 or below. In this model I implement negative interest rates

How can I do this.?
Occbinerror.mod (10.9 KB)
Old.mod (11.0 KB)

If something is unclear please let me know. I now understand that binding constraint should be the one that is at steady state which is tau = gamma_zero
But relax should be tau >= gamma_zero. So I changed that back. But my question about the simulation remains. It still does not produce same matrices, tables as it did when not using occbin (refering to my old.mod file). But in the Occbinerror.mod file it does not. So something has to be added to the simulation I think with the occbin toolkit

  1. OccBin provides a different set of outputs than stoch_simul. There is e.g. the occbin_graph command for plotting. The simulation results are stored in oo_.occbin.
  2. You need to think more carefully about the simulation. The constraint does not make sense at all. The occbin_constraints block specifies the endogenous conditions when the constraint becomes binding and when it becomes slack again. Put differently, for every simulation period, Dynare needs to be able to evaluate the expressions in the block to see whether we are in bind or relax. That is not the case in your setup.

Occbinerror.mod (10.5 KB)
In one of my previous posts, I sent this file (attached in this comment) and it seemd correct, as I remember to have discussed it with you.

So therefore bind is in steady state when deposit fee = 0 but relax when deposit fee = -gamma*i. Because when not steady state and we are in recession we get a deposit fee to avoid hoarding of cash

It seems you are not listening. In that file you have

[name = 'Deposit Fee Activated', relax='tau_bind']
tau_fee = gamma_zero;
end;

occbin_constraints;
name 'tau_bind'; bind tau_fee <=  gamma_zero; relax tau_fee > gamma_zero;
end;

Thus, if the constraint becomes binding, tau_fee = gamma_zero forever. Hence, the relax condition can never be satisfied. My hunch is that your constraint condition should involve i.

I am sorry but I believe I did not understand you earlier. I am now trying to change this. And I truly hope, I got it.

It seems deposit fee is binding correctly - however I am not sure if it actually allows itself to go below zero level.

yes.mod (10.5 KB)

You need to be more careful in explaining your perceived problem. I guess you are referring to tau_fee. Why would it ever fall below zero. It is zero if the ZLB is not binding. If the ZLB binds, you have

tau = -gamma* i; 

[name = 'Deposit Fee Activated', bind='tau_bind']
tau_fee = tau;

Thus, at the ZLB i is negative. You are multiplying a negative number by a negative one -gamma. This will be bigger than 0.

Please check the file. There is no ZLB in this model. this is a DSGE model with no zero lower bound. I allow for negative interest rates.

There is however another model where I have ZLB. The intention is only to run both and show which one recovers faster from a shock. But it has no relation to this specific question here.

The deposit fee is only applied when we have negative interests, so people dont run off to hoard money and avoid the small negative interest rates, hence the deposit fee, to make it no longer beneficial to hoard money. This is only during recessions until we reach a stable economy again.

So tau = -gamma* i because in i_paper = i - tau
i_paper is interest rate on paper while tai is the deposit fee.
Since we subtract “i-tau” and tau only is there when “i” is negative. Then tau becomes a positive number due to negative sign in front of gamma, which is then subtracted in the i_paper equation.

So the Central bank would drop the intrest rates slightly below zero which is when then deposit fee is active. You can look at it as an exchange rate almost, where paper cash and electronic currency is not longer 1:1 ratio, but one is worth less when exchanging (ie. puttin in back or taking out)


Having said this, I believe I understand you correctly now. Deposit fee should never be below zero. Since it will always be zero or positive number due to my negative sign. Sorry If I didn’t explain well enough

I looked at your file and the constraint is a ZLB-type constraint (although the restriction is obviously not on the interest rate but on the fee)

occbin_constraints;
name 'tau_bind'; bind i <=  -(1/betta-1)-1e-8; relax i > -(1/betta-1)+1e-8;
end;

And yes, I was referring to

Yes, correct the restriction is on deposit fee, but whether it is zero or not is defined by the interest rate being above or below 0

One more thing:
If I instead want to have the constraint to be that i =< 1 activates deposit fee I get errors. Is it because I put in a number instead of a equation? If so, how can I do that?

An example of what I tried:
occbin_constraints;
name ‘tau_bind’; bind i <= 1; relax i >1;
end;

or can I do: (Note I remove the negative sign in front of the paranthesis.
occbin_constraints;
name ‘tau_bind’; bind i <= (1/betta); relax i > (1/betta);
end;

  1. Your graphs looked fine but ultimately only the model-builder can judge the validity of results.
  2. Again, your model is linearized, meaning that i_t fluctuates around 0. OccBin requires the constraint to not be binding in steady state. That conflicts with your specification. If necessary, define i_t to be in log levels.

I am sorry to bother you again. I wanted to clarify if you are refering to my last comment on whether I can use 1 as binding and relax constraint… Since nominal interest rate according to Gali’s book is at steady state when = 1, then that means if I only used 1, I would bind it to its steady state. Is this what you mean would be incorrect?

But then my initial setup would then not conflict with my specification?:

[name=‘deposit fee when i < 1 percent’]

tau = gamma* i;

[name = ‘Deposit Fee Activated’, bind=‘tau_bind’]

tau_fee = tau;

[name = ‘Deposit Fee Activated’, relax=‘tau_bind’]

tau_fee = 0;

end;

options_.TeX=1;

occbin_constraints;

name ‘tau_bind’; bind i <= -(1/betta-1)-1e-8; relax i > -(1/betta-1)+1e-8;

Calling steady in your file clearly shows that the steady state of all variables is 0, i.e. a zero deviation from steady state. See also the note in my original mod-file

 Notes:
 *  - all model variables are expressed in deviations from steady state, i.e. in contrast to
 *      to the chapter, both the nominal interest rate and natural output are not in log-levels, but rather mean 0

My apologies, I explained incorrectly, but that the interest rate can fall by (1/beta -1). It is clear to me that we cannot bind in fact when in steady state.

In my previous setup, does this mean I am binding it still to steady state since I write bind i <= -(1/betta -1) -1e-8?: And that by removing the “=” sign I do it correctly by not binding it to steady state

**This was the previous setup:
occbin_constraints;
name ‘tau_bind’; bind i < -(1/betta-1)-1e-8; relax i > -(1/betta-1)+1e-8;

It seems to still not be binding because the linear and piecewise linear are identical except for the deposit fee. However i should be able to see difference between binding and not binding:

  • my steady states are correct

  • I tried big shock size.
    yes.mod (10.5 KB)

  • This means the constraint setup is wrong like this:

  1. We have been over this before. bind i < -(1/betta-1)-1e-8 means that for betta=0.99 the interest rate in deviation from steady state can fall to roughly -0.01 which is clearly not binding in a steady state of 0. Thus, the specification is correct.
  2. For some variables there is a difference. The constraint clearly becomes binding. The issue seems to be that the binding constraint has only an effect on very few variables. It’s most likely an issue with the modeling approach.