diff --git a/matlab/global_initialization.m b/matlab/global_initialization.m index 1cfb81abd9655f35836cfc555db206dab48d525b..273a22cf541bb5f3be56bb311c4698a384ca0915 100644 --- a/matlab/global_initialization.m +++ b/matlab/global_initialization.m @@ -255,56 +255,12 @@ options_.initial_date.subperiod = 0; % discretionary policy options_.discretionary_policy = 0; -% SWZ SBVAR -% prepare ms sbvar -options_.ms.coefficients_prior_hyperparameters = [1.0 1.0 0.1 1.2 1.0 1.0]; -options_.ms.freq = 1; -options_.ms.initial_subperiod = 1; -options_.ms.final_subperiod=4; -options_.ms.nlags = 1; -options_.ms.cross_restrictions = 0; -options_.ms.contemp_reduced_form = 0; -options_.ms.bayesian_prior = 1; -options_.ms.alpha = 1.0; -options_.ms.beta = 1.0; -options_.ms.gsig2_lmd = 50^2; -options_.ms.gsig2_lmdm = 50^2; -options_.ms.lower_cholesky = 0; -options_.ms.upper_cholesky = 0; -% all mex functions -options_.ms.output_file_tag = M_.fname; -%simulate -options_.ms.mh_replic = 10000; % default differs from Dan's code -% mdd -options_.ms.mdd_proposal_type = [3 0.1 0.9]; -% irf -options_.ms.bayesian_irf = 0; -options_.ms.thinning_factor = 1; -options_.ms.shock_draws = 10000; -options_.ms.shocks_per_parameter = 10; -options_.ms.percentiles = [.16 .5 .84]; -options_.ms.mode_compute = 1; -options_.ms.mode_file = 0; -options_.ms.load_mh_file = 0; -options_.ms.filtered_probabilities = 0; -options_.ms.real_time_smoothed_probabilities = 0; -options_.ms.irf_shocks_per_parameter = options_.ms.shocks_per_parameter; -options_.ms.irf_shock_draws = options_.ms.shock_draws; -options_.ms.irf_thinning_factor = 1; -options_.ms.irf_filtered = 0; -options_.ms.forecast_shocks_per_parameter = options_.ms.shocks_per_parameter; -options_.ms.forecast_shock_draws = options_.ms.shock_draws; -options_.ms.forecast_thinning_factor = 1; -options_.ms.forecast_data_obs = 0; -options_.ms.vd_shocks_per_parameter = options_.ms.shocks_per_parameter; -options_.ms.vd_shock_draws = options_.ms.shock_draws; -options_.ms.vd_thinning_factor = 1; -options_.ms.vd_filtered = 0; - - % Shock decomposition options_.parameter_set = []; +% MS Sbvar options +options_ = initialize_ms_sbvar_options(M_, options_); + % initialize persistent variables in priordens() priordens([],[],[],[],[],[],1); diff --git a/matlab/initialize_ms_sbvar_options.m b/matlab/initialize_ms_sbvar_options.m new file mode 100644 index 0000000000000000000000000000000000000000..6f33c075fba77638f711affedbf7460f519e0fdf --- /dev/null +++ b/matlab/initialize_ms_sbvar_options.m @@ -0,0 +1,109 @@ +function options_=initialize_ms_sbvar_options(M_, options_) +%function initialize_ms_sbvar_options() +% sets ms sbvar options back to their default values +% +% INPUTS +% M_ +% options_ +% +% OUTPUTS +% options_ +% +% SPECIAL REQUIREMENTS +% none + +% Copyright (C) 2011 Dynare Team +% +% This file is part of Dynare. +% +% Dynare is free software: you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by +% the Free Software Foundation, either version 3 of the License, or +% (at your option) any later version. +% +% Dynare is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with Dynare. If not, see <http://www.gnu.org/licenses/>. + +% MS SBVAR +% all mex functions +options_.ms.output_file_tag = M_.fname; +% prepare ms sbvar & estimation +%options_.ms.mode_file +options_.ms.coefficients_prior_hyperparameters = [1.0 1.0 0.1 1.2 1.0 1.0]; +options_.ms.freq = 1; +options_.ms.initial_subperiod = 1; +options_.ms.final_subperiod=4; +%options_.ms_varlist +options_.ms.nlags = 1; +options_.ms.cross_restrictions = 0; +options_.ms.contemp_reduced_form = 0; +options_.ms.bayesian_prior = 1; +options_.ms.alpha = 1.0; +options_.ms.beta = 1.0; +options_.ms.gsig2_lmd = 50^2; +options_.ms.gsig2_lmdm = 50^2; +options_.ms.lower_cholesky = 0; +options_.ms.upper_cholesky = 0; +if isfield(options_.ms,'initial_year') + options_.ms = rmfield(options_.ms,'initial_year'); +end +if isfield(options_.ms,'final_year') + options_.ms = rmfield(options_.ms,'final_year'); +end +if isfield(options_.ms,'datafile') + options_.ms = rmfield(options_.ms,'datafile'); +end +if isfield(options_.ms,'varlist') + options_.ms = rmfield(options_.ms,'varlist'); +end +% estimation +options_.ms.convergence_starting_value = 1e-3; +options_.ms.convergence_ending_value = 1e-6; +options_.ms.convergence_increment_value = 0.1; +options_.ms.max_iterations_starting_value = 50; +options_.ms.max_iterations_increment_value = 2; +options_.ms.max_block_iterations = 100; +options_.ms.max_repeated_optimization_runs = 10; +options_.ms.function_convergence_criterion = 0.1; +options_.ms.parameter_convergence_criterion = 0.1; +options_.ms.number_of_large_perturbations = 5; +options_.ms.number_of_small_perturbations = 5; +options_.ms.number_of_posterior_draws_after_perturbation = 1; +options_.ms.max_number_of_stages = 20; +options_.ms.random_function_convergence_criterion = 0.1; +options_.ms.random_parameter_convergence_criterion = 0.1; +% simulation +options_.ms.mh_replic = 10000; % default differs from Dan's code +options_.ms.drop = 0.1*options_.ms.mh_replic; +options_.ms.thinning_factor = 1; +options_.ms.adaptive_mh_draws = 30000; +% mdd +options_.ms.mdd_proposal_draws = 100000; +options_.ms.mdd_use_mean_center = 0; +options_.ms.mdd_proposal_type = [3 0.1 0.9]; +% probabilities +options_.ms.filtered_probabilities = 0; +options_.ms.real_time_smoothed_probabilities = 0; +% irf +options_.ms.horizon = 12; +options_.ms.filtered_probabilities = 0; +options_.ms.error_bands = 1; +options_.ms.error_band_percentiles = [.16 .5 .84]; +options_.ms.parameter_uncertainty = 0; +options_.ms.shock_draws = 10000; +options_.ms.shocks_per_parameter = 10; +options_.ms.median = 0; +% forecast +options_.ms.forecast_data_obs = 0; +if isfield(options_.ms,'free_parameters') + options_.ms = rmfield(options_.ms,'free_parameters'); +end +if isfield(options_.ms,'simulation_file') + options_.ms = rmfield(options_.ms,'simulation_file'); +end +end diff --git a/matlab/ms-sbvar/clean_ms_files.m b/matlab/ms-sbvar/clean_ms_files.m index a19fee68e81d60523879e390d9ed50f8528c9e2e..dfba902a6b1f361e92696533067673a862f7b47a 100644 --- a/matlab/ms-sbvar/clean_ms_files.m +++ b/matlab/ms-sbvar/clean_ms_files.m @@ -35,14 +35,24 @@ delete_if_exist(['est_flat_header_' output_file_tag '.out']); delete_if_exist(['est_flat_' output_file_tag '.out']); delete_if_exist(['est_free_' output_file_tag '.out']); delete_if_exist(['est_intermediate_' output_file_tag '.out']); +delete_if_exist(['filtered_' output_file_tag '.out']); delete_if_exist('g1.mat'); delete_if_exist('H.dat'); delete_if_exist(['init_' output_file_tag '.dat']); delete_if_exist(['matlab_' output_file_tag '.prn']); +delete_if_exist(['mdd_t1_' output_file_tag '.out']); +delete_if_exist(['proposal_t1_' output_file_tag '.out']); +delete_if_exist(['mdd_t2_' output_file_tag '.out']); +delete_if_exist(['proposal_t2_' output_file_tag '.out']); delete_if_exist(['mdd_t3_' output_file_tag '.out']); delete_if_exist(['proposal_t3_' output_file_tag '.out']); +delete_if_exist(['mdd_t4_' output_file_tag '.out']); +delete_if_exist(['proposal_t4_' output_file_tag '.out']); +delete_if_exist(['mdd_t5_' output_file_tag '.out']); +delete_if_exist(['proposal_t5_' output_file_tag '.out']); delete_if_exist(['simulation_info_' output_file_tag '.out']); delete_if_exist(['simulation_' output_file_tag '.out']); +delete_if_exist(['smoothed_' output_file_tag '.out']); delete_if_exist([output_file_tag '_markov_file.dat']); end diff --git a/matlab/ms-sbvar/ms_compute_mdd.m b/matlab/ms-sbvar/ms_compute_mdd.m index 387c89737103c3dff9608ae5721e1d8ecb4b4e22..f77bbc6100cb743ec6a457694dd8732bdb7c62ab 100644 --- a/matlab/ms-sbvar/ms_compute_mdd.m +++ b/matlab/ms-sbvar/ms_compute_mdd.m @@ -1,12 +1,15 @@ -function oo_=ms_compute_mdd(options_,oo_) +function [options_, oo_]=ms_compute_mdd(M_, options_, oo_) %function ms_compute_mdd() -% calls ms sbvar mdd mex file +% Compute marginal data density % % INPUTS +% M_ % options_ +% oo_ % % OUTPUTS -% none +% options_ +% oo_ % % SPECIAL REQUIREMENTS % none @@ -28,8 +31,28 @@ function oo_=ms_compute_mdd(options_,oo_) % You should have received a copy of the GNU General Public License % along with Dynare. If not, see <http://www.gnu.org/licenses/>. -compute_mdd = create_mdd_commandline(options_); -[err] = ms_sbvar_command_line(compute_mdd); +disp('Marginal Data Density'); +options_ = set_ms_estimation_flags_for_other_mex(options_); +options_ = set_ms_simulation_flags_for_other_mex(options_); +oo_ = set_oo_w_estimation_output(options_, oo_); + +% setup command line options +opt = ['-mdd -seed ' num2str(options_.DynareRandomStreams.seed)]; +opt = [opt ' -ft ' options_.ms.output_file_tag]; +opt = [opt ' -d ' num2str(options_.ms.mdd_proposal_draws)]; +if options_.ms.mdd_use_mean_center + opt = [opt ' -use_mean']; +end +if size(options_.ms.mdd_proposal_type, 2) ~= 3 + error('ERROR: mdd_proposal_type takes exactly 3 arguments'); +else + opt = [opt ' -pt ' num2str(options_.ms.mdd_proposal_type(1))]; + opt = [opt ' -l ' num2str(options_.ms.mdd_proposal_type(2))]; + opt = [opt ' -h ' num2str(options_.ms.mdd_proposal_type(3))]; +end + +% compute mdd +[err] = ms_sbvar_command_line(opt); mexErrCheck('ms_sbvar_command_line mdd',err); % grab the muller/bridge log mdd from the output file @@ -54,25 +77,5 @@ if exist(mdd_filename,'file') oo_.ms.mueller_log_mdd = muller_mdd; oo_.ms.bridged_log_mdd = bridge_mdd; end -end - -function opt=create_mdd_commandline(options_) - -opt = '-mdd'; -opt = [opt set_flag_if_exists(options_.ms, 'output_file_tag')]; -opt = [opt set_flag_if_exists(options_.ms, 'load_mh_file ')]; -opt = [opt set_flag_if_exists(options_.ms, 'mdd_proposal_draws ')]; -opt = [opt set_flag_if_exists(options_.ms, 'mdd_use_mean_center')]; - -if size(options_.ms.mdd_proposal_type, 2) ~= 3 - error('ERROR: mdd_proposal_type takes exactly 3 arguments'); -else - opt = [opt ' -pt ' num2str(options_.ms.mdd_proposal_type(1))]; - opt = [opt ' -l ' num2str(options_.ms.mdd_proposal_type(2))]; - opt = [opt ' -h ' num2str(options_.ms.mdd_proposal_type(3))]; -end - -if options_.DynareRandomStreams.seed - opt = [' -seed' num2str(options_.DynareRandomStreams.seed)]; -end +options_ = initialize_ms_sbvar_options(M_, options_); end diff --git a/matlab/ms-sbvar/ms_compute_probabilities.m b/matlab/ms-sbvar/ms_compute_probabilities.m index 42b6b07d8c88b72a73c1d49982a571e3c5473429..73c731b5612d80b469cce4d77d1a4f4d54f1c179 100644 --- a/matlab/ms-sbvar/ms_compute_probabilities.m +++ b/matlab/ms-sbvar/ms_compute_probabilities.m @@ -1,12 +1,15 @@ -function ms_compute_probabilities(options_) +function [options_, oo_]=ms_compute_probabilities(M_, options_, oo_) %function ms_simulation() -% calls ms sbvar probabilities mex file +% Compute posterior mode regime probabilities % % INPUTS +% M_ % options_ +% oo_ % % OUTPUTS -% none +% options_ +% oo_ % % SPECIAL REQUIREMENTS % none @@ -28,20 +31,34 @@ function ms_compute_probabilities(options_) % You should have received a copy of the GNU General Public License % along with Dynare. If not, see <http://www.gnu.org/licenses/>. -compute_probabilities = create_probabilities_commandline(options_); -[err] = ms_sbvar_command_line(compute_probabilities); -mexErrCheck('ms_sbvar_command_line probabilities',err); +disp('Compute Marginal Data Density'); +options_ = set_ms_estimation_flags_for_other_mex(options_); +options_ = set_ms_simulation_flags_for_other_mex(options_); +oo_ = set_oo_w_estimation_output(options_, oo_); -end +% setup command line options +opt = ['-probabilities -seed ' num2str(options_.DynareRandomStreams.seed)]; +opt = [opt ' -ft ' options_.ms.output_file_tag]; -function opt=create_probabilities_commandline(options_) +if options_.ms.filtered_probabilities + opt = [opt ' -filtered' ]; + prob_out_file = ['filtered_' options_.ms.output_file_tag '.out']; +elseif options_.ms.real_time_smoothed_probabilities + opt = [opt ' -real_time_smoothed' ]; + prob_out_file = 0; +else + opt = [opt ' -smoothed' ]; + prob_out_file = ['smoothed_' options_.ms.output_file_tag '.out']; +end -opt = '-simulate'; -opt = [opt set_flag_if_exists(options_.ms, 'output_file_tag')]; -opt = [opt set_flag_if_exists(options_.ms, 'filtered_probabilities')]; -opt = [opt set_flag_if_exists(options_.ms, 'output_file_tag')]; +% compute probabilities +[err] = ms_sbvar_command_line(opt); +mexErrCheck('ms_sbvar_command_line probabilities',err); -if options_.DynareRandomStreams.seed - opt = [' -seed' num2str(options_.DynareRandomStreams.seed)]; +% now we want to plot the probabilities for each chain +if ischar(prob_out_file) + computed_probabilities = load(prob_out_file); + plot_ms_probabilities(options_, computed_probabilities); end +options_ = initialize_ms_sbvar_options(M_, options_); end diff --git a/matlab/ms-sbvar/ms_estimation.m b/matlab/ms-sbvar/ms_estimation.m index 400e62773aebe4175e0fcf5787c5cce2cfffa365..2e1bedf0c983249fa092bcd924ecc0f99ff793f4 100644 --- a/matlab/ms-sbvar/ms_estimation.m +++ b/matlab/ms-sbvar/ms_estimation.m @@ -1,12 +1,15 @@ -function ms_estimation(options_) +function [options_, oo_]=ms_estimation(M_, options_, oo_) %function ms_estimation() -% calls ms sbvar estimation mex file +% MS Sbvar Estimation % % INPUTS +% M_ % options_ +% oo_ % % OUTPUTS -% none +% options_ +% oo_ % % SPECIAL REQUIREMENTS % none @@ -28,45 +31,38 @@ function ms_estimation(options_) % You should have received a copy of the GNU General Public License % along with Dynare. If not, see <http://www.gnu.org/licenses/>. +disp('Estimation'); + % cleanup old files clean_ms_files(options_.ms.output_file_tag); % general setup ms_sbvar_setup(options_); -% estimation -perform_estimation = create_estimation_commandline(options_); -[err] = ms_sbvar_command_line(perform_estimation); -mexErrCheck('ms_sbvar_command_line estimation',err); - -end +% setup command line options +opt = ['-estimate -seed ' num2str(options_.DynareRandomStreams.seed)]; +opt = [opt ' -ft ' options_.ms.output_file_tag]; +opt = [opt ' -cb ' num2str(options_.ms.convergence_starting_value)]; +opt = [opt ' -ce ' num2str(options_.ms.convergence_ending_value)]; +opt = [opt ' -ci ' num2str(options_.ms.convergence_increment_value)]; +opt = [opt ' -ib ' num2str(options_.ms.max_iterations_starting_value)]; +opt = [opt ' -ii ' num2str(options_.ms.max_iterations_increment_value)]; +opt = [opt ' -mb ' num2str(options_.ms.max_block_iterations)]; +opt = [opt ' -repeat_max ' num2str(options_.ms.max_repeated_optimization_runs)]; +opt = [opt ' -repeat_tol_obj ' num2str(options_.ms.function_convergence_criterion)]; +opt = [opt ' -repeat_tol_parms ' num2str(options_.ms.parameter_convergence_criterion)]; +opt = [opt ' -random ' num2str(options_.ms.number_of_large_perturbations)]; +opt = [opt ' -random_small ' num2str(options_.ms.number_of_small_perturbations)]; +opt = [opt ' -random_small_ndraws ' num2str(options_.ms.number_of_posterior_draws_after_perturbation)]; +opt = [opt ' -random_max ' num2str(options_.ms.max_number_of_stages)]; +opt = [opt ' -random_tol_obj ' num2str(options_.ms.random_function_convergence_criterion)]; +opt = [opt ' -random_tol_parms ' num2str(options_.ms.random_parameter_convergence_criterion)]; -function opt=create_estimation_commandline(options_) - -opt = '-estimate'; -opt = [opt set_flag_if_exists(options_.ms, 'output_file_tag')]; -opt = [opt set_flag_if_exists(options_.ms, 'convergence_starting_value')]; -opt = [opt set_flag_if_exists(options_.ms, 'convergence_ending_value')]; -opt = [opt set_flag_if_exists(options_.ms, 'convergence_increment_value')]; -opt = [opt set_flag_if_exists(options_.ms, 'max_iterations_starting_value')]; -opt = [opt set_flag_if_exists(options_.ms, 'max_iterations_increment_value')]; -opt = [opt set_flag_if_exists(options_.ms, 'max_block_iterations')]; -opt = [opt set_flag_if_exists(options_.ms, 'max_repeated_optimization_runs')]; -opt = [opt set_flag_if_exists(options_.ms, 'function_convergence_criterion')]; -opt = [opt set_flag_if_exists(options_.ms, 'parameter_convergence_criterion')]; -opt = [opt set_flag_if_exists(options_.ms, 'number_of_large_perturbations')]; -opt = [opt set_flag_if_exists(options_.ms, 'number_of_small_perturbations')]; -opt = [opt set_flag_if_exists(options_.ms, 'number_of_posterior_draws_after_perturbation')]; -opt = [opt set_flag_if_exists(options_.ms, 'max_number_of_stages')]; -opt = [opt set_flag_if_exists(options_.ms, 'random_function_convergence_criterion')]; -opt = [opt set_flag_if_exists(options_.ms, 'random_parameter_convergence_criterion')]; - -if options_.DynareRandomStreams.seed - opt = [' -seed' num2str(options_.DynareRandomStreams.seed)]; -end - -% if ischar(options_.ms.mode_file) > 0 && exist(options_.ms.mode_file) > 0 -% opt = [opt ' -fp ' options_.ms.mode_file]; -% end +% estimation +[err] = ms_sbvar_command_line(opt); +mexErrCheck('ms_sbvar_command_line estimation', err); +options_ = set_ms_estimation_flags_for_other_mex(options_); +oo_ = set_oo_w_estimation_output(options_, oo_); +options_ = initialize_ms_sbvar_options(M_, options_); end diff --git a/matlab/ms-sbvar/ms_forecast.m b/matlab/ms-sbvar/ms_forecast.m new file mode 100644 index 0000000000000000000000000000000000000000..f9d59546bcbf6cafadcbf4f1e2f4f93c0b951ea4 --- /dev/null +++ b/matlab/ms-sbvar/ms_forecast.m @@ -0,0 +1,67 @@ +function [options_, oo_]=ms_forecast(M_, options_, oo_) +%function ms_forecast() +% calls ms irf mex function +% +% INPUTS +% M_ +% options_ +% oo_ +% +% OUTPUTS +% options_ +% oo_ +% +% SPECIAL REQUIREMENTS +% none + +% Copyright (C) 2011 Dynare Team +% +% This file is part of Dynare. +% +% Dynare is free software: you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by +% the Free Software Foundation, either version 3 of the License, or +% (at your option) any later version. +% +% Dynare is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with Dynare. If not, see <http://www.gnu.org/licenses/>. + +disp('Forecasts'); +options_ = set_ms_estimation_flags_for_other_mex(options_); +options_ = set_ms_simulation_flags_for_other_mex(options_); +oo_ = set_oo_w_estimation_output(options_, oo_); + +opt = {options_.ms.output_file_tag, ... + 'seed', options_.DynareRandomStreams.seed, ... + 'horizon', options_.ms.horizon, ... + 'data',options_.ms.forecast_data_obs ... + 'error_bands', options_.ms.error_bands, ... + 'percentiles', options_.ms.error_band_percentiles, ... + 'thin', options_.ms.thinning_factor }; + +[err, forecast] = mex_ms_forecast(opt{:},'free_parameters',oo_.ms.maxparams,'shocks_per_parameter', options_.ms.shock_draws); +mexErrCheck('mex_ms_forecast ergodic ', err); +plot_ms_forecast(M_,forecast,'Forecast'); + +[err, regime_forecast] = mex_ms_forecast(opt{:},'free_parameters',oo_.ms.maxparams,'shocks_per_parameter', options_.ms.shock_draws,'regimes'); +mexErrCheck('mex_ms_forecast ergodic regimes', err); +save([M_.fname '/' options_.ms.output_file_tag '_ergodic_forecast.mat'], 'forecast', 'regime_forecast'); + +if exist(options_.ms.load_mh_file,'file') > 0 + [err, forecast] = mex_ms_forecast(opt{:},'free_parameters',oo_.ms.maxparams,'shocks_per_parameter', options_.ms.shocks_per_parameter, ... + 'simulation_file',options_.ms.load_mh_file,'parameter_uncertainty'); + mexErrCheck('mex_ms_forecast bayesian ', err); + plot_ms_forecast(M_,forecast,'Forecast w/ Parameter Uncertainty'); + + [err, regime_forecast] = mex_ms_forecast(opt{:},'free_parameters',oo_.ms.maxparams,'shocks_per_parameter', options_.ms.shocks_per_parameter, ... + 'simulation_file',options_.ms.load_mh_file,'parameter_uncertainty','regimes'); + mexErrCheck('mex_ms_forecast bayesian regimes ', err); + save([M_.fname '/' options_.ms.output_file_tag '_bayesian_forecast.mat'], 'forecast', 'regime_forecast'); +end +options_ = initialize_ms_sbvar_options(M_, options_); +end diff --git a/matlab/ms-sbvar/ms_irf.m b/matlab/ms-sbvar/ms_irf.m new file mode 100644 index 0000000000000000000000000000000000000000..42ebe0950ffe52f4f52fc8fcf8a43ee3990ee11b --- /dev/null +++ b/matlab/ms-sbvar/ms_irf.m @@ -0,0 +1,67 @@ +function [options_, oo_]=ms_irf(M_, options_, oo_) +%function ms_irf() +% calls ms irf mex function +% +% INPUTS +% M_ +% options_ +% oo_ +% +% OUTPUTS +% options_ +% oo_ +% +% SPECIAL REQUIREMENTS +% none + +% Copyright (C) 2011 Dynare Team +% +% This file is part of Dynare. +% +% Dynare is free software: you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by +% the Free Software Foundation, either version 3 of the License, or +% (at your option) any later version. +% +% Dynare is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with Dynare. If not, see <http://www.gnu.org/licenses/>. + +disp('IRFs'); +options_ = set_ms_estimation_flags_for_other_mex(options_); +options_ = set_ms_simulation_flags_for_other_mex(options_); +oo_ = set_oo_w_estimation_output(options_, oo_); + +opt = {options_.ms.output_file_tag, ... + 'seed', options_.DynareRandomStreams.seed, ... + 'horizon', options_.ms.horizon, ... + 'filtered', options_.ms.filtered_probabilities, ... + 'error_bands', options_.ms.error_bands, ... + 'percentiles', options_.ms.error_band_percentiles, ... + 'thin', options_.ms.thinning_factor }; + +[err, irf] = mex_ms_irf(opt{:}, 'free_parameters', oo_.ms.maxparams, 'shocks_per_parameter', options_.ms.shock_draws); +mexErrCheck('mex_ms_irf ergodic ', err); +plot_ms_irf(M_,irf,options_.varobs,'Ergodic Impulse Responses'); + +[err, regime_irfs] = mex_ms_irf(opt{:}, 'free_parameters',oo_.ms.maxparams,'shocks_per_parameter', options_.ms.shock_draws,'regimes'); +mexErrCheck('mex_ms_irf ergodic regimes ',err); +save([M_.fname '/' options_.ms.output_file_tag '_ergodic_irf.mat'], 'irf', 'regime_irfs'); + +if exist(options_.ms.load_mh_file,'file') > 0 + [err, irf] = mex_ms_irf(opt{:}, 'shocks_per_parameter', options_.ms.shocks_per_parameter, ... + 'parameter_uncertainty','simulation_file',options_.ms.load_mh_file); + mexErrCheck('mex_ms_irf bayesian ',err); + plot_ms_irf(M_,irf,options_.varobs,'Impulse Responses w/ Parameter Uncertainty'); + + [err, regime_irfs] = mex_ms_irf(opt{:}, 'shocks_per_parameter', options_.ms.shocks_per_parameter, ... + 'simulation_file',options_.ms.load_mh_file,'parameter_uncertainty','regimes'); + mexErrCheck('mex_ms_irf bayesian regimes ',err); + save([M_.fname '/' options_.ms.output_file_tag '_bayesian_irf.mat'], 'irf', 'regime_irfs'); +end +options_ = initialize_ms_sbvar_options(M_, options_); +end diff --git a/matlab/ms-sbvar/ms_simulation.m b/matlab/ms-sbvar/ms_simulation.m index adbc0cb5812cee0187cf581a3b70980647519b49..26e742346fc02cbe3bd82205429f300462ca6bcd 100644 --- a/matlab/ms-sbvar/ms_simulation.m +++ b/matlab/ms-sbvar/ms_simulation.m @@ -1,12 +1,15 @@ -function ms_simulation(options_) +function [options_, oo_]=ms_simulation(M_, options_, oo_) %function ms_simulation() -% calls ms sbvar simulation mex file +% MS Sbvar Simulation % % INPUTS +% M_ % options_ +% oo_ % % OUTPUTS -% none +% options_ +% oo_ % % SPECIAL REQUIREMENTS % none @@ -28,22 +31,22 @@ function ms_simulation(options_) % You should have received a copy of the GNU General Public License % along with Dynare. If not, see <http://www.gnu.org/licenses/>. -perform_simulation = create_simulation_commandline(options_); -[err] = ms_sbvar_command_line(perform_simulation); -mexErrCheck('ms_sbvar_command_line simulate',err); +disp('Simulation'); +options_ = set_ms_estimation_flags_for_other_mex(options_); +oo_ = set_oo_w_estimation_output(options_, oo_); -end +% setup command line options +opt = ['-simulate -seed ' num2str(options_.DynareRandomStreams.seed)]; +opt = [opt ' -ft ' options_.ms.output_file_tag]; +opt = [opt ' -ndraws ' num2str(options_.ms.mh_replic)]; +opt = [opt ' -burnin ' num2str(options_.ms.drop)]; +opt = [opt ' -thin ' num2str(options_.ms.thinning_factor)]; +opt = [opt ' -mh ' num2str(options_.ms.adaptive_mh_draws)]; -function opt=create_simulation_commandline(options_) - -opt = '-simulate'; -opt = [opt set_flag_if_exists(options_.ms, 'output_file_tag')]; -opt = [opt set_flag_if_exists(options_.ms, 'mh_replic')]; -opt = [opt set_flag_if_exists(options_.ms, 'drop')]; -opt = [opt set_flag_if_exists(options_.ms, 'thinning_factor')]; -opt = [opt set_flag_if_exists(options_.ms, 'adaptive_mh_draws')]; +% simulation +[err] = ms_sbvar_command_line(opt); +mexErrCheck('ms_sbvar_command_line simulate',err); -if options_.DynareRandomStreams.seed - opt = [' -seed' num2str(options_.DynareRandomStreams.seed)]; -end +options_.ms.simulation_file_tag = options_.ms.output_file_tag; +options_ = initialize_ms_sbvar_options(M_, options_); end diff --git a/matlab/ms-sbvar/ms_variance_decomposition.m b/matlab/ms-sbvar/ms_variance_decomposition.m new file mode 100644 index 0000000000000000000000000000000000000000..556490ed5ddfeffd1ae21498c0d9de971a2ab37a --- /dev/null +++ b/matlab/ms-sbvar/ms_variance_decomposition.m @@ -0,0 +1,67 @@ +function [options_, oo_]=ms_variance_decomposition(M_, options_, oo_) +%function ms_variance_decomposition() +% calls ms_variance_decomposition mex function +% +% INPUTS +% M_ +% options_ +% oo_ +% +% OUTPUTS +% options_ +% oo_ +% +% SPECIAL REQUIREMENTS +% none + +% Copyright (C) 2011 Dynare Team +% +% This file is part of Dynare. +% +% Dynare is free software: you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by +% the Free Software Foundation, either version 3 of the License, or +% (at your option) any later version. +% +% Dynare is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with Dynare. If not, see <http://www.gnu.org/licenses/>. + +disp('Variance Decomposition'); +options_ = set_ms_estimation_flags_for_other_mex(options_); +options_ = set_ms_simulation_flags_for_other_mex(options_); +oo_ = set_oo_w_estimation_output(options_, oo_); + +% NOTICE THAT VARIANCE DECOMPOSITION DEFAULTS TO USING THE MEAN, NOT MEDIAN OR BANDED + +opt = {options_.ms.output_file_tag, ... + 'seed', options_.DynareRandomStreams.seed, ... + 'horizon', options_.ms.horizon, ... + 'filtered', options_.ms.filtered_probabilities, ... + 'error_bands', options_.ms.error_bands, ... + 'percentiles', options_.ms.error_band_percentiles, ... + 'thin', options_.ms.thinning_factor, ... + 'mean'}; + +[err, vd] = mex_ms_variance_decomposition(opt{:},'free_parameters',oo_.ms.maxparams,'shocks',options_.ms.shock_draws); +mexErrCheck('mex_ms_variance_decomposition ergodic ', err); +plot_ms_variance_decomposition(M_,vd, 'Ergodic Variance Decomposition'); + +[err, regime_vd] = mex_ms_variance_decomposition(opt{:},'free_parameters',oo_.ms.maxparams,'shocks',options_.ms.shock_draws,'regimes'); +mexErrCheck('mex_ms_variance_decomposition ergodic regimes', err); +save([M_.fname '/' options_.ms.output_file_tag '_ergodic_vd.mat'], 'vd', 'regime_vd'); + +if exist(options_.ms.load_mh_file,'file') > 0 + [err, vd] = mex_ms_variance_decomposition(opt{:},'simulation_file',options_.ms.load_mh_file,'shocks',options_.ms.shocks_per_parameter,'parameter_uncertainty'); + mexErrCheck('mex_ms_variance_decomposition bayesian ', err); + + [err, regime_vd] = mex_ms_variance_decomposition(opt{:},'simulation_file',options_.ms.load_mh_file,'shocks',options_.ms.shocks_per_parameter,'parameter_uncertainty','regimes'); + mexErrCheck('mex_ms_variance_decomposition bayesian regimes ', err); + save([M_.fname '/' options_.ms.output_file_tag '_bayesian_vd.mat'], 'vd', 'regime_vd'); +end +options_ = initialize_ms_sbvar_options(M_, options_); +end diff --git a/matlab/ms-sbvar/plot_ms_forecast.m b/matlab/ms-sbvar/plot_ms_forecast.m index 0ec63a7c3f0167c2f5928beea61419675d1fc041..2f7f7b352469cd02aeb4b84a1801336d74dfa253 100644 --- a/matlab/ms-sbvar/plot_ms_forecast.m +++ b/matlab/ms-sbvar/plot_ms_forecast.m @@ -1,8 +1,9 @@ -function plot_ms_forecast(forecast,title_) +function plot_ms_forecast(M_,forecast,title_) % function [] = plot_ms_forecast(forecast,names) % plots the forecast from the output from a ms-sbvar % % INPUTS +% M_ % forecast should be in the form (percentile x horizon x nvar ), if banded otherwise % ( horizon x nvar ) % @@ -26,9 +27,6 @@ function plot_ms_forecast(forecast,title_) % You should have received a copy of the GNU General Public License % along with Dynare. If not, see <http://www.gnu.org/licenses/>. - - global M_ oo_ options_ - nc = 2; nr = 2; nvars = M_.endo_nbr; @@ -139,4 +137,4 @@ function plot_ms_forecast(forecast,title_) end -end \ No newline at end of file +end diff --git a/matlab/ms-sbvar/plot_ms_irf.m b/matlab/ms-sbvar/plot_ms_irf.m index 2d37b2e99e24924d7fc4857eff63d575d3fd2140..0675b0966e3166cd17b1db775ec6598f7f0bcdb4 100644 --- a/matlab/ms-sbvar/plot_ms_irf.m +++ b/matlab/ms-sbvar/plot_ms_irf.m @@ -1,8 +1,9 @@ -function plot_ms_irf(irf,names,title_) +function plot_ms_irf(M_,irf,names,title_) % function [] = plot_ms_irf(irf,names) % plots the impulse responses from the output from a ms-sbvar % % INPUTS +% M_ % irf should be in the form (percentile x horizon x (nvar x nvar)), if banded otherwise % ( horizon x (nvar x nvar) ) % @@ -30,8 +31,6 @@ function plot_ms_irf(irf,names,title_) % % You should have received a copy of the GNU General Public License % along with Dynare. If not, see <http://www.gnu.org/licenses/>. - - global M_ oo_ options_ nc = 2; nr = 2; @@ -128,4 +127,4 @@ function plot_ms_irf(irf,names,title_) %suptitle(title_); end -end \ No newline at end of file +end diff --git a/matlab/ms-sbvar/plot_ms_probabilities.m b/matlab/ms-sbvar/plot_ms_probabilities.m index 1c81b57d95edfe23812e2e38f88b4796678cd2f6..00694caaa9f053772ce782fe28e9e2367c0be0d8 100644 --- a/matlab/ms-sbvar/plot_ms_probabilities.m +++ b/matlab/ms-sbvar/plot_ms_probabilities.m @@ -1,4 +1,4 @@ -function plot_ms_probabilities(computed_probabilities) +function plot_ms_probabilities(options_, computed_probabilities) % function plot_ms_probabilities(computed_probabilities) % Plots the regime probablities for each graph % @@ -27,8 +27,6 @@ function plot_ms_probabilities(computed_probabilities) % % You should have received a copy of the GNU General Public License % along with Dynare. If not, see <http://www.gnu.org/licenses/>. - - global M_ oo_ options_ [T,num_grand_regimes] = size(computed_probabilities); num_chains = length(options_.ms.ms_chain); @@ -65,4 +63,4 @@ function [chains] = iterate_chain(probs, t, chains, chain, num_chains) chains = iterate_chain(p, t, chains, chain+1, num_chains); end end -end \ No newline at end of file +end diff --git a/matlab/ms-sbvar/plot_ms_variance_decomposition.m b/matlab/ms-sbvar/plot_ms_variance_decomposition.m index e7c8657943ab0d79ec4bc6f2e4b38d64fc27686e..d04b43c49ae3ecac2010a1f12b4fb8993fbf5b4f 100644 --- a/matlab/ms-sbvar/plot_ms_variance_decomposition.m +++ b/matlab/ms-sbvar/plot_ms_variance_decomposition.m @@ -1,7 +1,8 @@ -function plot_ms_variance_decomposition(vd, title_, varargin) +function plot_ms_variance_decomposition(M_, vd, title_, varargin) % plot the variance decomposition of shocks % % Inputs +% M_ % shocks: matrix of the individual shocks Tx(KxK)with J=number of shocks % % Optional Inputs @@ -31,8 +32,7 @@ function plot_ms_variance_decomposition(vd, title_, varargin) % % You should have received a copy of the GNU General Public License % along with Dynare. If not, see <http://www.gnu.org/licenses/>. - - global M_ oo_ options_ + nvars = M_.endo_nbr; endo_names = M_.endo_names; @@ -145,4 +145,4 @@ function plot_ms_variance_decomposition(vd, title_, varargin) %suptitle(title_); end -end \ No newline at end of file +end diff --git a/matlab/ms-sbvar/set_flag_if_exists.m b/matlab/ms-sbvar/set_flag_if_exists.m deleted file mode 100644 index cf6f2e24fba39791c9b9cb437b4b1c6e919e1bca..0000000000000000000000000000000000000000 --- a/matlab/ms-sbvar/set_flag_if_exists.m +++ /dev/null @@ -1,97 +0,0 @@ -function flagstr = set_flag_if_exists(msoptions, flag) -%function set_flag_if_exists() -% adds a flag to the command line if it exists in the msoptions structure -% -% INPUTS -% msoptions: options_.ms structure -% flag: string representing the flag to check -% -% OUTPUTS -% none -% -% SPECIAL REQUIREMENTS -% none - -% Copyright (C) 2011 Dynare Team -% -% This file is part of Dynare. -% -% Dynare is free software: you can redistribute it and/or modify -% it under the terms of the GNU General Public License as published by -% the Free Software Foundation, either version 3 of the License, or -% (at your option) any later version. -% -% Dynare is distributed in the hope that it will be useful, -% but WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -% GNU General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with Dynare. If not, see <http://www.gnu.org/licenses/>. - -if ~isfield(msoptions, flag) - flagstr = ''; - return; -end - -% Convert from Dynare options to ms-sbvar c-code options here -% to allow for clear programming in the rest of the Dynare -% matlab files -switch flag - case 'output_file_tag' % general option - cFlag = 'ft'; - case 'convergence_starting_value' % estimation options - cFlag = 'cb'; - case 'convergence_ending_value' - cFlag = 'ce'; - case 'convergence_increment_value' - cFlag = 'ci'; - case 'max_iterations_starting_value' - cFlag = 'ib'; - case 'max_iterations_increment_value' - cFlag = 'ii'; - case 'max_block_iterations' - cFlag = 'mb'; - case 'max_repeated_optimization_runs' - cFlag = 'repeat_max'; - case 'function_convergence_criterion' - cFlag = 'repeat_tol_obj'; - case 'parameter_convergence_criterion' - cFlag = 'repeat_tol_params'; - case 'number_of_large_perturbations' - cFlag = 'random'; - case 'number_of_small_perturbations' - cFlag = 'random_small'; - case 'number_of_posterior_draws_after_perturbation' - cFlag = 'random_small_ndraws'; - case 'max_number_of_stages' - cFlag = 'random_max'; - case 'random_function_convergence_criterion' - cFlag = 'random_tol_obj'; - case 'random_parameter_convergence_criterion' - cFlag = 'random_tol_params'; - case 'mh_replic' % simulation options - cFlag = 'ndraws'; - case 'drop' - cFlag = 'burnin'; - case 'thinning_factor' - cFlag = 'thin'; - case 'adaptive_mh_draws' - cFlag = 'mh'; - case 'load_mh_file' % mdd options - cFlag = 'pf'; - case 'mdd_proposal_draws' - cFlag = 'mdd_proposal_draws'; - case 'mdd_use_mean_center' - cFlag = 'use_mean'; - case 'filtered_probabilities' % probabilities options - cFlag = 'filtered'; - case 'real_time_smoothed_probabilities' - cFlag = 'real_time_smoothed'; - otherwise - cFlag = flag; -end - -flagstr = [' -' cFlag ' ' num2str(eval(['msoptions.' flag]))]; - -end \ No newline at end of file diff --git a/matlab/ms-sbvar/set_input_options.m b/matlab/ms-sbvar/set_input_options.m new file mode 100644 index 0000000000000000000000000000000000000000..f8b7e21ea80875f03cd0b55f8e326ad8a2cfb243 --- /dev/null +++ b/matlab/ms-sbvar/set_input_options.m @@ -0,0 +1,57 @@ +function options_=set_input_options(options_) +%function set_input_options() +% get mode_file from filename if it's not in mode_file +% +% INPUTS +% options_ +% +% OUTPUTS +% options_ +% +% SPECIAL REQUIREMENTS +% none + +% Copyright (C) 2011 Dynare Team +% +% This file is part of Dynare. +% +% Dynare is free software: you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by +% the Free Software Foundation, either version 3 of the License, or +% (at your option) any later version. +% +% Dynare is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with Dynare. If not, see <http://www.gnu.org/licenses/>. + +% init file +if ~isfield(options_.ms, 'init_file') + options_.ms.init_file = ['init_' options_.ms.output_file_tag '.dat']; +end + +if ~exist(options_.ms.init_file, 'file') + error(['ERROR: cannot find init_file: ' options_.ms.init_file]); +end + +% free parameter file +if ~isfield(options_.ms, 'free_param_file') + options_.ms.free_param_file = ['est_free_' options_.ms.output_file_tag '.out']; +end + +if ~exist(options_.ms.free_param_file, 'file') + error(['ERROR: cannot find free_param_file: ' options_.ms.free_param_file]); +end + +% simulation file +if ~isfield(options_.ms, 'load_mh_file') + options_.ms.load_mh_file = ['simulation_' options_.ms.output_file_tag '.out']; +end + +if ~exist(options_.ms.load_mh_file, 'file') + error(['ERROR: Could not find Metropolis Hastings file: ' options_.ms.load_mh_file]); +end +end diff --git a/matlab/ms-sbvar/set_ms_estimation_flags_for_other_mex.m b/matlab/ms-sbvar/set_ms_estimation_flags_for_other_mex.m new file mode 100644 index 0000000000000000000000000000000000000000..0d179e2bc554be2f29dd047a2730d0de5f6057bd --- /dev/null +++ b/matlab/ms-sbvar/set_ms_estimation_flags_for_other_mex.m @@ -0,0 +1,44 @@ +function options_=set_ms_estimation_flags_for_other_mex(options_) +%function set_ms_estimation_flags_for_other_mex() +% MS Sbvar Estimation +% +% INPUTS +% options_ +% +% OUTPUTS +% options_ +% +% SPECIAL REQUIREMENTS +% none + +% Copyright (C) 2011 Dynare Team +% +% This file is part of Dynare. +% +% Dynare is free software: you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by +% the Free Software Foundation, either version 3 of the License, or +% (at your option) any later version. +% +% Dynare is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with Dynare. If not, see <http://www.gnu.org/licenses/>. + +if ~isfield(options_.ms,'estimation_file_tag') + options_.ms.estimation_file_tag = options_.ms.output_file_tag; +end +options_.ms.free_param_file = ['est_free_' options_.ms.estimation_file_tag '.out']; +options_.ms.init_file = ['init_' options_.ms.estimation_file_tag '.dat']; + +if ~exist(options_.ms.init_file,'file') + error(['ERROR: Could not find initialization file: ' options_.ms.init_file]); +end + +if ~exist(options_.ms.free_param_file,'file') + error(['ERROR: Could not find free parameter file: ' options_.ms.free_param_file]); +end +end diff --git a/matlab/ms-sbvar/set_ms_simulation_flags_for_other_mex.m b/matlab/ms-sbvar/set_ms_simulation_flags_for_other_mex.m new file mode 100644 index 0000000000000000000000000000000000000000..a37da2cfa4ccfe5ebba7af352372a3b2fc037737 --- /dev/null +++ b/matlab/ms-sbvar/set_ms_simulation_flags_for_other_mex.m @@ -0,0 +1,39 @@ +function options_=set_ms_simulation_flags_for_other_mex(options_) +%function set_ms_simulation_flags_for_other_mex() +% MS Sbvar Estimation +% +% INPUTS +% options_ +% +% OUTPUTS +% options_ +% +% SPECIAL REQUIREMENTS +% none + +% Copyright (C) 2011 Dynare Team +% +% This file is part of Dynare. +% +% Dynare is free software: you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by +% the Free Software Foundation, either version 3 of the License, or +% (at your option) any later version. +% +% Dynare is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with Dynare. If not, see <http://www.gnu.org/licenses/>. + +if ~isfield(options_.ms,'simulation_file_tag') + options_.ms.simulation_file_tag = options_.ms.output_file_tag; +end +options_.ms.load_mh_file = ['simulation_' options_.ms.simulation_file_tag '.out']; + +if ~exist(options_.ms.load_mh_file,'file') + error(['ERROR: Could not find Metropolis Hastings file: ' options_.ms.load_mh_file]); +end +end diff --git a/matlab/ms-sbvar/set_oo_w_estimation_output.m b/matlab/ms-sbvar/set_oo_w_estimation_output.m new file mode 100644 index 0000000000000000000000000000000000000000..3bfd80125ebf5e5e6d0c3a25a248565d7ca5ffc1 --- /dev/null +++ b/matlab/ms-sbvar/set_oo_w_estimation_output.m @@ -0,0 +1,42 @@ +function oo_=set_oo_w_estimation_output(options_, oo_) +%function set_oo_w_estimation_output() +% places estimation output in oo_ structure +% +% INPUTS +% options_ +% oo_ +% +% OUTPUTS +% oo_ +% +% SPECIAL REQUIREMENTS +% none + +% Copyright (C) 2011 Dynare Team +% +% This file is part of Dynare. +% +% Dynare is free software: you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by +% the Free Software Foundation, either version 3 of the License, or +% (at your option) any later version. +% +% Dynare is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with Dynare. If not, see <http://www.gnu.org/licenses/>. + + +oo_.ms.maxparams = load(options_.ms.free_param_file); +oo_.ms.maxparams = oo_.ms.maxparams(3:end)'; + +if ~isfield(oo_.ms, 'A0') || ~isfield(oo_.ms, 'Aplus') ... + || ~isfield(oo_.ms, 'Zeta') || ~isfield(oo_.ms, 'Q') + [err, oo_.ms.A0, oo_.ms.Aplus, oo_.ms.Zeta, oo_.ms.Q] = ... + mex_ms_convert_free_parameters(options_.ms.output_file_tag, oo_.ms.maxparams); + mexErrCheck('mex_ms_convert_free_parameters', err); +end +end diff --git a/matlab/ms-sbvar/sz_prd.m b/matlab/ms-sbvar/sz_prd.m deleted file mode 100644 index fb779068c6f6c2e55ea6f988db9ed0162fef6dcf..0000000000000000000000000000000000000000 --- a/matlab/ms-sbvar/sz_prd.m +++ /dev/null @@ -1,800 +0,0 @@ -function sz_prd(M,options_) - - global oo_; - %========================================================================== - %== Directory structure - %========================================================================== - - %generation of mhm file - %generateMHM_input(options_); - - ms_root = strrep(which('ms_sbvar'),'/ms_sbvar.m',''); - - % path for C executables - %c_path='./c-executables'; - c_path = [ms_root '../../ms-sbvar']; - - % path for Markov specification - %m_spec_path=[ms_root '/switching_specification']; - - % path for MHM specification - %mhm_spec_path=[ms_root '/mhm_specification']; - - %========================================================================== - %== Processing control - %========================================================================== - % 1 to use standalone, 0 to use mex - options_.ms.standalone = 0; - - %========================================================================== - %== Output control - %========================================================================== - % tag for output files %create an option - %options_.ms.output_file_tag='test_2v'; - - % 1 to create init_<options_.ms.output_file_tag>.dat, 0 otherwise - %options_.ms.create_initialization_file = 1; %0 originally - - % 1 to perform estimation, 0 otherwise - %options_.ms.estimate_msmodel = 1; - - % 1 to perform estimation, 0 otherwise - %options_.ms.compute_mdd = 1; - - % 1 to compute probabilites, 0 otherwise - %options_.ms.compute_probabilities = 1;%1 in the original - - % 1 to Prints draws of the posterior - %options_.ms.print_draws = 1; - %options_.ms.n_draws=1000; - %options_.ms.thinning_factor=1; - - %========================================================================== - %== Markov Process Specification File - %========================================================================== - %options_.ms.markov_file = 'specification_2v2c.dat'; %create an option - markov_file = [options_.ms.markov_file '.dat']; - - %========================================================================== - %== Markov Process Specification File - %========================================================================== - %options_.ms.mhm_file = 'MHM_input.dat'; - - - %mhm_file = '/MHM_input.dat'; - %options_.ms.proposal_draws = 100000; - - %========================================================================== - %== Var Specification - %========================================================================== - % Number of options_.ms.nlags - %options_.ms.nlags = 4; - - % Var restriction function - %options_.ms.restriction_fname = 'ftd_upperchol3v'; %create an option - - - %========================================================================== - %== BVAR prior - %========================================================================== - - %=== The following mu is effective only if indxPrior==1. - mu = zeros(6,1); % hyperparameters - if length(options_.ms.coefficients_prior_hyperparameters) ~= 6 - error('When specifying the coefficients_prior_hyperparameters, you must pass a vector of 6 numbers') - end - mu = options_.ms.coefficients_prior_hyperparameters; - mu = reshape(mu,1,6); - - % mu(1): overall tightness for A0 and Aplus - % mu(2): relative tightness for Aplus - % mu(3): relative tightness for the constant term - % mu(4): tightness on lag decay. (1.2 - 1.5 faster decay produces better - % inflation forecasts - % mu(5): weight on nvar sums of coeffs dummy observations (unit roots). - % mu(6): weight on single dummy initial observation including constant - % (cointegration, unit roots, and stationarity). - - % Alpha on p. 66 for squared time-varying structural shock lambda. - galp = 1.0; - - % Beta on p. 66 for squared time-varying structural shock lambda. - gbeta = 1.0; - - % Case 3 (no state change across options_.ms.nlags (l) but allows all variables for a - % given lag to switch states). Normal prior variance for glamda - % (nvar-by-nvar for each state) for different variables in lagged D+. See - % p.71v. - gsig2_lmdm = 50^2; - - - %========================================================================== - %== Data - %========================================================================== - % Read in data to produce rectangular array named xdd. Each column is one - % data series. - %load ./data/artificial_data - xdd=options_.data; - - % Information about timing of the data for consistancy checks - % quarters (4) or months (12) - %q_m = 4; - %options_.ms.freq = 4; - q_m = options_.ms.freq; - % beginning year in data set - %yrBin=1978; - %options_.ms.initial_year = 1959; - yrBin=options_.ms.initial_year; - % beginning quarter or month in data set - %qmBin=1; - %options_.ms.initial_subperiod = 1; - qmBin=options_.ms.initial_subperiod; - % final year in data set - %yrFin=2007; - %options_.ms.final_year = 2005; - yrFin=options_.ms.final_year; - % final month or quarter in data set - %qmFin=4; - %options_.ms.final_subperiod = 4; - qmFin=options_.ms.final_subperiod; - % first year to use in estimation - %yrStart=yrBin; - yrStart=options_.ms.initial_year; - % first quarter or month to use in estimation - %qmStart=qmBin; - qmStart=options_.ms.initial_subperiod; - % last year to use in estimation - %yrEnd=yrFin; - yrEnd=options_.ms.final_year; - % last quater or month to use in estimation - %qmEnd=qmFin; - qmEnd=options_.ms.final_subperiod; - % Log variables in xdd - logindx = []; - - % Convert percent to decimal in xdd - pctindx = []; - - % Select the variable to use and rearrange columns if desired - %vlist = [3 1 2]; - %options_.ms.vlist = [1 2 3]; - options_.ms.vlist = [1:size(options_.varobs,1)]; - vlist1=options_.ms.vlist; - - %========================================================================== - %== Linux or Windows system - differences in some naming conventions - %========================================================================== - use_linux = 1; - - - %========================================================================== - %== Random number seed for selecting starting point in constant parameter - %== optimization. - %========================================================================== - % Set to zero to set from clock - %seednumber = 7910; - %if seednumber - % randn('state',seednumber); - % rand('state',seednumber); - %else - % rand('state',fix(100*sum(clock))); - % randn('state',1000000000*rand); - % rand('state',1000000000*rand); - %end - seednumber = options_.DynareRandomStreams.seed; - - %========================================================================== - %========================================================================== - %========================================================================== - %== Beginning of code. Modify below at own risk. - %========================================================================== - - % options that may at some point become user specified - %indxC0Pres = 0; % 1: cross-A0-and-A+ restrictions; 0: idfile_const is all we have - indxC0Pres =options_.ms.cross_restrictions; - % Example for indxOres==1: restrictions of the form P(t) = P(t-1). - %Rform = 0; % 1: contemporaneous recursive reduced form; 0: restricted (non-recursive) form - Rform =options_.ms.contemp_reduced_form; - % % % Pseudo = 0; % 1: Pseudo forecasts; 0: real time forecasts - %indxPrior = 1; % 1: Bayesian prior; 0: no prior - indxPrior =options_.ms.bayesian_prior; - %indxDummy = indxPrior; % 1: add dummy observations to the data; 0: no dummy added. - indxDummy = options_.ms.bayesian_prior; - %ndobs = 0; % No dummy observations for xtx, phi, fss, xdatae, etc. Dummy observations are used as an explicit prior in fn_rnrprior_covres_dobs.m. - %ndobs =options_.ms.dummy_obs; - %if indxDummy - % ndobs=nvar+1; % number of dummy observations - %else - % ndobs=0; % no dummy observations - %end - - % - hpmsmd = [0.0; 0.0]; - indxmsmdeqn = [0; 0; 0; 0]; %This option disenable using this in fn_rnrprior_covres_dobs.m - - nStates = -1; - - - - - %========================================================================== - %== Create initialization file - %========================================================================== - if options_.ms.create_initialization_file == 1 - %====================================================================== - %== Check and setup data - %====================================================================== - % log data - xdd(:,logindx) = log(xdd(:,logindx)); - - % convert percentage to decimal - xdd(:,pctindx)=.01*xdd(:,pctindx); - - if (q_m ~= 12) && (q_m ~= 4) - disp('Warning: data must be monthly or quarterly!') - return - end - - % number of data points - nData=(yrFin-yrBin)*q_m + (qmFin-qmBin+1); - % number of data points in estimation sample - nSample=(yrEnd-yrStart)*q_m + (qmEnd-qmEnd+1); - % number of periods not used at beginning of data (non-negative number) - nStart=(yrStart-yrBin)*q_m + (qmStart-qmBin); - % number of periods not used at end of data (non-positive number) - nEnd=(yrEnd-yrFin)*q_m + (qmEnd-qmFin); - - if (nEnd > 0) || (nStart < 0) - disp('Warning: desired estimation period not in data set!') - return - end - if (nSample <= 0) - disp('Warning: no data points in estimation period!') - return - end - - % reorder variables and create estimation data set - xdgel=xdd(nStart+1:nData+nEnd,vlist1); - - % bad data points - baddata = find(isnan(xdgel)); - if ~isempty(baddata) - disp('Warning: some data for estimation period are unavailable.') - return - end - - % set nvar and nexo - nvar=size(xdgel,2); - nexo=1; - - % Arranged data information, WITHOUT dummy obs when 0 after mu is used. - % See fn_rnrprior_covres_dobs.m for using the dummy observations as part of - % an explicit prior. - [xtx,xty,yty,fss,phi,y,ncoef,xr,Bh] = fn_dataxy(nvar,options_.ms.nlags,xdgel,mu,0,nexo); - - - %====================================================================== - %== Linear Restrictions - %====================================================================== - if Rform - Ui=cell(nvar,1); Vi=cell(ncoef,1); - for kj=1:nvar - Ui{kj} = eye(nvar); Vi{kj} = eye(ncoef); - end - else - [Ui,Vi,n0,np,ixmC0Pres] = feval(options_.ms.restriction_fname,nvar,nexo,options_.ms); - if min(n0)==0 - disp('A0: restrictions give no free parameters in one of equations') - return - elseif min(np)==0 - disp('Aplus: Restrictions in give no free parameters in one of equations') - return - end - end - - - %====================================================================== - %== Estimation - %====================================================================== - if indxPrior - %*** Obtains asymmetric prior (with no linear restrictions) with dummy observations as part of an explicit prior (i.e, - % reflected in Hpmulti and Hpinvmulti). See Forecast II, pp.69a-69b for details. - if 1 % Liquidity effect prior on both MS and MD equations. - [Pi,H0multi,Hpmulti,H0invmulti,Hpinvmulti] = fn_rnrprior_covres_dobs(nvar,q_m,options_.ms.nlags,xdgel,mu,indxDummy,hpmsmd,indxmsmdeqn); - else - [Pi,H0multi,Hpmulti,H0invmulti,Hpinvmulti] = fn_rnrprior(nvar,q_m,options_.ms.nlags,xdgel,mu); - end - - %*** Combines asymmetric prior with linear restrictions - [Ptld,H0invtld,Hpinvtld] = fn_rlrprior(Ui,Vi,Pi,H0multi,Hpmulti,nvar); - - %*** Obtains the posterior matrices for estimation and inference - [Pmat,H0inv,Hpinv] = fn_rlrpostr(xtx,xty,yty,Ptld,H0invtld,Hpinvtld,Ui,Vi); - else - %*** Obtain the posterior matrices for estimation and inference - [Pmat,H0inv,Hpinv] = fn_dlrpostr(xtx,xty,yty,Ui,Vi); - end - - if Rform - %*** Obtain the ML estimate - A0hatinv = chol(H0inv{1}/fss); % upper triangular but lower triangular choleski - A0hat=inv(A0hatinv); - - Aphat = Pmat{1}*A0hat; - else - %*** Obtain the ML estimate - % load idenml - x = 10*rand(sum(n0),1); - H0 = eye(sum(n0)); - crit = 1.0e-9; - nit = 10000; - % - tic - [fhat,xhat,grad,Hhat,itct,fcount,retcodehat] = csminwel('fn_a0freefun',x,H0,'fn_a0freegrad',crit,nit,Ui,nvar,n0,fss,H0inv); - endtime = toc; - - A0hat = fn_tran_b2a(xhat,Ui,nvar,n0); - - xhat = fn_tran_a2b(A0hat,Ui,nvar,n0); - [Aphat,ghat] = fn_gfmean(xhat,Pmat,Vi,nvar,ncoef,n0,np); - if indxC0Pres - Fhatur0P = Fhat; % ur: unrestriced across A0 and A+ - for ki = 1:size(ixmC0Pres,1) % loop through the number of equations in which - % cross-A0-A+ restrictions occur. See St. Louis Note p.5. - ixeq = ixmC0Pres{ki}(1,1); % index for the jth equation in consideration. - Lit = Vi{ixeq}(ixmC0Pres{ki}(:,2),:); % transposed restriction matrix Li - % V_j(i,:) in f_j(i) = V_j(i,:)*g_j - ci = ixmC0Pres{ki}(:,4) .* A0hat(ixmC0Pres{ki}(:,3),ixeq); - % s * a_j(h) in the restriction f_j(i) = s * a_j(h). - LtH = Lit/Hpinv{ixeq}; - HLV = LtH'/(LtH*Lit'); - gihat = Vi{ixeq}'*Fhatur0P(:,ixeq); - Aphat(:,ixeq) = Vi{ixeq}*(gihat + HLV*(ci-Lit*gihat)); - end - end - end - - - %====================================================================== - %== Create matlab initialization file - %====================================================================== - matlab_filename = ['matlab_',options_.ms.output_file_tag,'.prn']; - fidForC = fopen(matlab_filename,'w'); - - fprintf(fidForC,'\n%s\n','//== gxia: alpha parameter for gamma prior of xi ==//'); - fprintf(fidForC,' %20.15f ', galp); - fprintf(fidForC, '\n\n'); - - fprintf(fidForC,'\n%s\n','//== gxib: beta parameter for gamma prior of xi ==//'); - fprintf(fidForC,' %20.15f ', gbeta); - fprintf(fidForC, '\n\n'); - - fprintf(fidForC,'\n%s\n','//== glamdasig: sigma parameter for normal prior of lamda ==//'); - fprintf(fidForC,' %20.15f ', sqrt(gsig2_lmdm)); - fprintf(fidForC, '\n\n'); - - %=== lags, nvar, nStates, sample size (excluding options_.ms.nlags where, with dummyies, fss=nSample-options_.ms.nlags+ndobs). - fprintf(fidForC,'\n%s\n','//== lags, nvar, nStates, T ==//'); - fprintf(fidForC,' %d %d %d %d\n\n\n',options_.ms.nlags, nvar, nStates, fss); - - %=== A0hat nvar-by-nvar from the constant VAR. - fprintf(fidForC,'\n%s\n','//== A0hat: nvar-by-nvar ==//'); - indxFloat = 1; - xM = A0hat; - nrows = nvar; - ncols = nvar; - fn_fprintmatrix(fidForC, xM, nrows, ncols, indxFloat) - - %=== Aphat ncoef-by-nvar from the constant VAR. - %=== Each column of Aphat is in the order of [nvar variables for 1st lag, ..., nvar variables for last lag, constant term]. - fprintf(fidForC,'\n%s\n','//== Aphat: ncoef(lags*nvar+1)-by-nvar ==//'); - indxFloat = 1; - xM = Aphat; - nrows = ncoef; - ncols = nvar; - fn_fprintmatrix(fidForC, xM, nrows, ncols, indxFloat) - - %=== n0const: nvar-by-1, whose ith element represents the number of free A0 parameters in ith equation for the case of constant parameters. - fprintf(fidForC,'\n%s\n','//== n0const: nvar-by-1 ==//'); - indxFloat = 0; - xM = n0; - nrows = 1; - ncols = nvar; - fn_fprintmatrix(fidForC, xM', nrows, ncols, indxFloat) - - %=== npconst: nvar-by-1, whose ith element represents the number of free A+ parameters in ith equation for the case of constant parameters. - fprintf(fidForC,'\n%s\n','//== npconst: nvar-by-1 ==//'); - indxFloat = 0; - xM = np; - nrows = 1; - ncols = nvar; - fn_fprintmatrix(fidForC, xM', nrows, ncols, indxFloat) - - %=== Uiconst: nvar-by-1 cell. In each cell, nvar-by-qi orthonormal basis for the null of the ith - % equation contemporaneous restriction matrix where qi is the number of free parameters. - % With this transformation, we have ai = Ui*bi or Ui'*ai = bi where ai is a vector - % of total original parameters and bi is a vector of free parameters. When no - % restrictions are imposed, we have Ui = I. There must be at least one free - % parameter left for the ith equation. - fprintf(fidForC,'\n%s\n','//== Uiconst: cell(nvar,1) and nvar-by-n0const(i) for the ith cell (equation) ==//'); - for i_=1:nvar - fn_fprintmatrix(fidForC, Ui{i_}, nvar, n0(i_), 1); - end - - %=== Viconst: nvar-by-1 cell. In each cell, k-by-ri orthonormal basis for the null of the ith - % equation lagged restriction matrix where k is a total of exogenous variables and - % ri is the number of free parameters. With this transformation, we have fi = Vi*gi - % or Vi'*fi = gi where fi is a vector of total original parameters and gi is a - % vector of free parameters. There must be at least one free parameter left for - % the ith equation. - fprintf(fidForC,'\n%s\n','//== Viconst: cell(nvar,1) and ncoef-by-n0const(i) for the ith cell (equation) ==//'); - for i_=1:nvar - fn_fprintmatrix(fidForC, Vi{i_}, ncoef, np(i_), 1); - end - - %=== H0barconstcell: cell(nvar,1) (equations) and n-by-n for each cell (equaiton). - %=== H0barconst: prior covariance matrix for each column of A0 under asymmetric prior (including SZ dummy obs.) with NO linear restrictions imposed yet. - fprintf(fidForC,'\n%s\n','//== H0barconstcell: cell(nvar,1) and n-by-n for the ith cell (equation) ==//'); - for i_=1:nvar - fn_fprintmatrix(fidForC, H0multi(:,:,i_), nvar, nvar, 1); - end - - %=== Hpbarconstcell: cell(nvar,1) (equations) and ncoef-by-ncoef for each cell (equaiton). - %=== Hpbarconst: prior covariance matrix for each column of A+ under asymmetric prior (including SZ dummy obs.) with NO linear restrictions imposed yet. - fprintf(fidForC,'\n%s\n','//== Hpbarconstcell: cell(nvar,1) and ncoef-by-ncoef for the ith cell (equation) ==//'); - for i_=1:nvar - fn_fprintmatrix(fidForC, Hpmulti(:,:,i_), ncoef, ncoef, 1); - end - - %=== phi: X; T-by-k; column: [nvar for 1st lag, ..., nvar for last lag, other exogenous terms, const term] - fprintf(fidForC,'\n%s\n','//== Xright -- X: T-by-ncoef ==//'); - xM = phi; - nrows = fss; - ncols = ncoef; - for ki=1:nrows - for kj=1:ncols - fprintf(fidForC,' %20.15f ',xM((kj-1)*nrows+ki)); - if (kj==ncols) - fprintf(fidForC,'\n'); - end - end - if (ki==nrows) - fprintf(fidForC,'\n\n'); - end - end - - %=== y: Y: T-by-nvar where T=fss - fprintf(fidForC,'\n%s\n','//== Yleft -- Y: T-by-nvar ==//'); - xM = y; - nrows = fss; - ncols = nvar; - for ki=1:nrows - for kj=1:ncols - fprintf(fidForC,' %20.15f ',xM((kj-1)*nrows+ki)); - if (kj==ncols) - fprintf(fidForC,'\n'); - end - end - if (ki==nrows) - fprintf(fidForC,'\n\n'); - end - end - - fclose(fidForC); - - %====================================================================== - %== Create C initialization filename - %====================================================================== - ms_write_markov_file(markov_file,M,options_) - if options_.ms.standalone == 1 - if use_linux == 1 - create_init_file=[c_path,'/sbvar_init_file ',matlab_filename,' ',markov_file,' ',options_.ms.output_file_tag]; - system(create_init_file); %Run operating system command and return result - else - create_init_file=[c_path,'\sbvar_init_file.exe ',matlab_filename,' ',markov_file,' ',options_.ms.output_file_tag]; - dos(create_init_file) - end - else - create_init_file=[matlab_filename,' ',markov_file,' ',options_.ms.output_file_tag]; - [err] = ms_sbvar_create_init_file(create_init_file); - mexErrCheck('ms_sbvar_create_init_file',err); - end -end - - - -%========================================================================== -%== Perform estimation -%========================================================================== -if options_.ms.mode_compute > 0 - opt = ['-estimate -seed ' num2str(seednumber)]; - opt = [opt ' -random ' num2str(options_.ms.estimate.random)]; - opt = [opt ' -random_max ' num2str(options_.ms.estimate.random_max)]; - opt = [opt ' -random_tol_obj ' num2str(options_.ms.estimate.random_tol_obj)]; - opt = [opt ' -random_tol_parms ' num2str(options_.ms.estimate.random_tol_parms)]; - opt = [opt ' -cb ' num2str(options_.ms.estimate.cb)]; - opt = [opt ' -ce ' num2str(options_.ms.estimate.ce)]; - opt = [opt ' -ci ' num2str(options_.ms.estimate.ci)]; - opt = [opt ' -ib ' num2str(options_.ms.estimate.ib)]; - opt = [opt ' -ii ' num2str(options_.ms.estimate.ii)]; - opt = [opt ' -mb ' num2str(options_.ms.estimate.mb)]; - if ischar(options_.ms.mode_file) > 0 && exist(options_.ms.mode_file) > 0 - opt = [opt ' -fp ' options_.ms.mode_file]; - end - opt = [opt ' -ft ']; - - if options_.ms.standalone == 1 - if use_linux == 1 - perform_estimation=[c_path,['/sbvar_commandline ' opt ],options_.ms.output_file_tag]; - system(perform_estimation); - else - perform_estimation=[c_path,['\sbvar_commandline.exe' opt],options_.ms.output_file_tag]; - dos(perform_estimation) - end - else - perform_estimation=[opt ,options_.ms.output_file_tag]; - [err] = ms_sbvar_command_line(perform_estimation); - mexErrCheck('ms_sbvar_command_line estimation',err); - end -end - -%========================================================================== -%== Simulation -%========================================================================== -if options_.ms.mh_replic > 0 - opt = ['-simulate -seed ' num2str(seednumber)]; - opt = [opt ' -ndraws ' num2str(options_.ms.mh_replic)]; - opt = [opt ' -burnin ' num2str(options_.ms.drop)]; - opt = [opt ' -mh ' num2str(options_.ms.adapative_mh_draws)]; - opt = [opt ' -thin ' num2str(options_.ms.thinning_factor)]; - if options_.ms.mode_compute == 0 && ischar(options_.ms.mode_file) > 0 && exist(options_.ms.mode_file) > 0 - opt = [opt ' -fp ' options_.ms.mode_file]; - end - opt = [opt ' -ft ']; - - if options_.ms.standalone == 1 - if use_linux == 1 - print_draws=[c_path,'/sbvar_commandline ', opt,options_.ms.output_file_tag]; - system(print_draws); - else - print_draws=[c_path,'\sbvar_commandline.exe ',opt ,options_.ms.output_file_tag]; - system(print_draws); - end - else - print_draws=[opt,options_.ms.output_file_tag]; - [err] = ms_sbvar_command_line(print_draws); - mexErrCheck('ms_sbvar_command_line simulation',err); - end -end - -%========================================================================== -%== Compute marginal data density -%========================================================================== -if options_.ms.compute_mdd == 1 - opt = ['-mdd -seed ' num2str(seednumber)]; - opt = [opt ' -d ' num2str(options_.ms.mdd_proposal_draws)]; - opt = [opt ' -pt ' num2str(options_.ms.mdd_proposal_type(1))]; - opt = [opt ' -l ' num2str(options_.ms.mdd_proposal_type(2))]; - opt = [opt ' -h ' num2str(options_.ms.mdd_proposal_type(3))]; - % pf file? - if options_.ms.mdd_use_mean_center - opt = [opt ' -use_mean']; - end - opt = [opt ' -ft ']; - if options_.ms.standalone == 1 - if use_linux == 1 - compute_mdd=[c_path,'/sbvar_commandline ',opt,options_.ms.output_file_tag]; - system(compute_mdd); - else - compute_mdd=[c_path,'\sbvar_commandline.exe ',opt,options_.ms.output_file_tag]; - system(compute_mdd); - end - else - compute_mdd=[opt,options_.ms.output_file_tag]; - [err] = ms_sbvar_command_line(compute_mdd); - mexErrCheck('ms_sbvar_command_line marginal data density',err); - end - - % grab the muller/bridge log mdd from the output file - mull_exp = 'Muller \w+\(\w+\) \= (\d+.\d+e\+\d+)'; - bridge_exp = 'Bridge \w+\(\w+\) \= (\d+.\d+e\+\d+)'; - bridge_mdd = -1; muller_mdd = -1; - mdd_filename = ['mdd_t' num2str(options_.ms.mdd_proposal_type(1)) '_' options_.ms.output_file_tag '.out']; - if exist(mdd_filename,'file') - mdd_fid = fopen(mdd_filename); - tline = fgetl(mdd_fid); - while ischar(tline) - mull_tok = regexp(tline,mull_exp,'tokens'); - bridge_tok = regexp(tline,bridge_exp,'tokens'); - if (~isempty(mull_tok)) - muller_mdd = str2double(mull_tok{1}{1}); - end - if (~isempty(bridge_tok)) - bridge_mdd = str2double(bridge_tok{1}{1}); - end - tline = fgetl(mdd_fid); - end - oo_.ms.mueller_log_mdd = muller_mdd; - oo_.ms.bridged_log_mdd = bridge_mdd; - end -end - - - -%========================================================================== -%== Compute posterior mode regime probabilities -%========================================================================== -if options_.ms.compute_probabilities == 1 - opt = ['-probabilities -seed ' num2str(seednumber)]; - if options_.ms.filtered_probabilities - opt = [opt ' -filtered' ]; - prob_out_file = ['filtered_' options_.ms.output_file_tag '.out']; - else - opt = [opt ' -smoothed' ]; - prob_out_file = ['smoothed_' options_.ms.output_file_tag '.out']; - end - if options_.ms.real_time_smoothed_probabilities - opt = [opt ' -real_time_smoothed' ]; - end - opt = [opt ' -ft ']; - if options_.ms.standalone == 1 - if use_linux == 1 - compute_prob=[c_path,'/sbvar_commandline ',opt,options_.ms.output_file_tag]; - system(compute_prob); - else - compute_prob=[c_path,'\sbvar_commandline.exe ',opt,options_.ms.output_file_tag]; - system(compute_prob); - end - else - compute_prob=[opt,options_.ms.output_file_tag]; - [err] = ms_sbvar_command_line(compute_prob); - mexErrCheck('ms_sbvar_command_line probabilities',err); - - % now we want to plot the probabilities for each chain - computed_probabilities = load(prob_out_file); - plot_ms_probabilities(computed_probabilities); - end -end - -%========================================================================== -%== Set the mode file and simulation file -%========================================================================== - -if options_.ms.mode_compute == 0 && ischar(options_.ms.mode_file) > 0 && exist(options_.ms.mode_file,'file') > 0 - mode_file = options_.ms.mode_file; -else - mode_file = ['est_free_' options_.ms.output_file_tag '.out']; -end -if exist(mode_file,'file') - maxparams = load(mode_file); - maxparams = maxparams(3:end)'; - [A0hat,Aplushat,Zetahat,Qhat] = mex_ms_convert_free_parameters(options_.ms.output_file_tag,maxparams); - oo_.ms.A0 = A0hat; oo_.ms.Aplus = Aplushat; oo_.ms.Zeta = Zetahat; oo_.ms.Q = Qhat; - mexErrCheck('mex_ms_convert_free_parameters',0); -else - error('There is no mode file, can not continue'); -end - -if ischar(options_.ms.load_mh_file) > 0 - if ~exist(options_.ms.load_mh_file,'file') - error('The Metropolis Hastings File supplied does not exist'); - end - mh_file = options_.ms.load_mh_file; -else - mh_file = ['simulation_' options_.ms.output_file_tag '.out']; -end - -fname = M.fname; -if ~exist(fname, 'dir') - mkdir('.',fname); -end - -%========================================================================== -%== Compute Impulse Responses -%========================================================================== - -if options_.ms.irf > 0 - disp(['IRFs']); - - opt = {options_.ms.output_file_tag, 'seed', seednumber,'horizon',options_.ms.irf, 'percentiles', options_.ms.percentiles, ... - 'filtered',options_.ms.irf_filtered, 'thin', options_.ms.irf_thinning_factor }; - - [irf] = mex_ms_irf(opt{:}, 'free_parameters', maxparams, 'shocks_per_parameter', options_.ms.irf_shock_draws); - if isscalar(irf) - mexErrCheck('mex_ms_irf ergodic ',irf); - end - plot_ms_irf(irf,options_.varobs,'Ergodic Impulse Responses'); - [regime_irfs] = mex_ms_irf(opt{:}, 'free_parameters',maxparams,'shocks_per_parameter', options_.ms.irf_shock_draws,'regimes'); - if isscalar(regime_irfs) - mexErrCheck('mex_ms_irf ergodic regimes ',regime_irfs); - end - save([fname '/' fname '_ergodic_irf.mat'], 'irf', 'regime_irfs'); - - if exist(mh_file,'file') > 0 - [irf] = mex_ms_irf(opt{:}, 'shocks_per_parameter', options_.ms.irf_shocks_per_parameter, ... - 'parameter_uncertainty','simulation_file',mh_file); - if isscalar(irf) - mexErrCheck('mex_ms_irf bayesian ',irf); - end - plot_ms_irf(irf,options_.varobs,'Impulse Responses w/ Parameter Uncertainty'); - [regime_irfs] = mex_ms_irf(opt{:}, 'shocks_per_parameter', options_.ms.irf_shocks_per_parameter, ... - 'simulation_file',mh_file,'parameter_uncertainty','regimes'); - if isscalar(regime_irfs) - mexErrCheck('mex_ms_irf bayesian regimes ',regime_irfs); - end - save([fname '/' fname '_bayesian_irf.mat'], 'irf', 'regime_irfs'); - end -end - -%========================================================================== -%== Compute Forecasts -%========================================================================== -if options_.ms.forecast > 0 - disp('Forecasts'); - - opt = {options_.ms.output_file_tag, 'seed', seednumber,'horizon',options_.ms.forecast, 'percentiles', options_.ms.percentiles, ... - 'thin', options_.ms.forecast_thinning_factor, 'data',options_.ms.forecast_data_obs }; - - [forecast] = mex_ms_forecast(opt{:},'free_parameters',maxparams,'shocks_per_parameter', options_.ms.forecast_shock_draws); - if isscalar(forecast) - mexErrCheck('mex_ms_forecast ergodic ',forecast); - end - plot_ms_forecast(forecast,'Forecast'); - [regime_forecast] = mex_ms_forecast(opt{:},'free_parameters',maxparams,'shocks_per_parameter', options_.ms.forecast_shock_draws,'regimes'); - if isscalar(regime_forecast) - mexErrCheck('mex_ms_forecast ergodic regimes',regime_forecast); - end - save([fname '/' fname '_ergodic_forecast.mat'], 'forecast', 'regime_forecast'); - - if exist(mh_file,'file') > 0 - [forecast] = mex_ms_forecast(opt{:},'free_parameters',maxparams,'shocks_per_parameter', options_.ms.forecast_shocks_per_parameter, ... - 'simulation_file',mh_file,'parameter_uncertainty'); - plot_ms_forecast(forecast,'Forecast w/ Parameter Uncertainty'); - if isscalar(forecast) - mexErrCheck('mex_ms_forecast bayesian ',forecast); - end - [regime_forecast] = mex_ms_forecast(opt{:},'free_parameters',maxparams,'shocks_per_parameter', options_.ms.forecast_shocks_per_parameter, ... - 'simulation_file',mh_file,'parameter_uncertainty','regimes'); - if isscalar(regime_forecast) - mexErrCheck('mex_ms_forecast bayesian regimes ',regime_forecast); - end - save([fname '/' fname '_bayesian_forecast.mat'], 'forecast', 'regime_forecast'); - end -end - -%========================================================================== -%== Compute Variance Decomposition -%========================================================================== -if options_.ms.variance_decomposition > 0 - disp('Variance Decomposition'); - - % NOTICE THAT VARIANCE DECOMPOSITION DEFAULTS TO USING THE MEAN, NOT MEDIAN OR BANDED - - opt = {options_.ms.output_file_tag, 'seed', seednumber,'horizon',options_.ms.forecast, ... - 'thin', options_.ms.vd_thinning_factor,'filtered',options_.ms.vd_filtered, 'mean'}; - - [vd] = mex_ms_variance_decomposition(opt{:},'free_parameters',maxparams,'shocks',options_.ms.vd_shock_draws); - if isscalar(vd) - mexErrCheck('mex_ms_variance_decomposition ergodic ',vd); - end - plot_ms_variance_decomposition(vd, 'Ergodic Variance Decomposition'); - [regime_vd] = mex_ms_variance_decomposition(opt{:},'free_parameters',maxparams,'shocks',options_.ms.vd_shock_draws,'regimes'); - if isscalar(regime_vd) - mexErrCheck('mex_ms_variance_decomposition ergodic regimes',regime_vd); - end - save([fname '/' fname '_ergodic_vd.mat'], 'vd', 'regime_vd'); - - if exist(mh_file,'file') > 0 - [vd] = mex_ms_variance_decomposition(opt{:},'simulation_file',mh_file,'shocks',options_.ms.vd_shocks_per_parameter,'parameter_uncertainty'); - if isscalar(vd) - mexErrCheck('mex_ms_variance_decomposition bayesian ',vd); - end - [regime_vd] = mex_ms_variance_decomposition(opt{:},'simulation_file',mh_file,'shocks',options_.ms.vd_shocks_per_parameter,'parameter_uncertainty','regimes'); - if isscalar(regime_vd) - mexErrCheck('mex_ms_variance_decomposition bayesian regimes ',regime_vd); - end - save([fname '/' fname '_bayesian_vd.mat'], 'vd', 'regime_vd'); - end -end - -%========================================================================== diff --git a/ms-sbvar/Makefile b/ms-sbvar/Makefile index 201a2b6917869e4087395363f6e18ada3a146e6a..475e85a0f71d9d19ef06a4fa8becb2411837175e 100644 --- a/ms-sbvar/Makefile +++ b/ms-sbvar/Makefile @@ -76,7 +76,7 @@ EXEC_OBJS = $(OBJS) dw_switch.o dw_switchio.o dw_dirichlet_restrictions.o dw_met # EXEC_OBJS := $(EXEC_OBJS) tzmatlab.o csminwel.o # PROJECT FILES -EXEC_OBJS := $(EXEC_OBJS) VARbase.o VARio.o dw_sbvar_command_line.o sbvar_estimate.o sbvar_simulate.o \ +EXEC_OBJS := $(EXEC_OBJS) VARbase.o VARio.o dw_sbvar_command_line.o sbvar_estimate.o sbvar_simulate.o sbvar_variance_decomposition.o \ sbvar_probabilities.o sbvar_mdd.o dw_csminwel.o sbvar_impulse_responses.o sbvar_forecast.o # OUTPUT diff --git a/preprocessor/ComputingTasks.cc b/preprocessor/ComputingTasks.cc index 5ab535a2674c1679968f4f22a9cc6a98f86352d4..c15009293b809cd35123e0f912f89fc7e8fcc29e 100644 --- a/preprocessor/ComputingTasks.cc +++ b/preprocessor/ComputingTasks.cc @@ -936,7 +936,7 @@ void MSSBVAREstimationStatement::writeOutput(ostream &output, const string &basename) const { options_list.writeOutput(output); - output << "ms_estimation(options_);" << endl; + output << "[options_, oo_] = ms_estimation(M_, options_, oo_);" << endl; } MSSBVARSimulationStatement::MSSBVARSimulationStatement(const OptionsList &options_list_arg) : @@ -954,7 +954,7 @@ void MSSBVARSimulationStatement::writeOutput(ostream &output, const string &basename) const { options_list.writeOutput(output); - output << "ms_simulation(options_);" << endl; + output << "[options_, oo_] = ms_simulation(M_, options_, oo_);" << endl; } MSSBVARComputeMDDStatement::MSSBVARComputeMDDStatement(const OptionsList &options_list_arg) : @@ -972,7 +972,7 @@ void MSSBVARComputeMDDStatement::writeOutput(ostream &output, const string &basename) const { options_list.writeOutput(output); - output << "oo_ = ms_compute_mdd(options_,oo_);" << endl; + output << "[options_, oo_] = ms_compute_mdd(M_, options_, oo_);" << endl; } MSSBVARComputeProbabilitiesStatement::MSSBVARComputeProbabilitiesStatement(const OptionsList &options_list_arg) : @@ -990,7 +990,7 @@ void MSSBVARComputeProbabilitiesStatement::writeOutput(ostream &output, const string &basename) const { options_list.writeOutput(output); - output << "ms_compute_probabilities(options_);" << endl; + output << "[options_, oo_] = ms_compute_probabilities(M_, options_, oo_);" << endl; } MSSBVARIrfStatement::MSSBVARIrfStatement(const OptionsList &options_list_arg) : @@ -1008,7 +1008,7 @@ void MSSBVARIrfStatement::writeOutput(ostream &output, const string &basename) const { options_list.writeOutput(output); - output << "ms_irf(options_);" << endl; + output << "[options_, oo_] = ms_irf(M_, options_, oo_);" << endl; } MSSBVARForecastStatement::MSSBVARForecastStatement(const OptionsList &options_list_arg) : @@ -1026,7 +1026,7 @@ void MSSBVARForecastStatement::writeOutput(ostream &output, const string &basename) const { options_list.writeOutput(output); - output << "ms_forecast(options_);" << endl; + output << "[options_, oo_] = ms_forecast(M_, options_, oo_);" << endl; } MSSBVARVarianceDecompositionStatement::MSSBVARVarianceDecompositionStatement(const OptionsList &options_list_arg) : @@ -1044,7 +1044,7 @@ void MSSBVARVarianceDecompositionStatement::writeOutput(ostream &output, const string &basename) const { options_list.writeOutput(output); - output << "ms_variance_decomposition(options_);" << endl; + output << "[options_, oo_] = ms_variance_decomposition(M_, options_, oo_);" << endl; } IdentificationStatement::IdentificationStatement(const OptionsList &options_list_arg) diff --git a/preprocessor/DynareBison.yy b/preprocessor/DynareBison.yy index 736a242e732aa3ccf42cb3ec554210c5b398dbac..e6fe81d915003c4bf2471a2b78f9cea80003995f 100644 --- a/preprocessor/DynareBison.yy +++ b/preprocessor/DynareBison.yy @@ -151,16 +151,16 @@ class ParsingDriver; %token INDXPARR INDXOVR INDXAP APBAND INDXIMF IMFBAND INDXFORE FOREBAND INDXGFOREHAT INDXGIMFHAT %token INDXESTIMA INDXGDLS EQ_MS FILTER_COVARIANCE FILTER_DECOMPOSITION %token EQ_CMS TLINDX TLNUMBER BANACT CREATE_INITIALIZATION_FILE -%token OUTPUT_FILE_TAG DRAWS_NBR_BURN_IN_1 DRAWS_NBR_BURN_IN_2 +%token OUTPUT_FILE_TAG DRAWS_NBR_BURN_IN_1 DRAWS_NBR_BURN_IN_2 HORIZON %token SBVAR TREND_VAR DEFLATOR GROWTH_FACTOR MS_IRF MS_VARIANCE_DECOMPOSITION %token MS_ESTIMATION MS_SIMULATION MS_COMPUTE_MDD MS_COMPUTE_PROBABILITIES MS_FORECAST %token SVAR_IDENTIFICATION EQUATION EXCLUSION LAG UPPER_CHOLESKY LOWER_CHOLESKY %token MARKOV_SWITCHING CHAIN STATE DURATION NUMBER_OF_STATES %token SVAR COEFFICIENTS VARIANCES CONSTANTS EQUATIONS %token EXTERNAL_FUNCTION EXT_FUNC_NAME EXT_FUNC_NARGS FIRST_DERIV_PROVIDED SECOND_DERIV_PROVIDED -%token SELECTED_VARIABLES_ONLY COVA_COMPUTE -%token ERROR_BANDS ERROR_BAND_PERCENTILES PARAMETER_UNCERTAINTY -%token SHOCK_DRAWS REGIMES FREE_PARAMETERS MEDIAN DATA_OBS_NBR +%token SELECTED_VARIABLES_ONLY COVA_COMPUTE ESTIMATION_FILE_TAG SIMULATION_FILE_TAG +%token ERROR_BANDS ERROR_BAND_PERCENTILES SHOCKS_PER_PARAMETER +%token SHOCK_DRAWS FREE_PARAMETERS MEDIAN DATA_OBS_NBR %token FILTERED_PROBABILITIES FILTERED REAL_TIME_SMOOTHED %token PROPOSAL_TYPE MDD_PROPOSAL_DRAWS MDD_USE_MEAN_CENTER %token ADAPTIVE_MH_DRAWS THINNING_FACTOR COEFFICIENTS_PRIOR_HYPERPARAMETERS @@ -1473,13 +1473,14 @@ sbvar : SBVAR ';' ; ms_variance_decomposition_option : o_output_file_tag + | o_estimation_file_tag + | o_simulation_file_tag | o_filtered_probabilities | o_error_bands | o_error_band_percentiles - | o_parameter_uncertainty | o_shock_draws + | o_shocks_per_parameter | o_thinning_factor - | o_regimes | o_free_parameters | o_load_mh_file | o_median @@ -1496,13 +1497,14 @@ ms_variance_decomposition : MS_VARIANCE_DECOMPOSITION ';' ; ms_forecast_option : o_output_file_tag + | o_estimation_file_tag + | o_simulation_file_tag | o_data_obs_nbr | o_error_bands | o_error_band_percentiles - | o_parameter_uncertainty | o_shock_draws + | o_shocks_per_parameter | o_thinning_factor - | o_regimes | o_free_parameters | o_load_mh_file | o_median @@ -1519,13 +1521,15 @@ ms_forecast : MS_FORECAST ';' ; ms_irf_option : o_output_file_tag + | o_estimation_file_tag + | o_simulation_file_tag + | o_horizon | o_filtered_probabilities | o_error_bands | o_error_band_percentiles - | o_parameter_uncertainty | o_shock_draws + | o_shocks_per_parameter | o_thinning_factor - | o_regimes | o_free_parameters | o_load_mh_file | o_median @@ -1542,6 +1546,8 @@ ms_irf : MS_IRF ';' ; ms_compute_probabilities_option : o_output_file_tag + | o_estimation_file_tag + | o_simulation_file_tag | o_filtered_probabilities | o_real_time_smoothed ; @@ -1557,6 +1563,8 @@ ms_compute_probabilities : MS_COMPUTE_PROBABILITIES ';' ; ms_compute_mdd_option : o_output_file_tag + | o_estimation_file_tag + | o_simulation_file_tag | o_load_mh_file | o_proposal_type | o_mdd_proposal_draws @@ -1574,6 +1582,7 @@ ms_compute_mdd : MS_COMPUTE_MDD ';' ; ms_simulation_option : o_output_file_tag + | o_estimation_file_tag | o_mh_replic | o_drop | o_thinning_factor @@ -1947,10 +1956,8 @@ o_parameter_set : PARAMETER_SET EQUAL PRIOR_MODE | PARAMETER_SET EQUAL POSTERIOR_MEDIAN { driver.option_str("parameter_set", "posterior_median"); } ; - o_shocks : SHOCKS EQUAL '(' list_of_symbol_lists ')' { driver.option_symbol_list("shocks"); }; o_labels : LABELS EQUAL '(' symbol_list ')' { driver.option_symbol_list("labels"); }; - o_freq : FREQ EQUAL INT_NUMBER {driver.option_num("ms.freq",$3); }; o_initial_year : INITIAL_YEAR EQUAL INT_NUMBER {driver.option_num("ms.initial_year",$3); }; o_initial_subperiod : INITIAL_SUBPERIOD EQUAL INT_NUMBER {driver.option_num("ms.initial_subperiod",$3); }; @@ -2044,6 +2051,8 @@ o_selected_variables_only : SELECTED_VARIABLES_ONLY o_cova_compute : COVA_COMPUTE EQUAL INT_NUMBER { driver.option_num("cova_compute",$3);} ; +o_estimation_file_tag : ESTIMATION_FILE_TAG EQUAL filename { driver.option_str("ms.estimation_file_tag", $3); }; +o_simulation_file_tag : SIMULATION_FILE_TAG EQUAL filename { driver.option_str("ms.simulation_file_tag", $3); }; o_upper_cholesky : UPPER_CHOLESKY { driver.option_num("ms.upper_cholesky","1"); }; o_lower_cholesky : LOWER_CHOLESKY { driver.option_num("ms.lower_cholesky","1"); }; o_coefficients_prior_hyperparameters : COEFFICIENTS_PRIOR_HYPERPARAMETERS EQUAL vec_value @@ -2083,14 +2092,13 @@ o_adaptive_mh_draws : ADAPTIVE_MH_DRAWS EQUAL INT_NUMBER { driver.option_num("ms o_mdd_proposal_draws : MDD_PROPOSAL_DRAWS EQUAL INT_NUMBER { driver.option_num("ms.mdd_proposal_draws",$3); }; o_mdd_use_mean_center : MDD_USE_MEAN_CENTER { driver.option_num("ms.mdd_use_mean_center","1"); }; o_proposal_type : PROPOSAL_TYPE EQUAL vec_value { driver.option_num("ms.proposal_type",$3); }; +o_horizon : HORIZON EQUAL INT_NUMBER { driver.option_num("ms.horizon",$3); }; o_filtered_probabilities : FILTERED_PROBABILITIES { driver.option_num("ms.filtered_probabilities","1"); }; o_real_time_smoothed : REAL_TIME_SMOOTHED { driver.option_num("ms.real_time_smoothed_probabilities","1"); }; - o_error_bands : ERROR_BANDS { driver.option_num("ms.error_bands","1"); }; o_error_band_percentiles : ERROR_BAND_PERCENTILES EQUAL vec_value { driver.option_num("ms.percentiles",$3); }; -o_parameter_uncertainty : PARAMETER_UNCERTAINTY { driver.option_num("ms.error_bands","1"); }; o_shock_draws : SHOCK_DRAWS EQUAL INT_NUMBER { driver.option_num("ms.shock_draws",$3); }; -o_regimes : REGIMES { driver.option_num("ms.regimes","1"); }; +o_shocks_per_parameter : SHOCKS_PER_PARAMETER EQUAL INT_NUMBER { driver.option_num("ms.shocks_per_parameter",$3); }; o_free_parameters : FREE_PARAMETERS EQUAL vec_value { driver.option_num("ms.free_parameters",$3); }; o_median : MEDIAN { driver.option_num("ms.median","1"); }; o_data_obs_nbr : DATA_OBS_NBR { driver.option_num("ms.forecast_data_obs","1"); }; diff --git a/preprocessor/DynareFlex.ll b/preprocessor/DynareFlex.ll index d1a4b452de921ecd198275fa84258294d4bbba8d..dd988128a9d190494ee047e83aee604c871e5aed 100644 --- a/preprocessor/DynareFlex.ll +++ b/preprocessor/DynareFlex.ll @@ -320,13 +320,15 @@ string eofbuff; <DYNARE_STATEMENT>banact {return token::BANACT;} <DYNARE_STATEMENT>output_file_tag {return token::OUTPUT_FILE_TAG;} +<DYNARE_STATEMENT>estimation_file_tag {return token::ESTIMATION_FILE_TAG;}; +<DYNARE_STATEMENT>simulation_file_tag {return token::SIMULATION_FILE_TAG;}; <DYNARE_STATEMENT>filtered {return token::FILTERED;} +<DYNARE_STATEMENT>horizon {return token::HORIZON;} <DYNARE_STATEMENT>error_bands {return token::ERROR_BANDS;} <DYNARE_STATEMENT>error_band_percentiles {return token::ERROR_BAND_PERCENTILES;} -<DYNARE_STATEMENT>parameter_uncertainty {return token::PARAMETER_UNCERTAINTY;} <DYNARE_STATEMENT>shock_draws {return token::SHOCK_DRAWS;} +<DYNARE_STATEMENT>shocks_per_parameter {return token::SHOCKS_PER_PARAMETER;} <DYNARE_STATEMENT>thinning_factor {return token::THINNING_FACTOR;} -<DYNARE_STATEMENT>regimes {return token::REGIMES;} <DYNARE_STATEMENT>free_parameters {return token::FREE_PARAMETERS;} <DYNARE_STATEMENT>median {return token::MEDIAN;} <DYNARE_STATEMENT>data_obs_nbr {return token::DATA_OBS_NBR;} diff --git a/tests/ms-sbvar/test_ms_variances.mod b/tests/ms-sbvar/test_ms_variances.mod index 1380683def1f7adc1410ac44ef810686b148007a..65d1997a3455b9c46a29c8bf49d1dbe528aac9fb 100644 --- a/tests/ms-sbvar/test_ms_variances.mod +++ b/tests/ms-sbvar/test_ms_variances.mod @@ -16,7 +16,12 @@ markov_switching(chain=1,number_of_states=2,duration=2.5); svar(variances, chain=1); +set_dynare_seed(5); + ms_estimation(datafile=data,freq=4,initial_year=1959,final_year=2005,nlags=4); ms_simulation(mh_replic=1000); ms_compute_mdd; ms_compute_probabilities; +ms_irf; +ms_forecast; +ms_variance_decomposition;