From 74fdf8230a6e5caeca20637808b9362f4a9f00de Mon Sep 17 00:00:00 2001 From: Johannes Pfeifer <jpfeifer@gmx.de> Date: Sat, 1 Mar 2025 19:48:34 +0100 Subject: [PATCH] :bug: fix loop in kalman_update_engine.m if regime_start hits 0 Closes #1956 --- matlab/+occbin/kalman_update_engine.m | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/matlab/+occbin/kalman_update_engine.m b/matlab/+occbin/kalman_update_engine.m index 3459a26712..18ea281e74 100644 --- a/matlab/+occbin/kalman_update_engine.m +++ b/matlab/+occbin/kalman_update_engine.m @@ -109,6 +109,7 @@ if info==0 newstart = regx(1).regimestart(end); diffstart = newstart-oldstart; regname = 'regimestart'; + reg_string = 'regime'; else newstart1 = regx(1).regimestart1(end); newstart2 = regx(1).regimestart2(end); @@ -118,11 +119,13 @@ if info==0 switch diffregime case 1 regname = 'regimestart1'; + reg_string = 'regime1'; case 2 regname = 'regimestart2'; + reg_string = 'regime2'; + end end end -end if options_.occbin.filter.use_relaxation && diffstart>options_.occbin.filter.use_relaxation guess_regime = [base_regime base_regime]; options_.occbin.filter.guess_regime = true; @@ -132,9 +135,15 @@ if options_.occbin.filter.use_relaxation && diffstart>options_.occbin.filter.use % we reduce length until the converged regime does not change guess_regime(1).(regname)(end) = regx2(1).(regname)(end)-1; - if guess_regime(1).(regname)(end-1)==guess_regime(1).(regname)(end) - guess_regime(1).(regname)(end-1) = guess_regime(1).(regname)(end-1)-1; - end + if guess_regime(1).(regname)(end)==1 + % make sure we enforce base regime + guess_regime(1).(regname)=guess_regime(1).(regname)(end); + guess_regime(1).(reg_string)=0; + else + if guess_regime(1).(regname)(end-1)==guess_regime(1).(regname)(end) + guess_regime(1).(regname)(end-1) = guess_regime(1).(regname)(end-1)-1; + end + end if is_multivariate [ax2, a1x2, Px2, P1x2, vx2, Tx2, Rx2, Cx2, regx2, info2, M_2, likx2, etahat2, alphahat2, V2] = occbin.kalman_update_algo_1(a0,a1,P0,P1,data_index,Z,vv,Y,H,Qt,T0,R0,TT,RR,CC,guess_regime,M_,dr,endo_steady_state,exo_steady_state,exo_det_steady_state,options_,occbin_options); else -- GitLab