diff --git a/matlab/DsgeSmoother.m b/matlab/DsgeSmoother.m index 7e5e1e2c87b401ca4d483c7986962a132deb3a26..1e20e1214f49705b77d46e3e8324505dc3a62f54 100644 --- a/matlab/DsgeSmoother.m +++ b/matlab/DsgeSmoother.m @@ -363,6 +363,12 @@ else ic = oo_.dr.restrict_columns; end + if isempty(options_.nk) + nk=1; + else + nk=options_.nk; + end + if options_.occbin.smoother.status % reconstruct occbin smoother if length_varargin>0 @@ -452,7 +458,7 @@ else opts_simul.check_ahead_periods = options_.occbin.smoother.check_ahead_periods; opts_simul.full_output = options_.occbin.smoother.full_output; opts_simul.piecewise_only = options_.occbin.smoother.piecewise_only; - opts_simul.SHOCKS = zeros(options_.nk,M_.exo_nbr); + opts_simul.SHOCKS = zeros(nk,M_.exo_nbr); opts_simul.SHOCKS(1,:) = eehat(:,k); tmp=zeros(M_.endo_nbr,1); tmp(oo_.dr.restrict_var_list,1)=aahat(:,k-1); @@ -485,7 +491,7 @@ else clear sstate_uncertainty end - aaa = zeros(options_.nk,M_.endo_nbr,gend+options_.nk); + aaa = zeros(nk,M_.endo_nbr,gend+nk); aaa(:,oo_.dr.restrict_var_list,:)=aK; for k=2:gend+1 @@ -496,7 +502,7 @@ else opts_simul.check_ahead_periods = options_.occbin.smoother.check_ahead_periods; opts_simul.full_output = options_.occbin.smoother.full_output; opts_simul.piecewise_only = options_.occbin.smoother.piecewise_only; - opts_simul.SHOCKS = zeros(options_.nk,M_.exo_nbr); + opts_simul.SHOCKS = zeros(nk,M_.exo_nbr); tmp=zeros(M_.endo_nbr,1); tmp(oo_.dr.restrict_var_list,1)=ahat0(:,k-1); opts_simul.endo_init = tmp(oo_.dr.inv_order_var,1); @@ -508,14 +514,14 @@ else % period ahead (so if regimestart was [1 5] it should be [1 4] % in out % end - for jnk=1:options_.nk + for jnk=1:nk aaa(jnk,oo_.dr.inv_order_var,k+jnk-1) = out.piecewise(jnk,:) - out.ys'; end end aK=aaa; if ~isempty(PK) - PP = zeros(options_.nk,M_.endo_nbr,M_.endo_nbr,gend+options_.nk); + PP = zeros(nk,M_.endo_nbr,M_.endo_nbr,gend+nk); PP(:,oo_.dr.restrict_var_list,oo_.dr.restrict_var_list,:) = PK; PK=PP; clear PP @@ -561,20 +567,17 @@ else end ahat1=aaa; % reconstruct aK - if isempty(options_.nk) - options_.nk=1; - end - aaa = zeros(options_.nk,M_.endo_nbr,gend+options_.nk); + aaa = zeros(nk,M_.endo_nbr,gend+nk); aaa(:,oo_.dr.restrict_var_list,:)=aK; for k=1:gend - for jnk=1:options_.nk + for jnk=1:nk aaa(jnk,static_var_list,k+jnk) = C(~ilagged,:)*dynare_squeeze(aK(jnk,:,k+jnk)); end end if any(ilagged) for k=1:gend aaa(1,static_var_list0,k+1) = Tstar(ilagged,:)*ahat(:,k); - for jnk=2:options_.nk + for jnk=2:nk aaa(jnk,static_var_list0,k+jnk) = Tstar(ilagged,:)*dynare_squeeze(aK(jnk-1,:,k+jnk-1)); end end @@ -621,12 +624,12 @@ else % reconstruct PK if ~isempty(PK) - PP = zeros(options_.nk,M_.endo_nbr,M_.endo_nbr,gend+options_.nk); + PP = zeros(nk,M_.endo_nbr,M_.endo_nbr,gend+nk); PP(:,oo_.dr.restrict_var_list,oo_.dr.restrict_var_list,:) = PK; if ~options_.heteroskedastic_filter DQD=D(~ilagged,:)*Q*transpose(D(~ilagged,:))+C(~ilagged,:)*R*Q*transpose(D(~ilagged,:))+D(~ilagged,:)*Q*transpose(C(~ilagged,:)*R); DQR=D(~ilagged,:)*Q*transpose(R); - for f=1:options_.nk + for f=1:nk for k=1:gend PP(f,static_var_list,static_var_list,k+f)=C(~ilagged,:)*squeeze(PK(f,:,:,k+f))*C(~ilagged,:)'+DQD; PP(f,static_var_list,oo_.dr.restrict_var_list,k+f)=C(~ilagged,:)*squeeze(PK(f,:,:,k+f))+DQR;