v4: new set of graphs in forecast with prior uncertainty
git-svn-id: https://www.dynare.org/svn/dynare/dynare_v4@1095 ac1d8469-bf42-47a9-8791-bf33cf982152time-shift
parent
9ff865e84b
commit
f5d35c9737
104
matlab/forcst.m
104
matlab/forcst.m
|
@ -1,74 +1,54 @@
|
||||||
function [yf,var_yf]=forcst(dr,y0,k,m)
|
function [yf,int_width]=forcst(dr,y0,k,var_list)
|
||||||
global M_ oo_ options_
|
global M_ oo_ options_
|
||||||
|
|
||||||
options_.periods = k;
|
|
||||||
make_ex_;
|
make_ex_;
|
||||||
yf = simult_(y0,dr,oo_.exo_simul(1:k,:),1);
|
yf = simult_(y0,dr,zeros(k,M_.exo_nbr),1);
|
||||||
|
|
||||||
nstatic = dr.nstatic;
|
nstatic = dr.nstatic;
|
||||||
npred = dr.npred;
|
npred = dr.npred;
|
||||||
%j = find(dr.kstate(dr.kae,2) <= ykmin_+1);
|
nc = size(dr.ghx,2);
|
||||||
j = find(dr.kstate(dr.kae,2) <= M_.maximum_lag+1);
|
endo_nbr = M_.endo_nbr;
|
||||||
kae = dr.kae(j);
|
inv_order_var = dr.inv_order_var;
|
||||||
nh = size(dr.ghx,2);
|
[A,B] = kalman_transition_matrix(dr,nstatic+(1:npred),1:nc,dr.transition_auxiliary_variables);
|
||||||
hx = dr.ghx(nstatic+1:nstatic+npred,:);
|
|
||||||
hu = dr.ghu(nstatic+1:nstatic+npred,:);
|
|
||||||
if ~isempty(kae)
|
|
||||||
n = length(kae);
|
|
||||||
tmp = sparse([1:n]',kae-sum(dr.kstate(:,2)>M_.maximum_lag+1),ones(n,1),n,nh);
|
|
||||||
hx = [hx; tmp];
|
|
||||||
hu = [hu; zeros(n,M_.exo_nbr)];
|
|
||||||
end
|
|
||||||
gx = [];
|
|
||||||
k2 = [];
|
|
||||||
if nstatic > 0
|
|
||||||
gx = dr.ghx(1:nstatic,:);
|
|
||||||
k2 = [1:nstatic]';
|
|
||||||
end
|
|
||||||
if size(dr.ghx,1) > nstatic+npred
|
|
||||||
gx = [gx; dr.ghx(nstatic+npred+1:end,:)];
|
|
||||||
k2 = [k2; [nstatic+npred+1:size(dr.ghx,1)]'];
|
|
||||||
end
|
|
||||||
|
|
||||||
k1 = dr.order_var([nstatic+1:nstatic+npred]);
|
nvar = size(var_list,1);
|
||||||
k2 = dr.order_var(k2);
|
if nvar == 0
|
||||||
|
nvar = M_.endo_nbr;
|
||||||
sigma_u = hu*M_.Sigma_e*hu';
|
ivar = [1:nvar];
|
||||||
sigma_y1 = 0;
|
|
||||||
var_yf = zeros(k,M_.endo_nbr);
|
|
||||||
|
|
||||||
|
|
||||||
if isempty(k2)
|
|
||||||
for i=1:k
|
|
||||||
sigma_y1 = sigma_y1+sigma_u;
|
|
||||||
var_yf(i,k1) = diag(sigma_y1(1:npred,1:npred))';
|
|
||||||
if i == k
|
|
||||||
break
|
|
||||||
end
|
|
||||||
sigma_u = hx*sigma_u*hx';
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
for i=1:k
|
ivar=zeros(nvar,1);
|
||||||
sigma_y1 = sigma_y1+sigma_u;
|
for i=1:nvar
|
||||||
var_yf(i,k1) = diag(sigma_y1(1:npred,1:npred))';
|
i_tmp = strmatch(var_list(i,:),M_.endo_names,'exact');
|
||||||
sigma_y2 = gx*sigma_y1*gx';
|
if isempty(i_tmp)
|
||||||
var_yf(i,k2) = diag(sigma_y2)';
|
disp(var_list(i,:));
|
||||||
if i == k
|
error (['One of the variable specified does not exist']) ;
|
||||||
break
|
else
|
||||||
|
ivar(i) = i_tmp;
|
||||||
end
|
end
|
||||||
sigma_u = hx*sigma_u*hx';
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
ghx1 = dr.ghx(inv_order_var(ivar),:);
|
||||||
|
ghu1 = dr.ghu(inv_order_var(ivar),:);
|
||||||
|
|
||||||
|
sigma_u = B*M_.Sigma_e*B';
|
||||||
|
sigma_u1 = ghu1*M_.Sigma_e*ghu1';
|
||||||
|
sigma_y = 0;
|
||||||
|
|
||||||
|
for i=1:k
|
||||||
|
sigma_y1 = ghx1*sigma_y*ghx1'+sigma_u1;
|
||||||
|
var_yf(i,:) = diag(sigma_y1)';
|
||||||
|
if i == k
|
||||||
|
break
|
||||||
|
end
|
||||||
|
sigma_u = A*sigma_u*A';
|
||||||
|
sigma_y = sigma_y+sigma_u;
|
||||||
|
end
|
||||||
|
|
||||||
|
fact = qnorm((1-options_.conf_sig)/2,0,1);
|
||||||
|
|
||||||
|
int_width = zeros(k,M_.endo_nbr);
|
||||||
|
for i=1:nvar
|
||||||
|
int_width(:,i) = fact*sqrt(var_yf(:,i));
|
||||||
|
end
|
||||||
|
|
||||||
|
yf = yf(ivar,:);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -23,6 +23,10 @@ function forcst_unc(y0,var_list)
|
||||||
% setting up estim_params_
|
% setting up estim_params_
|
||||||
[xparam1,estim_params_,bayestopt_,lb,ub] = set_prior(estim_params_);
|
[xparam1,estim_params_,bayestopt_,lb,ub] = set_prior(estim_params_);
|
||||||
|
|
||||||
|
options_.TeX = 0;
|
||||||
|
options_.nograph = 0;
|
||||||
|
plot_priors;
|
||||||
|
|
||||||
% workspace initialization
|
% workspace initialization
|
||||||
if isempty(var_list)
|
if isempty(var_list)
|
||||||
var_list = M_.endo_names;
|
var_list = M_.endo_names;
|
||||||
|
@ -34,6 +38,7 @@ function forcst_unc(y0,var_list)
|
||||||
exo_nbr = M_.exo_nbr;
|
exo_nbr = M_.exo_nbr;
|
||||||
replic = options_.replic;
|
replic = options_.replic;
|
||||||
order = options_.order;
|
order = options_.order;
|
||||||
|
maximum_lag = M_.maximum_lag;
|
||||||
% params = prior_draw(1);
|
% params = prior_draw(1);
|
||||||
params = rndprior(bayestopt_);
|
params = rndprior(bayestopt_);
|
||||||
set_parameters(params);
|
set_parameters(params);
|
||||||
|
@ -103,15 +108,29 @@ function forcst_unc(y0,var_list)
|
||||||
k2(2) = 1;
|
k2(2) = 1;
|
||||||
end
|
end
|
||||||
|
|
||||||
|
% compute shock uncertainty around forecast with mean prior
|
||||||
|
set_parameters(bayestopt_.pmean);
|
||||||
|
[dr,info] = resol(oo_.steady_state,0);
|
||||||
|
[yf3,yf3_intv] = forcst(dr,y0,periods,var_list);
|
||||||
|
yf3_1 = yf3'-[zeros(maximum_lag,n); yf3_intv];
|
||||||
|
yf3_2 = yf3'+[zeros(maximum_lag,n); yf3_intv];
|
||||||
|
|
||||||
% graphs
|
% graphs
|
||||||
|
|
||||||
dynare_graph_init('Forecasts',n,{'b-' 'g-' 'g-' 'r-' 'r-'});
|
dynare_graph_init('Forecasts type I',n,{'b-' 'g-' 'g-' 'r-' 'r-'});
|
||||||
for i=1:n
|
for i=1:n
|
||||||
dynare_graph([yf_mean(:,i) squeeze(yf1(:,i,k1)) squeeze(yf2(:,i,k2))],...
|
dynare_graph([yf_mean(:,i) squeeze(yf1(:,i,k1)) squeeze(yf2(:,i,k2))],...
|
||||||
var_list(i,:));
|
var_list(i,:));
|
||||||
end
|
end
|
||||||
dynare_graph_close;
|
dynare_graph_close;
|
||||||
|
|
||||||
|
dynare_graph_init('Forecasts type II',n,{'b-' 'k-' 'k-' 'r-' 'r-'});
|
||||||
|
for i=1:n
|
||||||
|
dynare_graph([yf_mean(:,i) yf3_1(:,i) yf3_2(:,i) squeeze(yf2(:,i,k2))],...
|
||||||
|
var_list(i,:));
|
||||||
|
end
|
||||||
|
dynare_graph_close;
|
||||||
|
|
||||||
|
|
||||||
% saving results
|
% saving results
|
||||||
save_results(yf_mean,'oo_.forecast.mean.',var_list);
|
save_results(yf_mean,'oo_.forecast.mean.',var_list);
|
||||||
|
|
|
@ -7,6 +7,9 @@ global it_ means_
|
||||||
|
|
||||||
order = options_.order;
|
order = options_.order;
|
||||||
replic = options_.replic;
|
replic = options_.replic;
|
||||||
|
if replic == 0
|
||||||
|
replic = 1;
|
||||||
|
end
|
||||||
seed = options_.simul_seed;
|
seed = options_.simul_seed;
|
||||||
options_.periods = options_.periods;
|
options_.periods = options_.periods;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue