diff --git a/matlab/realtime_shock_decomposition.m b/matlab/realtime_shock_decomposition.m index d1e90b51ac8b59075735599b7a1e010ef3f74855..1df4333cc456ca5682cf1c48f72645eb479c0ac8 100644 --- a/matlab/realtime_shock_decomposition.m +++ b/matlab/realtime_shock_decomposition.m @@ -78,6 +78,10 @@ forecast_params=0; if forecast_ && isfield(options_.shock_decomp,'forecast_params') forecast_params = options_.shock_decomp.forecast_params; end +fast_realtime = 0; +if isfield(options_.shock_decomp,'fast_realtime') + fast_realtime = options_.shock_decomp.fast_realtime; +end % save_realtime=0; save_realtime = options_.shock_decomp.save_realtime; @@ -85,11 +89,6 @@ save_realtime = options_.shock_decomp.save_realtime; zreal = zeros(endo_nbr,nshocks+2,options_.nobs+forecast_); zcond = zeros(endo_nbr,nshocks+2,options_.nobs); -skipline() -skipline() -running_text = 'Realtime shock decomposition '; -newString=sprintf(running_text); -fprintf(['\b%s'],newString); options_.selected_variables_only = 0; %make sure all variables are stored options_.plot_priors=0; @@ -103,11 +102,58 @@ if forecast_ && any(forecast_params) clear junk1 junk2 junk3 junk4 junk5 junk6 end +if fast_realtime + skipline() + skipline() + running_text = 'Fast realtime shock decomposition '; + newString=sprintf(running_text); + fprintf(['%s'],newString); + options_.nobs=fast_realtime; + [oo0,M_,junk1,junk2,Smoothed_Variables_deviation_from_mean0] = evaluate_smoother(parameter_set,varlist,M_,oo_,options_,bayestopt_,estim_params_); + gend0 = size(oo0.SmoothedShocks.(deblank(M_.exo_names(1,:))),1); + prctdone=0.5; + if isoctave + printf([running_text,' %3.f%% done\r'], prctdone*100); + else + s0=repmat('\b',1,length(newString)+1); + newString=sprintf([running_text,' %3.1f%% done'], prctdone*100); + fprintf([s0,'%s'],newString); + end + options_.nobs=nobs; + [oo2,M_,junk1,junk2,Smoothed_Variables_deviation_from_mean2] = evaluate_smoother(parameter_set,varlist,M_,oo_,options_,bayestopt_,estim_params_); + gend2 = size(oo2.SmoothedShocks.(deblank(M_.exo_names(1,:))),1); + prctdone=1; + if isoctave + printf([running_text,' %3.f%% done\r'], prctdone*100); + else + s0=repmat('\b',1,length(newString)+1); + newString=sprintf([running_text,' %3.1f%% done'], prctdone*100); + fprintf([s0,'%s'],newString); + end +end + +skipline() +skipline() +running_text = 'Realtime shock decomposition '; +newString=sprintf(running_text); +fprintf(['%s'],newString); + for j=presample+1:nobs % evalin('base',['options_.nobs=' int2str(j) ';']) options_.nobs=j; - [oo, M_, junk2, junk3, Smoothed_Variables_deviation_from_mean] = evaluate_smoother(parameter_set,varlist,M_,oo_,options_,bayestopt_,estim_params_); - + if ~fast_realtime + [oo,M_,junk1,junk2,Smoothed_Variables_deviation_from_mean] = evaluate_smoother(parameter_set,varlist,M_,oo_,options_,bayestopt_,estim_params_); + gend = size(oo.SmoothedShocks.(deblank(M_.exo_names(1,:))),1); + else + gend = gend0+j-fast_realtime; + if j>fast_realtime + oo=oo2; + Smoothed_Variables_deviation_from_mean = Smoothed_Variables_deviation_from_mean2(:,1:gend); + else + oo=oo0; + Smoothed_Variables_deviation_from_mean = Smoothed_Variables_deviation_from_mean0(:,1:gend); + end + end % reduced form dr = oo.dr; @@ -131,10 +177,9 @@ for j=presample+1:nobs end % initialization - gend = length(oo.SmoothedShocks.(M_.exo_names{1})); epsilon=NaN(nshocks,gend); - for i=1:nshocks - epsilon(i,:) = oo.SmoothedShocks.(M_.exo_names{i}); + for i = 1:nshocks + epsilon(i,:) = oo.SmoothedShocks.(M_.exo_names{i})(1:gend); end epsilon=[epsilon zeros(nshocks,forecast_)];