Select Git revision
Forked from
Dynare / dynare
9406 commits behind the upstream repository.
Stéphane Adjemian authored
This new routine gives the possibility to obtain a description of the prior from the command line. >> prior table will display a table with the prior mean, prior mode, prior std, prior bounds and prior HPD interval. >> prior plot will plot the prior densities. >> prior optimize will trigger the maximization of the prior density and display the results (often, because of BK conditions or other issues, Dynare is even not able to get the prior mode). >> prior moments will display the moments of the endogenous variables at the prior mode. >> prior simulate will run a Monte-Carlo, by sampling from the prior and discarding vector of parameters such that the steady state does not exist or the BK conditions are not met, and return an estimate of the effective prior mass.
prior.m 4.21 KiB
function varargout = prior(varargin)
% Computes various prior statistics and display them in the command window.
%
% INPUTS
% 'table', 'moments', 'optimize', 'simulate', 'plot'
%
% OUTPUTS
% none
%
% SPECIAL REQUIREMENTS
% none
% Copyright (C) 2015 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/>.
global options_ M_ estim_params_ bayestopt_ oo_ objective_function_penalty_base
donesomething = false;
% Temporarly change qz_criterium option value
changed_qz_criterium_flag = 0;
if isempty(options_.qz_criterium)
options_.qz_criterium = 1+1e-9;
changed_qz_criterium_flag = 1;
end
M_.dname = M_.fname;
% Temporarly set options_.order equal to one
order = options_.order;
options_.order = 1;
[xparam1,estim_params_,bayestopt_,lb,ub,M_] = set_prior(estim_params_,M_,options_);
if ismember('plot', varargin)
plot_priors(bayestopt_,M_,estim_params_,options_)
donesomething = true;
end
if ismember('table', varargin)
print_table_prior(lb, ub, options_, M_, bayestopt_, estim_params_);
donesomething = true;
end
if ismember('simulate', varargin) % Prior simulations (BK).
results = prior_sampler(0,M_,bayestopt_,options_,oo_,estim_params_);
% Display prior mass info
skipline(2)
disp(['Prior mass = ' num2str(results.prior.mass)])
disp(['BK indeterminacy share = ' num2str(results.bk.indeterminacy_share)])
disp(['BK unstability share = ' num2str(results.bk.unstability_share)])
disp(['BK singularity share = ' num2str(results.bk.singularity_share)])
disp(['Complex jacobian share = ' num2str(results.jacobian.problem_share)])
disp(['mjdgges crash share = ' num2str(results.dll.problem_share)])
disp(['Steady state problem share = ' num2str(results.ss.problem_share)])
disp(['Complex steady state share = ' num2str(results.ss.complex_share)])
disp(['Analytical steady state problem share = ' num2str(results.ass.problem_share)])
skipline(2)
donesomething = true;
end
if ismember('optimize', varargin) % Prior optimization.
optimize_prior(options_, M_, oo_, bayestopt_, estim_params_);
donesomething = true;
end
if ismember('moments', varargin) % Prior simulations (2nd order moments).
% Set estimated parameters to the prior mode...
xparam1 = bayestopt_.p5;
% ... Except for uniform priors!
k = find(isnan(xparam1));
xparam1(k) = bayestopt_.p5(k);
% Update vector of parameters and covariance matrices
M_ = set_all_parameters(xparam1,estim_params_,M_);
% Check model.
check_model(M_);
% Compute state space representation of the model.
oo_.dr=set_state_space(oo_.dr, M_, options_);
% Solve model
[dr,info, M_ ,options_ , oo_] = resol(0, M_ , options_ ,oo_);
% Compute and display second order moments
disp_th_moments(oo_.dr,[]);
skipline(2)
donesomething = true;
end
if changed_qz_criterium_flag
options_.qz_criterium = [];
end
options_.order = order;
if ~donesomething
error('prior: Unexpected arguments!')
end
function format_string = build_format_string(PriorStandardDeviation,LowerBound,UpperBound)
format_string = ['%s & %s & %6.4f &'];
if ~isnumeric(PriorStandardDeviation)
format_string = [ format_string , ' %s &'];
else
format_string = [ format_string , ' %6.4f &'];
end
if ~isnumeric(LowerBound)
format_string = [ format_string , ' %s &'];
else
format_string = [ format_string , ' %6.4f &'];
end
if ~isnumeric(UpperBound)
format_string = [ format_string , ' %s &'];
else
format_string = [ format_string , ' %6.4f &'];
end
format_string = [ format_string , ' %6.4f & %6.4f \\\\ \n'];