diff --git a/tests/Makefile.am b/tests/Makefile.am index 7446d8d8e..908bca187 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -523,7 +523,8 @@ EXTRA_DIST = \ observation_trends_and_prefiltering/Trend_exp_model_calib_no_prefilter_common.inc \ observation_trends_and_prefiltering/Trend_model_calib_prefilter_common.inc \ observation_trends_and_prefiltering/Trend_model_calib_no_prefilter_common.inc \ - observation_trends_and_prefiltering/Trend_load_data_common.inc + observation_trends_and_prefiltering/Trend_load_data_common.inc \ + observation_trends_and_prefiltering/Trend_no_prefilter_conditional_forecast.inc \ optimal_policy/Ramsey/oo_ramsey_policy_initval.mat \ optimizers/optimizer_function_wrapper.m \ optimizers/fs2000.common.inc \ diff --git a/tests/observation_trends_and_prefiltering/ML/Trend_loglinear_no_prefilter.mod b/tests/observation_trends_and_prefiltering/ML/Trend_loglinear_no_prefilter.mod index 6612f490f..ed638c1dd 100644 --- a/tests/observation_trends_and_prefiltering/ML/Trend_loglinear_no_prefilter.mod +++ b/tests/observation_trends_and_prefiltering/ML/Trend_loglinear_no_prefilter.mod @@ -20,3 +20,6 @@ y_forecast_100_periods=loaded_par.orig_params(strmatch('const_y',M_.param_names, p_forecast_100_periods=loaded_par.orig_params(strmatch('const_p',M_.param_names,'exact'))+(options_.first_obs+options_.nobs-1+options_.forecast)*loaded_par.orig_params(strmatch('g_p',M_.param_names,'exact')); @#include "../Trend_diagnostics_ML_common.inc" + +@#include "../Trend_no_prefilter_conditional_forecast.inc" + diff --git a/tests/observation_trends_and_prefiltering/ML/Trend_loglinear_no_prefilter_first_obs.mod b/tests/observation_trends_and_prefiltering/ML/Trend_loglinear_no_prefilter_first_obs.mod index 5e1509553..86e09466b 100644 --- a/tests/observation_trends_and_prefiltering/ML/Trend_loglinear_no_prefilter_first_obs.mod +++ b/tests/observation_trends_and_prefiltering/ML/Trend_loglinear_no_prefilter_first_obs.mod @@ -20,3 +20,5 @@ y_forecast_100_periods=loaded_par.orig_params(strmatch('const_y',M_.param_names, p_forecast_100_periods=loaded_par.orig_params(strmatch('const_p',M_.param_names,'exact'))+(options_.first_obs+options_.nobs-1+options_.forecast)*loaded_par.orig_params(strmatch('g_p',M_.param_names,'exact')); @#include "../Trend_diagnostics_ML_common.inc" + +@#include "../Trend_no_prefilter_conditional_forecast.inc" diff --git a/tests/observation_trends_and_prefiltering/ML/Trend_loglinear_prefilter.mod b/tests/observation_trends_and_prefiltering/ML/Trend_loglinear_prefilter.mod index 6df99c155..bc0eff742 100644 --- a/tests/observation_trends_and_prefiltering/ML/Trend_loglinear_prefilter.mod +++ b/tests/observation_trends_and_prefiltering/ML/Trend_loglinear_prefilter.mod @@ -21,3 +21,4 @@ y_forecast_100_periods=loaded_par.orig_params(strmatch('const_y',loaded_par.para p_forecast_100_periods=loaded_par.orig_params(strmatch('const_p',loaded_par.param_names,'exact'))+(options_.first_obs+options_.nobs-1+options_.forecast)*loaded_par.orig_params(strmatch('g_p',loaded_par.param_names,'exact')); @#include "../Trend_diagnostics_ML_common.inc" + diff --git a/tests/observation_trends_and_prefiltering/ML/Trend_no_prefilter.mod b/tests/observation_trends_and_prefiltering/ML/Trend_no_prefilter.mod index e0fcf0a70..d7ada7c7b 100644 --- a/tests/observation_trends_and_prefiltering/ML/Trend_no_prefilter.mod +++ b/tests/observation_trends_and_prefiltering/ML/Trend_no_prefilter.mod @@ -19,3 +19,5 @@ y_forecast_100_periods=loaded_par.orig_params(strmatch('const_y',M_.param_names, p_forecast_100_periods=loaded_par.orig_params(strmatch('const_p',M_.param_names,'exact'))+(options_.first_obs+options_.nobs-1+options_.forecast)*loaded_par.orig_params(strmatch('g_p',M_.param_names,'exact')) @#include "../Trend_diagnostics_ML_common.inc" + +@#include "../Trend_no_prefilter_conditional_forecast.inc" \ No newline at end of file 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 new file mode 100644 index 000000000..b2a9fca73 --- /dev/null +++ b/tests/observation_trends_and_prefiltering/Trend_no_prefilter_conditional_forecast.inc @@ -0,0 +1,39 @@ +conditional_forecast_paths; +var P_obs; +periods 1 2 3:5; +values 1.01 0.98 1; +var Y_obs; +periods 1 2 3:5; +values 3 3.04 2.98; +end; + +conditional_forecast(periods=100,parameter_set=posterior_mode,replic=1000, controlled_varexo=(e_y,e_p)); + +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 + error('Unconditional Forecasts do not match') +end + +%compare conditional forecasts; histval here sets initval condition for capital different from steady state +initial_condition_states=NaN(size(oo_.dr.ys)); +initial_condition_states(strmatch('Y_obs',M_.endo_names,'exact')) = oo_.SmoothedVariables.Y_obs(end)-oo_.Smoother.Trend.Y_obs(end); +initial_condition_states(strmatch('P_obs',M_.endo_names,'exact')) = oo_.SmoothedVariables.P_obs(end)-oo_.Smoother.Trend.P_obs(end); +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 + +y_simult = simult_(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 + 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 + error('Conditional Forecasts do not match') +end +