Skip to content
Snippets Groups Projects
Select Git revision
  • 73cdaa3091b109564c55bd538f8769461bf94fa9
  • master default protected
  • nlf-fixes
  • DSMH
  • OneStep2
  • SMC
  • online-filter-as-a-sampler
  • nonlinear-filter-fixes
  • SMCsamplers
  • smc-sampler
  • 4.5
  • dynamic-striated
  • occbin
  • exo_steady_state
  • filter_initial_state
  • declare_vars_in_model_block
  • exceptions
  • rmExtraExo
  • julia
  • error_msg_undeclared_model_vars
  • static_aux_vars
  • 4.5.6
  • 4.5.5
  • 4.5.4
  • 4.5.3
  • 4.5.2
  • 4.5.1
  • 4.5.0
  • 4.4.3
  • 4.4.2
  • 4.4.1
  • 4.4.0
  • 4.4-beta1
  • 4.3.3
  • 4.3.2
  • 4.3.1
  • 4.3.0
  • 4.2.5
  • 4.2.4
  • 4.2.3
  • 4.2.2
41 results

prior.m

Blame
  • Forked from Dynare / dynare
    9406 commits behind the upstream repository.
    Stéphane Adjemian (Charybdis)'s avatar
    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.
    73cdaa30
    History
    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'];