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