Merge branch 'exo_names_orig_ord' of git.dynare.org:JohannesPfeifer/dynare
Ref. !2142remove-submodule
commit
a044ec45b1
|
@ -25,4 +25,4 @@
|
||||||
url = https://github.com/fangq/jsonlab.git
|
url = https://github.com/fangq/jsonlab.git
|
||||||
[submodule "preprocessor"]
|
[submodule "preprocessor"]
|
||||||
path = preprocessor
|
path = preprocessor
|
||||||
url = ../../Dynare/preprocessor.git
|
url = ../../JohannesPfeifer/preprocessor.git
|
||||||
|
|
|
@ -288,7 +288,7 @@ if options_.TeX
|
||||||
end
|
end
|
||||||
|
|
||||||
fprintf('Estimation::mcmc: Posterior (dsge) IRFs...\n');
|
fprintf('Estimation::mcmc: Posterior (dsge) IRFs...\n');
|
||||||
tit(M_.exo_names_orig_ord) = M_.exo_names;
|
tit = M_.exo_names;
|
||||||
kdx = 0;
|
kdx = 0;
|
||||||
|
|
||||||
for file = 1:NumberOfIRFfiles_dsge
|
for file = 1:NumberOfIRFfiles_dsge
|
||||||
|
@ -328,7 +328,7 @@ if MAX_nirfs_dsgevar
|
||||||
DistribIRFdsgevar = zeros(options_.irf,9,nvar,M_.exo_nbr);
|
DistribIRFdsgevar = zeros(options_.irf,9,nvar,M_.exo_nbr);
|
||||||
HPDIRFdsgevar = zeros(options_.irf,2,nvar,M_.exo_nbr);
|
HPDIRFdsgevar = zeros(options_.irf,2,nvar,M_.exo_nbr);
|
||||||
fprintf('Estimation::mcmc: Posterior (bvar-dsge) IRFs...\n');
|
fprintf('Estimation::mcmc: Posterior (bvar-dsge) IRFs...\n');
|
||||||
tit(M_.exo_names_orig_ord) = M_.exo_names;
|
tit = M_.exo_names;
|
||||||
kdx = 0;
|
kdx = 0;
|
||||||
for file = 1:NumberOfIRFfiles_dsgevar
|
for file = 1:NumberOfIRFfiles_dsgevar
|
||||||
load([MhDirectoryName filesep M_.fname '_IRF_BVARDSGEs' int2str(file) '.mat']);
|
load([MhDirectoryName filesep M_.fname '_IRF_BVARDSGEs' int2str(file) '.mat']);
|
||||||
|
@ -391,14 +391,13 @@ if ~options_.nograph && ~options_.no_graph.posterior
|
||||||
|
|
||||||
% The files .TeX are genereted in sequential way always!
|
% The files .TeX are genereted in sequential way always!
|
||||||
|
|
||||||
subplotnum = 0;
|
|
||||||
titTeX(M_.exo_names_orig_ord) = M_.exo_names_tex;
|
|
||||||
if options_.TeX && any(strcmp('eps',cellstr(options_.graph_format)))
|
if options_.TeX && any(strcmp('eps',cellstr(options_.graph_format)))
|
||||||
|
subplotnum = 0;
|
||||||
fidTeX = fopen([DirectoryName filesep M_.fname '_BayesianIRF.tex'],'w');
|
fidTeX = fopen([DirectoryName filesep M_.fname '_BayesianIRF.tex'],'w');
|
||||||
fprintf(fidTeX,'%% TeX eps-loader file generated by PosteriorIRF.m (Dynare).\n');
|
fprintf(fidTeX,'%% TeX eps-loader file generated by PosteriorIRF.m (Dynare).\n');
|
||||||
fprintf(fidTeX,['%% ' datestr(now,0) '\n']);
|
fprintf(fidTeX,['%% ' datestr(now,0) '\n']);
|
||||||
fprintf(fidTeX,' \n');
|
fprintf(fidTeX,' \n');
|
||||||
titTeX(M_.exo_names_orig_ord) = M_.exo_names_tex;
|
titTeX = M_.exo_names_tex;
|
||||||
|
|
||||||
for ii=irf_shocks_indx
|
for ii=irf_shocks_indx
|
||||||
figunumber = 0;
|
figunumber = 0;
|
||||||
|
|
|
@ -177,15 +177,14 @@ while fpar<B
|
||||||
error(['PosteriorIRF :: Dynare is unable to solve the model (' errordef ') with sample ' type])
|
error(['PosteriorIRF :: Dynare is unable to solve the model (' errordef ') with sample ' type])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
SS(M_.exo_names_orig_ord,M_.exo_names_orig_ord) = M_.Sigma_e+1e-14*eye(M_.exo_nbr);
|
SS = get_lower_cholesky_covariance(M_.Sigma_e,options_.add_tiny_number_to_cholesky);
|
||||||
SS = transpose(chol(SS));
|
|
||||||
irf_shocks_indx = getIrfShocksIndx(M_, options_);
|
irf_shocks_indx = getIrfShocksIndx(M_, options_);
|
||||||
for i=irf_shocks_indx
|
for i=irf_shocks_indx
|
||||||
if SS(i,i) > 1e-13
|
if SS(i,i) > 5e-7
|
||||||
if options_.order>1 && options_.relative_irf % normalize shock to 0.01 before IRF generation for GIRFs; multiply with 100 later
|
if options_.order>1 && options_.relative_irf % normalize shock to 0.01 before IRF generation for GIRFs; multiply with 100 later
|
||||||
y=irf(M_,options_,dr,SS(M_.exo_names_orig_ord,i)./SS(i,i)/100, options_.irf, options_.drop,options_.replic,options_.order);
|
y=irf(M_,options_,dr,SS(:,i)./SS(i,i)/100, options_.irf, options_.drop,options_.replic,options_.order);
|
||||||
else
|
else
|
||||||
y=irf(M_,options_,dr,SS(M_.exo_names_orig_ord,i), options_.irf, options_.drop,options_.replic,options_.order);
|
y=irf(M_,options_,dr,SS(:,i), options_.irf, options_.drop,options_.replic,options_.order);
|
||||||
end
|
end
|
||||||
if options_.relative_irf && options_.order==1 %multiply with 100 for backward compatibility
|
if options_.relative_irf && options_.order==1 %multiply with 100 for backward compatibility
|
||||||
y = 100*y/SS(i,i);
|
y = 100*y/SS(i,i);
|
||||||
|
@ -219,7 +218,7 @@ while fpar<B
|
||||||
mu = zeros(1,dataset_.vobs);
|
mu = zeros(1,dataset_.vobs);
|
||||||
% Get rotation
|
% Get rotation
|
||||||
if dsge_prior_weight > 0
|
if dsge_prior_weight > 0
|
||||||
Atheta(oo_.dr.order_var,M_.exo_names_orig_ord) = oo_.dr.ghu*sqrt(M_.Sigma_e);
|
Atheta(oo_.dr.order_var,:) = oo_.dr.ghu*sqrt(M_.Sigma_e);
|
||||||
A0 = Atheta(bayestopt_.mfys,:);
|
A0 = Atheta(bayestopt_.mfys,:);
|
||||||
OMEGAstar = qr2(A0');
|
OMEGAstar = qr2(A0');
|
||||||
end
|
end
|
||||||
|
|
|
@ -85,8 +85,7 @@ end
|
||||||
|
|
||||||
% Get the covariance matrix of the shocks.
|
% Get the covariance matrix of the shocks.
|
||||||
if withuncertainty
|
if withuncertainty
|
||||||
Sigma = M_.Sigma_e + 1e-14*eye(M_.exo_nbr);
|
sigma = get_lower_cholesky_covariance(M_.Sigma_e,options_.add_tiny_number_to_cholesky);
|
||||||
sigma = transpose(chol(Sigma));
|
|
||||||
end
|
end
|
||||||
|
|
||||||
% Compute forecast without shock
|
% Compute forecast without shock
|
||||||
|
|
|
@ -146,10 +146,8 @@ end
|
||||||
if ~deterministicshockflag
|
if ~deterministicshockflag
|
||||||
if nnz(M_.Sigma_e)
|
if nnz(M_.Sigma_e)
|
||||||
% Add ϵ>0 on the diagonal, so that the Cholesky won't fail
|
% Add ϵ>0 on the diagonal, so that the Cholesky won't fail
|
||||||
% if a shock has zero variance
|
% if a shock has zero variance and factorize Sigma (C is such that C*C' == Sigma)
|
||||||
Sigma = M_.Sigma_e + 1e-14*eye(M_.exo_nbr);
|
C = get_lower_cholesky_covariance(M_.Sigma_e,options_.add_tiny_number_to_cholesky);
|
||||||
% Factorize Sigma (C is such that C*C' == Sigma)
|
|
||||||
C = chol(Sigma, 'lower');
|
|
||||||
else
|
else
|
||||||
error('You did not specify the size of the shocks!')
|
error('You did not specify the size of the shocks!')
|
||||||
end
|
end
|
||||||
|
|
|
@ -153,7 +153,6 @@ if options_.order==1
|
||||||
end
|
end
|
||||||
title=add_filter_subtitle(title, options_);
|
title=add_filter_subtitle(title, options_);
|
||||||
headers = M_.exo_names;
|
headers = M_.exo_names;
|
||||||
headers(M_.exo_names_orig_ord) = headers;
|
|
||||||
headers = vertcat(' ', headers);
|
headers = vertcat(' ', headers);
|
||||||
lh = cellofchararraymaxlength(var_list_)+2;
|
lh = cellofchararraymaxlength(var_list_)+2;
|
||||||
dyntable(options_, title, headers, var_list_, 100*temp, lh, 8, 2);
|
dyntable(options_, title, headers, var_list_, 100*temp, lh, 8, 2);
|
||||||
|
@ -197,7 +196,6 @@ if options_.order==1
|
||||||
end
|
end
|
||||||
title=add_filter_subtitle(title, options_);
|
title=add_filter_subtitle(title, options_);
|
||||||
headers = M_.exo_names;
|
headers = M_.exo_names;
|
||||||
headers(M_.exo_names_orig_ord) = headers;
|
|
||||||
headers = vertcat(' ', headers, 'ME');
|
headers = vertcat(' ', headers, 'ME');
|
||||||
lh = cellofchararraymaxlength(var_list_)+2;
|
lh = cellofchararraymaxlength(var_list_)+2;
|
||||||
dyntable(options_, title, headers, observable_name_requested_vars,100*temp,lh,8,2);
|
dyntable(options_, title, headers, observable_name_requested_vars,100*temp,lh,8,2);
|
||||||
|
@ -236,7 +234,6 @@ if options_.order==1
|
||||||
for step_iter=1:length(Steps)
|
for step_iter=1:length(Steps)
|
||||||
title_print=[title, ' Period ' int2str(Steps(step_iter))];
|
title_print=[title, ' Period ' int2str(Steps(step_iter))];
|
||||||
headers = M_.exo_names;
|
headers = M_.exo_names;
|
||||||
headers(M_.exo_names_orig_ord) = headers;
|
|
||||||
headers = vertcat(' ', headers);
|
headers = vertcat(' ', headers);
|
||||||
lh = cellofchararraymaxlength(var_list_)+2;
|
lh = cellofchararraymaxlength(var_list_)+2;
|
||||||
dyntable(options_,title_print,headers, var_list_,100* ...
|
dyntable(options_,title_print,headers, var_list_,100* ...
|
||||||
|
@ -280,7 +277,6 @@ if options_.order==1
|
||||||
for step_iter=1:length(Steps)
|
for step_iter=1:length(Steps)
|
||||||
title_print = [title, ' Period ' int2str(Steps(step_iter))];
|
title_print = [title, ' Period ' int2str(Steps(step_iter))];
|
||||||
headers = M_.exo_names;
|
headers = M_.exo_names;
|
||||||
headers(M_.exo_names_orig_ord) = headers;
|
|
||||||
headers = vertcat(' ', headers, 'ME');
|
headers = vertcat(' ', headers, 'ME');
|
||||||
lh = cellofchararraymaxlength(var_list_)+2;
|
lh = cellofchararraymaxlength(var_list_)+2;
|
||||||
dyntable(options_, title_print, headers, observable_name_requested_vars, 100*temp(:,:,step_iter), lh, 8, 2);
|
dyntable(options_, title_print, headers, observable_name_requested_vars, 100*temp(:,:,step_iter), lh, 8, 2);
|
||||||
|
|
|
@ -67,6 +67,7 @@ options_.mode_check.number_of_points = 20;
|
||||||
options_.mode_check.nolik = false;
|
options_.mode_check.nolik = false;
|
||||||
|
|
||||||
options_.huge_number = 1e7;
|
options_.huge_number = 1e7;
|
||||||
|
options_.add_tiny_number_to_cholesky=1e-14;
|
||||||
|
|
||||||
% Default number of threads for parallelized mex files.
|
% Default number of threads for parallelized mex files.
|
||||||
options_.threads.kronecker.sparse_hessian_times_B_kronecker_C = num_procs;
|
options_.threads.kronecker.sparse_hessian_times_B_kronecker_C = num_procs;
|
||||||
|
|
|
@ -196,7 +196,6 @@ if ~options_.nodecomposition
|
||||||
title='VARIANCE DECOMPOSITION SIMULATING ONE SHOCK AT A TIME (in percent)';
|
title='VARIANCE DECOMPOSITION SIMULATING ONE SHOCK AT A TIME (in percent)';
|
||||||
title=add_filter_subtitle(title,options_);
|
title=add_filter_subtitle(title,options_);
|
||||||
headers = M_.exo_names;
|
headers = M_.exo_names;
|
||||||
headers(M_.exo_names_orig_ord) = headers;
|
|
||||||
headers = vertcat(' ', headers);
|
headers = vertcat(' ', headers);
|
||||||
lh = cellofchararraymaxlength(M_.endo_names(ivar))+2;
|
lh = cellofchararraymaxlength(M_.endo_names(ivar))+2;
|
||||||
dyntable(options_, title, vertcat(headers, 'Tot. lin. contr.'), ...
|
dyntable(options_, title, vertcat(headers, 'Tot. lin. contr.'), ...
|
||||||
|
|
|
@ -96,7 +96,6 @@ if size(stationary_vars, 1) > 0
|
||||||
end
|
end
|
||||||
title = add_filter_subtitle(title, options_);
|
title = add_filter_subtitle(title, options_);
|
||||||
headers = M_.exo_names;
|
headers = M_.exo_names;
|
||||||
headers(M_.exo_names_orig_ord) = headers;
|
|
||||||
headers = vertcat(' ', headers);
|
headers = vertcat(' ', headers);
|
||||||
labels=get_labels_transformed_vars(M_.endo_names,ivar(stationary_vars),options_,false);
|
labels=get_labels_transformed_vars(M_.endo_names,ivar(stationary_vars),options_,false);
|
||||||
lh = cellofchararraymaxlength(labels)+2;
|
lh = cellofchararraymaxlength(labels)+2;
|
||||||
|
|
|
@ -33,7 +33,6 @@ function display_conditional_variance_decomposition(conditional_decomposition_ar
|
||||||
if size(conditional_decomposition_array,3)==M_.exo_nbr %no ME input
|
if size(conditional_decomposition_array,3)==M_.exo_nbr %no ME input
|
||||||
shock_number=M_.exo_nbr;
|
shock_number=M_.exo_nbr;
|
||||||
headers = M_.exo_names;
|
headers = M_.exo_names;
|
||||||
headers(M_.exo_names_orig_ord) = headers;
|
|
||||||
if options_.TeX
|
if options_.TeX
|
||||||
headers_TeX = vertcat(' ', M_.exo_names_tex);
|
headers_TeX = vertcat(' ', M_.exo_names_tex);
|
||||||
end
|
end
|
||||||
|
@ -41,7 +40,6 @@ if size(conditional_decomposition_array,3)==M_.exo_nbr %no ME input
|
||||||
elseif size(conditional_decomposition_array,3)==M_.exo_nbr+1 %ME input
|
elseif size(conditional_decomposition_array,3)==M_.exo_nbr+1 %ME input
|
||||||
shock_number=M_.exo_nbr+1;
|
shock_number=M_.exo_nbr+1;
|
||||||
headers = M_.exo_names;
|
headers = M_.exo_names;
|
||||||
headers(M_.exo_names_orig_ord) = headers;
|
|
||||||
headers = vertcat(headers, 'ME');
|
headers = vertcat(headers, 'ME');
|
||||||
if options_.TeX
|
if options_.TeX
|
||||||
headers_TeX = vertcat(M_.exo_names_tex, 'ME');
|
headers_TeX = vertcat(M_.exo_names_tex, 'ME');
|
||||||
|
|
|
@ -534,7 +534,7 @@ if options_gsa.glue
|
||||||
Out1(jsmoo).ini = 'yes';
|
Out1(jsmoo).ini = 'yes';
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
tit(M_.exo_names_orig_ord) = M_.exo_names;
|
tit = M_.exo_names;
|
||||||
for j=1:M_.exo_nbr
|
for j=1:M_.exo_nbr
|
||||||
Exo(j).name = tit{j};
|
Exo(j).name = tit{j};
|
||||||
end
|
end
|
||||||
|
|
|
@ -27,7 +27,7 @@ function irf_shocks_indx=getIrfShocksIndx(M_, options_)
|
||||||
% along with Dynare. If not, see <https://www.gnu.org/licenses/>.
|
% along with Dynare. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
if (isfield(options_,'irf_shocks')==0)
|
if (isfield(options_,'irf_shocks')==0)
|
||||||
irf_shocks_indx = M_.exo_names_orig_ord;
|
irf_shocks_indx = 1:M_.exo_nbr;
|
||||||
else
|
else
|
||||||
irf_shocks_indx = zeros(1,size(options_.irf_shocks,1));
|
irf_shocks_indx = zeros(1,size(options_.irf_shocks,1));
|
||||||
for i=1:size(options_.irf_shocks,1)
|
for i=1:size(options_.irf_shocks,1)
|
||||||
|
|
|
@ -0,0 +1,92 @@
|
||||||
|
function chol_sigma=get_lower_cholesky_covariance(Sigma_e,add_tiny_number_to_cholesky)
|
||||||
|
% function chol_sigma=get_lower_cholesky_covariance(Sigma_e)
|
||||||
|
% Computes the lower triangular Cholesky decomposition of a covariance matrix,
|
||||||
|
% working around zero entries on the diagonal and perfect correlation
|
||||||
|
%
|
||||||
|
% INPUTS
|
||||||
|
% Sigma_e [double] covariance matrix
|
||||||
|
%
|
||||||
|
% OUTPUTS
|
||||||
|
% chol_sigma [cell] Cholesky factor
|
||||||
|
%
|
||||||
|
% ALGORITHM
|
||||||
|
% Add small value to diagonal to break perfect correlation
|
||||||
|
%
|
||||||
|
% SPECIAL REQUIREMENTS.
|
||||||
|
% None.
|
||||||
|
%
|
||||||
|
% Copyright © 2023 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/>.
|
||||||
|
|
||||||
|
if nargin<2
|
||||||
|
add_tiny_number_to_cholesky=1e-14;
|
||||||
|
end
|
||||||
|
std_deviation=sqrt(diag(Sigma_e));
|
||||||
|
non_zero_indices=find(std_deviation~=0); %find non-zero shocks;
|
||||||
|
try
|
||||||
|
chol_sigma=zeros(size(Sigma_e));
|
||||||
|
chol_sigma(non_zero_indices,non_zero_indices)=chol(Sigma_e(non_zero_indices,non_zero_indices),'lower');
|
||||||
|
catch
|
||||||
|
% cases with perfect correlation
|
||||||
|
fprintf('Non-positive definite covariance matrix encountered. Using add_tiny_number_to_cholesky one the diagonal.\n')
|
||||||
|
chol_sigma=zeros(size(Sigma_e));
|
||||||
|
chol_sigma(non_zero_indices,non_zero_indices)=chol(Sigma_e(non_zero_indices,non_zero_indices)+add_tiny_number_to_cholesky*eye(length(non_zero_indices)),'lower');
|
||||||
|
% correlation=diag(std_deviation(non_zero_indices))\Sigma_e(non_zero_indices,non_zero_indices)/diag(std_deviation(non_zero_indices));
|
||||||
|
end
|
||||||
|
|
||||||
|
return % --*-- Unit tests --*--
|
||||||
|
|
||||||
|
%@test:1
|
||||||
|
|
||||||
|
Sigma_e=diag(4*ones(3,1));
|
||||||
|
Sigma_e(2,2)=0;
|
||||||
|
chol_1=get_lower_cholesky_covariance(Sigma_e);
|
||||||
|
if max(max(abs(chol_1-diag([2,0,2]))))>eps
|
||||||
|
t(1)=false;
|
||||||
|
else
|
||||||
|
t(1)=true;
|
||||||
|
end
|
||||||
|
|
||||||
|
Sigma_e=ones(3,3);
|
||||||
|
chol_2=get_lower_cholesky_covariance(Sigma_e,1e-14);
|
||||||
|
chol_3=get_lower_cholesky_covariance(Sigma_e+1e-14*eye(3),1e-14);
|
||||||
|
if max(max(abs(chol_2-chol_3)))>eps || any(any(triu(chol_3,1)))
|
||||||
|
t(2)=false;
|
||||||
|
else
|
||||||
|
t(2)=true;
|
||||||
|
end
|
||||||
|
|
||||||
|
Sigma_e=ones(3,3);
|
||||||
|
Sigma_e(2,:)=0;
|
||||||
|
Sigma_e(:,2)=0;
|
||||||
|
chol_4=get_lower_cholesky_covariance(Sigma_e,1e-14);
|
||||||
|
if chol_4(2,2)~=0 || any(any(triu(chol_4,1)))
|
||||||
|
t(3)=false;
|
||||||
|
else
|
||||||
|
t(3)=true;
|
||||||
|
end
|
||||||
|
|
||||||
|
Sigma_e=[4 0.5 0; 0.5 9 0; 0 0 16];
|
||||||
|
chol_5=get_lower_cholesky_covariance(Sigma_e,1e-14);
|
||||||
|
if any(any(triu(chol_5,1))) %should be lower triangular
|
||||||
|
t(4)=false;
|
||||||
|
else
|
||||||
|
t(4)=true;
|
||||||
|
end
|
||||||
|
|
||||||
|
T = all(t);
|
||||||
|
%@eof:1
|
|
@ -116,7 +116,7 @@ rr=DD*QQ*DD'+RR;
|
||||||
ZSIG0=disc_riccati_fast(ff,DD,rr,hh);
|
ZSIG0=disc_riccati_fast(ff,DD,rr,hh);
|
||||||
PP=ZSIG0 +QQ;
|
PP=ZSIG0 +QQ;
|
||||||
|
|
||||||
exo_names=M_.exo_names(M_.exo_names_orig_ord);
|
exo_names=M_.exo_names;
|
||||||
|
|
||||||
DPDR=DD*PP*DD'+RR;
|
DPDR=DD*PP*DD'+RR;
|
||||||
I_DPDR=inv(DPDR);
|
I_DPDR=inv(DPDR);
|
||||||
|
|
|
@ -129,7 +129,7 @@ rr=DD*QQ*DD'+RR;
|
||||||
ZSIG0=disc_riccati_fast(ff,DD,rr,hh);
|
ZSIG0=disc_riccati_fast(ff,DD,rr,hh);
|
||||||
PP=ZSIG0 +QQ;
|
PP=ZSIG0 +QQ;
|
||||||
|
|
||||||
exo_names = M_.exo_names(M_.exo_names_orig_ord);
|
exo_names = M_.exo_names;
|
||||||
|
|
||||||
DPDR=DD*PP*DD'+RR;
|
DPDR=DD*PP*DD'+RR;
|
||||||
I_DPDR=inv(DPDR);
|
I_DPDR=inv(DPDR);
|
||||||
|
|
|
@ -231,23 +231,22 @@ if options_.irf
|
||||||
fprintf(fidTeX,['%% ' datestr(now,0) '\n']);
|
fprintf(fidTeX,['%% ' datestr(now,0) '\n']);
|
||||||
fprintf(fidTeX,' \n');
|
fprintf(fidTeX,' \n');
|
||||||
end
|
end
|
||||||
SS(M_.exo_names_orig_ord,M_.exo_names_orig_ord)=M_.Sigma_e+1e-14*eye(M_.exo_nbr);
|
cs=get_lower_cholesky_covariance(M_.Sigma_e,options_.add_tiny_number_to_cholesky);
|
||||||
cs = transpose(chol(SS));
|
tit = M_.exo_names;
|
||||||
tit(M_.exo_names_orig_ord) = M_.exo_names;
|
|
||||||
if TeX
|
if TeX
|
||||||
titTeX(M_.exo_names_orig_ord) = M_.exo_names_tex;
|
titTeX = M_.exo_names_tex;
|
||||||
end
|
end
|
||||||
irf_shocks_indx = getIrfShocksIndx(M_, options_);
|
irf_shocks_indx = getIrfShocksIndx(M_, options_);
|
||||||
for i=irf_shocks_indx
|
for i=irf_shocks_indx
|
||||||
if SS(i,i) > 1e-13
|
if cs(i,i) > 5e-7
|
||||||
if PI_PCL_solver
|
if PI_PCL_solver
|
||||||
y=PCL_Part_info_irf (0, PCL_varobs, i_var, M_, oo_.dr, options_.irf, i);
|
y=PCL_Part_info_irf (0, PCL_varobs, i_var, M_, oo_.dr, options_.irf, i);
|
||||||
else
|
else
|
||||||
if options_.order>1 && options_.relative_irf % normalize shock to 0.01 before IRF generation for GIRFs; multiply with 100 later
|
if options_.order>1 && options_.relative_irf % normalize shock to 0.01 before IRF generation for GIRFs; multiply with 100 later
|
||||||
y=irf(M_, options_, oo_.dr,cs(M_.exo_names_orig_ord,i)./cs(i,i)/100, options_.irf, options_.drop, ...
|
y=irf(M_, options_, oo_.dr,cs(:,i)./cs(i,i)/100, options_.irf, options_.drop, ...
|
||||||
options_.replic, options_.order);
|
options_.replic, options_.order);
|
||||||
else %for linear model, rescaling is done later
|
else %for linear model, rescaling is done later
|
||||||
y=irf(M_, options_, oo_.dr,cs(M_.exo_names_orig_ord,i), options_.irf, options_.drop, ...
|
y=irf(M_, options_, oo_.dr,cs(:,i), options_.irf, options_.drop, ...
|
||||||
options_.replic, options_.order);
|
options_.replic, options_.order);
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -73,7 +73,6 @@ if local_order~=1 && M_.hessian_eq_zero
|
||||||
end
|
end
|
||||||
|
|
||||||
endo_nbr = M_.endo_nbr;
|
endo_nbr = M_.endo_nbr;
|
||||||
exo_names_orig_ord = M_.exo_names_orig_ord;
|
|
||||||
if isoctave
|
if isoctave
|
||||||
warning('off', 'Octave:divide-by-zero')
|
warning('off', 'Octave:divide-by-zero')
|
||||||
else
|
else
|
||||||
|
@ -173,11 +172,10 @@ if options_.hp_filter == 0 && ~options_.bandpass.indicator
|
||||||
Gamma_y{nar+2} = ones(nvar,1);
|
Gamma_y{nar+2} = ones(nvar,1);
|
||||||
else
|
else
|
||||||
Gamma_y{nar+2} = NaN(nvar,M_.exo_nbr);
|
Gamma_y{nar+2} = NaN(nvar,M_.exo_nbr);
|
||||||
SS(exo_names_orig_ord,exo_names_orig_ord)=M_.Sigma_e+1e-14*eye(M_.exo_nbr);
|
cs = get_lower_cholesky_covariance(M_.Sigma_e,options_.add_tiny_number_to_cholesky);
|
||||||
cs = chol(SS)';
|
b1 = ghu1;
|
||||||
b1(:,exo_names_orig_ord) = ghu1;
|
|
||||||
b1 = b1*cs;
|
b1 = b1*cs;
|
||||||
b2(:,exo_names_orig_ord) = ghu(iky,:);
|
b2 = ghu(iky,:);
|
||||||
b2 = b2*cs;
|
b2 = b2*cs;
|
||||||
vx = lyapunov_symm(A,b1*b1',options_.lyapunov_fixed_point_tol,options_.qz_criterium,options_.lyapunov_complex_threshold,1,options_.debug);
|
vx = lyapunov_symm(A,b1*b1',options_.lyapunov_fixed_point_tol,options_.qz_criterium,options_.lyapunov_complex_threshold,1,options_.debug);
|
||||||
vv = diag(aa*vx*aa'+b2*b2');
|
vv = diag(aa*vx*aa'+b2*b2');
|
||||||
|
@ -251,11 +249,10 @@ else% ==> Theoretical filters.
|
||||||
Gamma_y{nar+2} = ones(nvar,1);
|
Gamma_y{nar+2} = ones(nvar,1);
|
||||||
else
|
else
|
||||||
Gamma_y{nar+2} = zeros(nvar,M_.exo_nbr);
|
Gamma_y{nar+2} = zeros(nvar,M_.exo_nbr);
|
||||||
SS(exo_names_orig_ord,exo_names_orig_ord) = M_.Sigma_e+1e-14*eye(M_.exo_nbr); %make sure Covariance matrix is positive definite
|
cs = get_lower_cholesky_covariance(M_.Sigma_e); %make sure Covariance matrix is positive definite
|
||||||
cs = chol(SS)';
|
|
||||||
SS = cs*cs';
|
SS = cs*cs';
|
||||||
b1(:,exo_names_orig_ord) = ghu1;
|
b1 = ghu1;
|
||||||
b2(:,exo_names_orig_ord) = ghu(iky,:);
|
b2 = ghu(iky,:);
|
||||||
mathp_col = NaN(ngrid,length(ivar)^2);
|
mathp_col = NaN(ngrid,length(ivar)^2);
|
||||||
IA = eye(size(A,1));
|
IA = eye(size(A,1));
|
||||||
IE = eye(M_.exo_nbr);
|
IE = eye(M_.exo_nbr);
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit 1b0e5581378bc98cf73b090c9a849d0e578a895d
|
Subproject commit 0990492e2fe10d06e1955ae5072fda94fe51f8d2
|
Loading…
Reference in New Issue