Skip to content
Snippets Groups Projects
Select Git revision
  • 5417b27ac748d4cd458674a8231defbc14e313da
  • 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

masterParallel.m

Blame
  • Forked from Dynare / dynare
    Source project has a limited visibility.
    WriteShockDecomp2Excel.m 4.62 KiB
    function WriteShockDecomp2Excel(z,shock_names,endo_names,i_var,initial_date,DynareModel,DynareOptions,opts_decomp)
    %function WriteShockDecomp2Excel(z,shock_names,endo_names,i_var,initial_date,DynareModel,DynareOptions)
    % Saves the results from the shock_decomposition command to xls
    %
    % Inputs
    %   z               [n_var*(nshock+2)*nperiods]     shock decomposition array, see shock_decomposition.m for details
    %   shock_names     [endo_nbr*string length]        shock names from M_.exo_names
    %   endo_names      [exo_nbr*string length]         variable names from M_.endo_names
    %   i_var           [n_var*1]                       vector indices of requested variables in M_.endo_names and z
    %   initial_date    [dseries object]                first period of decomposition to plot
    %   DynareModel     [structure]                     Dynare model structure
    %   DynareOptions   [structure]                     Dynare options structure
    
    % Copyright (C) 2016-2021 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 <https://www.gnu.org/licenses/>.
    
    OutputDirectoryName = CheckPath('Output',DynareModel.dname);
    
    SteadyState=zeros(DynareModel.endo_nbr,1);
    fig_mode='';
    fig_mode1='';
    fig_name='';
    screen_shocks=0;
    use_shock_groups = DynareOptions.plot_shock_decomp.use_shock_groups;
    if use_shock_groups
        shock_groups = DynareModel.shock_groups.(use_shock_groups);
        shock_ind = fieldnames(shock_groups);
    end
    
    % number of components equals number of shocks + 1 (initial conditions)
    comp_nbr = size(z,2)-1;
    
    if nargin==8
        if isfield(opts_decomp,'steady_state')
            SteadyState = opts_decomp.steady_state;
        end
        if isfield(opts_decomp,'fig_mode') && ~isempty(opts_decomp.fig_mode)
            fig_mode = opts_decomp.fig_mode;
            fig_mode1 = ['_' fig_mode];
            fig_mode = [fig_mode '_'];
        end
        if isfield(opts_decomp,'screen_shocks')
            if use_shock_groups
                screen_shocks=0;
            elseif comp_nbr>18
                screen_shocks = opts_decomp.screen_shocks;
            end
        end
        if isfield(opts_decomp,'fig_name')
            fig_name = opts_decomp.fig_name;
            %         fig_name = ['_' fig_name];
            fig_name1 = [fig_name];
            fig_name = [fig_name '_'];
        end
        if screen_shocks
            fig_name1 = [fig_name1 '_screen'];
            fig_name = [fig_name 'screen_'];
        end
    end
    
    
    gend = size(z,3);
    if isempty(initial_date)
        x = 1:gend;
    else
        freq = initial_date.freq;
        initial_period = double(initial_date);
        x = initial_period:(1/freq):initial_period+(gend-1)/freq;
    end
    
    
    nvar = length(i_var);
    
    labels = char(char(shock_names),'Initial values');
    if ~(screen_shocks && comp_nbr>18)
        screen_shocks=0;
    end
    comp_nbr0=comp_nbr;
    %%plot decomposition
    for j=1:nvar
        d0={};
        z1 = squeeze(z(i_var(j),:,:));
        if screen_shocks
            [~, isort] = sort(mean(abs(z1(1:end-2,:)')), 'descend');
            labels = char(char(shock_names(isort(1:16))),'Others', 'Initial values');
            zres = sum(z1(isort(17:end),:),1);
            z1 = [z1(isort(1:16),:); zres; z1(comp_nbr0:end,:)];
            comp_nbr=18;
        end
    
        d0(1,:)=[{'Decomposition'} cellstr(labels(1:comp_nbr,:))' {'Smoot Var'} {'Steady State'}];
        d0=[d0; num2cell([x' z1' ]), [num2cell(SteadyState(i_var(j))); cell(size(z1,2)-1,1)]];
        LastRow=size(d0,1);
        if use_shock_groups
            d0(LastRow+2,1)={'Legend.'};
            d0(LastRow+2,2)={'Shocks include:'};
            d0(LastRow+3:LastRow+3+comp_nbr-1,1)=cellstr(labels(1:comp_nbr,:));
            for ic=1:comp_nbr
                group_members = shock_groups.(shock_ind{ic}).shocks;
                d0(LastRow+2+ic,2:1+length(group_members))=group_members;
            end
        end
    
        warning off
        fig_name1 = strrep(fig_name1,' ','_');
        fig_name1 = strrep(fig_name1,'.','');
        
        if ~ismac
            STATUS = xlswrite([OutputDirectoryName,filesep,DynareModel.fname,'_shock_decomposition',fig_mode,fig_name1],d0,endo_names{i_var(j)});
        else
            writetable(cell2table(d0), [OutputDirectoryName,filesep,DynareModel.fname,'_shock_decomposition',fig_mode,fig_name1 '.xls'], 'Sheet', endo_names{i_var(j)},'WriteVariableNames',false);
        end
        warning on
    
        clear d0
    
    end