1) if not using relaxation, initial guess regime in verify step(occbin simul) is set equal to the guess regime used to updated states and shocks

2) fixed treatment of periodic solution in algo=3, now harmonized to algo=1
trust-region-mex
Marco Ratto 2021-07-21 16:45:35 +02:00
parent d3e5e7b8ef
commit 85e35b1654
2 changed files with 16 additions and 6 deletions

View File

@ -194,7 +194,9 @@ if any(myregime) || ~isequal(regimes_(1),regimes0(1))
else else
opts_simul.endo_init = alphahat(oo_.dr.inv_order_var,1); opts_simul.endo_init = alphahat(oo_.dr.inv_order_var,1);
end end
% opts_simul.init_regime=regimes_(1); if not(options_.occbin.filter.use_relaxation)
opts_simul.init_regime=regimes_(1);
end
if M_.occbin.constraint_nbr==1 if M_.occbin.constraint_nbr==1
myregimestart = [regimes_.regimestart]; myregimestart = [regimes_.regimestart];
else else

View File

@ -128,7 +128,7 @@ if M_.occbin.constraint_nbr==1
else else
myregime = [regimes_.regime1 regimes_.regime2]; myregime = [regimes_.regime1 regimes_.regime2];
end end
regime_hist = {regimes0}; regime_hist = {regimes0(1)};
if M_.occbin.constraint_nbr==1 if M_.occbin.constraint_nbr==1
regime_end = regimes0(1).regimestart(end); regime_end = regimes0(1).regimestart(end);
end end
@ -180,7 +180,7 @@ if any(myregime) || ~isequal(regimes_(1),regimes0(1))
CC(:,2)=ss.C(my_order_var,1); CC(:,2)=ss.C(my_order_var,1);
end end
newguess=0; newguess=0;
regime_hist(niter) = {regimes_}; regime_hist(niter) = {regimes_(1)};
if M_.occbin.constraint_nbr==1 if M_.occbin.constraint_nbr==1
regime_end(niter) = regimes_(1).regimestart(end); regime_end(niter) = regimes_(1).regimestart(end);
end end
@ -199,7 +199,9 @@ if any(myregime) || ~isequal(regimes_(1),regimes0(1))
opts_simul.endo_init = alphahat(oo_.dr.inv_order_var,1); opts_simul.endo_init = alphahat(oo_.dr.inv_order_var,1);
end end
% end % end
% opts_simul.init_regime=regimes_(1); %% why don't we use this ??? if not(options_.occbin.filter.use_relaxation)
opts_simul.init_regime=regimes_(1);
end
if M_.occbin.constraint_nbr==1 if M_.occbin.constraint_nbr==1
myregimestart = [regimes_.regimestart]; myregimestart = [regimes_.regimestart];
else else
@ -212,7 +214,7 @@ if any(myregime) || ~isequal(regimes_(1),regimes0(1))
regimes_ = out.regime_history; regimes_ = out.regime_history;
if niter>1 if niter>1
for kiter=1:niter-1 for kiter=1:niter-1
is_periodic(kiter) = isequal(regime_hist{kiter}, regimes_); is_periodic(kiter) = isequal(regime_hist{kiter}, regimes_(1));
end end
is_periodic = any(is_periodic); is_periodic = any(is_periodic);
if is_periodic if is_periodic
@ -288,7 +290,13 @@ if error_flag==0 && niter>options_.occbin.likelihood.max_number_of_iterations &&
CC(:,2) = CCx(:,end); CC(:,2) = CCx(:,end);
[a, a1, P, P1, v, Fi, Ki, alphahat, etahat] = occbin_kalman_update(a,a1,P,P1,data_index,Z,v,Y,H,QQQ,TT,RR,CC,Ki,Fi,mm,kalman_tol); [a, a1, P, P1, v, Fi, Ki, alphahat, etahat] = occbin_kalman_update(a,a1,P,P1,data_index,Z,v,Y,H,QQQ,TT,RR,CC,Ki,Fi,mm,kalman_tol);
opts_simul.SHOCKS(1,:) = etahat(:,2)'; opts_simul.SHOCKS(1,:) = etahat(:,2)';
opts_simul.endo_init = alphahat(oo_.dr.inv_order_var,1); if occbin_options.opts_algo.restrict_state_space
tmp=zeros(M_.endo_nbr,1);
tmp(oo_.dr.restrict_var_list,1)=alphahat(:,1);
opts_simul.endo_init = tmp(oo_.dr.inv_order_var,1);
else
opts_simul.endo_init = alphahat(oo_.dr.inv_order_var,1);
end
if M_.occbin.constraint_nbr==1 if M_.occbin.constraint_nbr==1
myregimestart = [regimes_.regimestart]; myregimestart = [regimes_.regimestart];
else else