diff --git a/doc/manual/source/the-model-file.rst b/doc/manual/source/the-model-file.rst index ee8502e9b..6f7a7db58 100644 --- a/doc/manual/source/the-model-file.rst +++ b/doc/manual/source/the-model-file.rst @@ -7675,9 +7675,7 @@ the :comm:`bvar_forecast` command. *Output* - The results are not stored in the ``oo_`` structure but in a - separate structure ``forecasts``, described below, saved to the - hard disk into a file called ``conditional_forecasts.mat.`` + The results are stored in ``oo_.conditional_forecast``, which is described below. *Example* @@ -7702,7 +7700,7 @@ the :comm:`bvar_forecast` command. plot_conditional_forecast(periods = 10) a y; - .. matvar:: forecasts.cond + .. matvar:: oo_.conditional_forecast.cond Variable set by the ``conditional_forecast`` command. It stores the conditional forecasts. Fields are ``periods+1`` by @@ -7710,7 +7708,7 @@ the :comm:`bvar_forecast` command. subsequent ``periods`` forecasts periods. Fields are of the form:: - forecasts.cond.FORECAST_MOMENT.VARIABLE_NAME + oo_.conditional_forecast.cond.FORECAST_MOMENT.VARIABLE_NAME where FORECAST_MOMENT is one of the following: @@ -7724,12 +7722,12 @@ the :comm:`bvar_forecast` command. distribution. The size corresponds to ``conf_sig``. - .. matvar:: forecasts.uncond + .. matvar:: oo_.conditional_forecast.uncond Variable set by the ``conditional_forecast`` command. It stores the unconditional forecasts. Fields are of the form:: - forecasts.uncond.FORECAST_MOMENT.VARIABLE_NAME + oo_.conditional_forecast.uncond.FORECAST_MOMENT.VARIABLE_NAME .. matvar:: forecasts.instruments @@ -7738,14 +7736,14 @@ the :comm:`bvar_forecast` command. the names of the exogenous instruments. - .. matvar:: forecasts.controlled_variables + .. matvar:: oo_.conditional_forecast.controlled_variables Variable set by the ``conditional_forecast`` command. Stores the position of the constrained endogenous variables in declaration order. - .. matvar:: forecasts.controlled_exo_variables + .. matvar:: oo_.conditional_forecast.controlled_exo_variables Variable set by the ``conditional_forecast`` command. Stores the values of the controlled exogenous variables underlying @@ -7753,9 +7751,9 @@ the :comm:`bvar_forecast` command. endogenous variables. Fields are ``[number of constrained periods]`` by ``1`` vectors and are of the form:: - forecasts.controlled_exo_variables.FORECAST_MOMENT.SHOCK_NAME + oo_.conditional_forecast.controlled_exo_variables.FORECAST_MOMENT.SHOCK_NAME - .. matvar:: forecasts.graphs + .. matvar:: oo_.conditional_forecast.graphs Variable set by the ``conditional_forecast`` command. Stores the information for generating the conditional forecast plots. diff --git a/matlab/imcforecast.m b/matlab/imcforecast.m index 935c453a5..dc3bca34c 100644 --- a/matlab/imcforecast.m +++ b/matlab/imcforecast.m @@ -25,10 +25,10 @@ function imcforecast(constrained_paths, constrained_vars, options_cond_fcst) % This routine has to be called after an estimation statement or an estimated_params block. % % REMARKS -% [1] Results are stored in a structure which is saved in a mat file called conditional_forecasts.mat. +% [1] Results are stored in oo_.conditional_forecast. % [2] Use the function plot_icforecast to plot the results. -% Copyright (C) 2006-2018 Dynare Team +% Copyright (C) 2006-2019 Dynare Team % % This file is part of Dynare. % @@ -310,5 +310,4 @@ forecasts.graph.fname = M_.fname; %reset qz_criterium options_.qz_criterium=qz_criterium_old; - -save('conditional_forecasts.mat','forecasts'); +oo_.conditional_forecast = forecasts; diff --git a/matlab/plot_icforecast.m b/matlab/plot_icforecast.m index 862a101cd..1c7dcdc77 100644 --- a/matlab/plot_icforecast.m +++ b/matlab/plot_icforecast.m @@ -1,8 +1,11 @@ -function plot_icforecast(Variables,periods,options_) +function plot_icforecast(Variables,periods,options_,oo_) % Build plots for the conditional forecasts. % % INPUTS -% o Variables [cell] names of the endogenous variables to be plotted. +% o Variables [cell] Names of the endogenous variables to be plotted. +% o periods [int] Number of periods to be plotted. +% o options_ [structure] Options. +% o oo_ [structure] Storage of results. % % OUTPUTS % None. @@ -10,7 +13,7 @@ function plot_icforecast(Variables,periods,options_) % SPECIAL REQUIREMENTS % This routine has to be called after imcforecast.m. -% Copyright (C) 2006-2018 Dynare Team +% Copyright (C) 2006-2019 Dynare Team % % This file is part of Dynare. % @@ -27,7 +30,11 @@ function plot_icforecast(Variables,periods,options_) % You should have received a copy of the GNU General Public License % along with Dynare. If not, see . -load conditional_forecasts; +if ~isfield(oo_, 'conditional_forecast') + error('Can''t find conditional forecasts'); +else + forecasts = oo_.conditional_forecast; +end forecast_periods = length(forecasts.cond.Mean.(Variables{1})); if nargin==1 || isempty(periods) % Set default number of periods. diff --git a/tests/conditional_forecasts/3/fs2000_conditional_forecast_initval.mod b/tests/conditional_forecasts/3/fs2000_conditional_forecast_initval.mod index 95481d2dc..4bd3e6ae0 100644 --- a/tests/conditional_forecasts/3/fs2000_conditional_forecast_initval.mod +++ b/tests/conditional_forecasts/3/fs2000_conditional_forecast_initval.mod @@ -85,8 +85,8 @@ plot_conditional_forecast(periods=100) gy_obs gp_obs k; forecast(periods=100); %compare unconditional forecasts -cond_forecast=load('conditional_forecasts.mat'); -if max(abs(cond_forecast.forecasts.uncond.Mean.k(2:end)-oo_.forecast.Mean.k))>1e-8 +cond_forecast=oo_.conditional_forecast; +if max(abs(cond_forecast.uncond.Mean.k(2:end)-oo_.forecast.Mean.k))>1e-8 error('Unconditional Forecasts do not match') end @@ -94,11 +94,11 @@ end %conditions need to be set with histval; initial_condition_states = oo_.dr.ys; shock_matrix = zeros(options_cond_fcst_.periods ,M_.exo_nbr); %create shock matrix with found controlled shocks -shock_matrix(1:5,strmatch('e_a',M_.exo_names,'exact')) = cond_forecast.forecasts.controlled_exo_variables.Mean.e_a; %set controlled shocks to their values -shock_matrix(1:5,strmatch('e_m',M_.exo_names,'exact')) = cond_forecast.forecasts.controlled_exo_variables.Mean.e_m; %set controlled shocks to their values +shock_matrix(1:5,strmatch('e_a',M_.exo_names,'exact')) = cond_forecast.controlled_exo_variables.Mean.e_a; %set controlled shocks to their values +shock_matrix(1:5,strmatch('e_m',M_.exo_names,'exact')) = cond_forecast.controlled_exo_variables.Mean.e_m; %set controlled shocks to their values y_simult = simult_(M_,options_,initial_condition_states,oo_.dr,shock_matrix,1); -if max(abs(y_simult(strmatch('k',M_.endo_names,'exact'),:)'-cond_forecast.forecasts.cond.Mean.k))>1e-8 +if max(abs(y_simult(strmatch('k',M_.endo_names,'exact'),:)'-cond_forecast.cond.Mean.k))>1e-8 error('Unconditional Forecasts do not match') end diff --git a/tests/conditional_forecasts/4/fs2000_conditional_forecast_histval.mod b/tests/conditional_forecasts/4/fs2000_conditional_forecast_histval.mod index fa4912d01..51433faeb 100644 --- a/tests/conditional_forecasts/4/fs2000_conditional_forecast_histval.mod +++ b/tests/conditional_forecasts/4/fs2000_conditional_forecast_histval.mod @@ -86,8 +86,8 @@ plot_conditional_forecast(periods=100) gy_obs gp_obs k; forecast(periods=100); %compare unconditional forecasts -cond_forecast=load('conditional_forecasts.mat'); -if max(abs(cond_forecast.forecasts.uncond.Mean.k(2:end)-oo_.forecast.Mean.k))>1e-8 +cond_forecast=oo_.conditional_forecast; +if max(abs(cond_forecast.uncond.Mean.k(2:end)-oo_.forecast.Mean.k))>1e-8 error('Unconditional Forecasts do not match') end @@ -95,11 +95,11 @@ end initial_condition_states = oo_.dr.ys; initial_condition_states(strmatch('k',M_.endo_names,'exact')) = 6; shock_matrix = zeros(options_cond_fcst_.periods ,M_.exo_nbr); %create shock matrix with found controlled shocks -shock_matrix(1:5,strmatch('e_a',M_.exo_names,'exact')) = cond_forecast.forecasts.controlled_exo_variables.Mean.e_a; %set controlled shocks to their values -shock_matrix(1:5,strmatch('e_m',M_.exo_names,'exact')) = cond_forecast.forecasts.controlled_exo_variables.Mean.e_m; %set controlled shocks to their values +shock_matrix(1:5,strmatch('e_a',M_.exo_names,'exact')) = cond_forecast.controlled_exo_variables.Mean.e_a; %set controlled shocks to their values +shock_matrix(1:5,strmatch('e_m',M_.exo_names,'exact')) = cond_forecast.controlled_exo_variables.Mean.e_m; %set controlled shocks to their values y_simult = simult_(M_,options_,initial_condition_states,oo_.dr,shock_matrix,1); -if max(abs(y_simult(strmatch('k',M_.endo_names,'exact'),:)'-cond_forecast.forecasts.cond.Mean.k))>1e-8 +if max(abs(y_simult(strmatch('k',M_.endo_names,'exact'),:)'-cond_forecast.cond.Mean.k))>1e-8 error('Unconditional Forecasts do not match') end diff --git a/tests/loglinear/example4_exp.mod b/tests/loglinear/example4_exp.mod index 4fd4811bf..1e1dc30bc 100644 --- a/tests/loglinear/example4_exp.mod +++ b/tests/loglinear/example4_exp.mod @@ -77,6 +77,5 @@ end; conditional_forecast(parameter_set=calibration, controlled_varexo=(u,e)); oo_exp=oo_; -load('conditional_forecasts.mat') -conditional_forecasts_exp=forecasts; +conditional_forecasts_exp=oo_.conditional_forecast; save results_exp.mat oo_exp conditional_forecasts_exp \ No newline at end of file diff --git a/tests/loglinear/example4_exp_histval.mod b/tests/loglinear/example4_exp_histval.mod index e07a0a6fb..7c4940d20 100644 --- a/tests/loglinear/example4_exp_histval.mod +++ b/tests/loglinear/example4_exp_histval.mod @@ -85,8 +85,7 @@ end; conditional_forecast(parameter_set=calibration, controlled_varexo=(u,e)); oo_exp=oo_; -load('conditional_forecasts.mat') -conditional_forecasts_exp=forecasts; +conditional_forecasts_exp=oo_.conditional_forecast; oo_exp=oo_; save results_exp_histval.mat oo_exp conditional_forecasts_exp diff --git a/tests/loglinear/example4_loglinear.mod b/tests/loglinear/example4_loglinear.mod index 81f4583a4..ebb403a5d 100644 --- a/tests/loglinear/example4_loglinear.mod +++ b/tests/loglinear/example4_loglinear.mod @@ -118,7 +118,7 @@ if max(max(abs(struct2array(oo_.forecast.Mean)-struct2array(oo_exp.forecast.Mean error('Option loglinear wrong, forecast not equal') end -load('conditional_forecasts.mat') +forecasts=oo_.conditional_forecast; if max(max(abs(struct2array(forecasts.cond.Mean)-struct2array(conditional_forecasts_exp.cond.Mean))))>1e-10 || ... max(max(abs(struct2array(forecasts.cond.ci)-struct2array(conditional_forecasts_exp.cond.ci))))>1e-10 || ... diff --git a/tests/loglinear/example4_loglinear_histval.mod b/tests/loglinear/example4_loglinear_histval.mod index 752baa8bc..de380a6d9 100644 --- a/tests/loglinear/example4_loglinear_histval.mod +++ b/tests/loglinear/example4_loglinear_histval.mod @@ -114,7 +114,7 @@ end; conditional_forecast(parameter_set=calibration, controlled_varexo=(u,e)); -load('conditional_forecasts.mat') +forecasts=oo_.conditional_forecast; if max(max(abs(struct2array(forecasts.cond.Mean)-struct2array(conditional_forecasts_exp.cond.Mean))))>1e-10 || ... max(max(abs(struct2array(forecasts.cond.ci)-struct2array(conditional_forecasts_exp.cond.ci))))>1e-10 || ... diff --git a/tests/observation_trends_and_prefiltering/Trend_no_prefilter_conditional_forecast.inc b/tests/observation_trends_and_prefiltering/Trend_no_prefilter_conditional_forecast.inc index c2cd41cb3..9c4602d7c 100644 --- a/tests/observation_trends_and_prefiltering/Trend_no_prefilter_conditional_forecast.inc +++ b/tests/observation_trends_and_prefiltering/Trend_no_prefilter_conditional_forecast.inc @@ -12,8 +12,8 @@ conditional_forecast(periods=100,parameter_set=posterior_mode,replic=1000, contr plot_conditional_forecast(periods=100) Y_obs P_obs; %compare unconditional forecasts -cond_forecast=load('conditional_forecasts.mat'); -if max(abs(cond_forecast.forecasts.uncond.Mean.P_obs(2:end)-oo_.forecast.Mean.P_obs))>1e-8 +cond_forecast=oo_.conditional_forecast; +if max(abs(cond_forecast.uncond.Mean.P_obs(2:end)-oo_.forecast.Mean.P_obs))>1e-8 error('Unconditional Forecasts do not match') end @@ -24,16 +24,16 @@ initial_condition_states(strmatch('P_obs',M_.endo_names,'exact')) = oo_.Smoothed initial_condition_states(strmatch('junk1',M_.endo_names,'exact')) = oo_.SmoothedVariables.junk1(end); initial_condition_states(strmatch('junk2',M_.endo_names,'exact')) = oo_.SmoothedVariables.junk2(end)-oo_.Smoother.Trend.junk2(end); shock_matrix = zeros(options_cond_fcst_.periods ,M_.exo_nbr); %create shock matrix with found controlled shocks -shock_matrix(1:5,strmatch('e_y',M_.exo_names,'exact')) = cond_forecast.forecasts.controlled_exo_variables.Mean.e_y; %set controlled shocks to their values -shock_matrix(1:5,strmatch('e_p',M_.exo_names,'exact')) = cond_forecast.forecasts.controlled_exo_variables.Mean.e_p; %set controlled shocks to their values +shock_matrix(1:5,strmatch('e_y',M_.exo_names,'exact')) = cond_forecast.controlled_exo_variables.Mean.e_y; %set controlled shocks to their values +shock_matrix(1:5,strmatch('e_p',M_.exo_names,'exact')) = cond_forecast.controlled_exo_variables.Mean.e_p; %set controlled shocks to their values y_simult = simult_(M_,options_,initial_condition_states,oo_.dr,shock_matrix,1); -if max(abs(y_simult(strmatch('Y_obs',M_.endo_names,'exact'),:)'+(options_.first_obs-1+options_.nobs:options_.first_obs-1+options_.nobs+options_.forecast)'*g_y-cond_forecast.forecasts.cond.Mean.Y_obs))>1e-8 +if max(abs(y_simult(strmatch('Y_obs',M_.endo_names,'exact'),:)'+(options_.first_obs-1+options_.nobs:options_.first_obs-1+options_.nobs+options_.forecast)'*g_y-cond_forecast.cond.Mean.Y_obs))>1e-8 error('Conditional Forecasts do not match') end -if max(abs(y_simult(strmatch('P_obs',M_.endo_names,'exact'),:)'+(options_.first_obs-1+options_.nobs:options_.first_obs-1+options_.nobs+options_.forecast)'*g_p-cond_forecast.forecasts.cond.Mean.P_obs))>1e-8 +if max(abs(y_simult(strmatch('P_obs',M_.endo_names,'exact'),:)'+(options_.first_obs-1+options_.nobs:options_.first_obs-1+options_.nobs+options_.forecast)'*g_p-cond_forecast.cond.Mean.P_obs))>1e-8 error('Conditional Forecasts do not match') end