Merge branch 'init2shocks' into 'master'
Init2shocks See merge request Dynare/dynare!1681time-shift
commit
d23be63fba
|
@ -51,6 +51,7 @@ for j=1:length(shocks)
|
|||
M.shock_groups.(options.plot_shock_decomp.use_shock_groups).(['group' int2str(j)]).label=shocks{j};
|
||||
M.shock_groups.(options.plot_shock_decomp.use_shock_groups).(['group' int2str(j)]).shocks=shocks(j);
|
||||
end
|
||||
M.exo_names = mydata.exo_names;
|
||||
|
||||
options.plot_shock_decomp.interactive=0;
|
||||
options.plot_shock_decomp.expand=1;
|
||||
|
|
|
@ -51,25 +51,6 @@ if ~isempty(opts_decomp.type)
|
|||
fig_mode = [fig_mode '_'];
|
||||
end
|
||||
|
||||
if isfield(opts_decomp,'flip')
|
||||
flip_decomp = opts_decomp.flip ;
|
||||
else
|
||||
flip_decomp = 0;
|
||||
end
|
||||
if flip_decomp
|
||||
fig_mode1 = [fig_mode1 '_flip'];
|
||||
fig_mode = [fig_mode 'flip_'];
|
||||
end
|
||||
|
||||
if isfield(opts_decomp,'diff')
|
||||
differentiate_decomp = opts_decomp.diff ;
|
||||
else
|
||||
differentiate_decomp = 0;
|
||||
end
|
||||
if differentiate_decomp
|
||||
fig_mode1 = [fig_mode1 '_diff'];
|
||||
fig_mode = [fig_mode 'diff_'];
|
||||
end
|
||||
if isfield(opts_decomp,'init_cond_decomp')
|
||||
init_cond_decomp = opts_decomp.init_cond_decomp ;
|
||||
else
|
||||
|
@ -232,8 +213,9 @@ for j=1:nvar
|
|||
mydata.first_obs = DynareOptions.first_obs;
|
||||
mydata.nobs = DynareOptions.nobs;
|
||||
mydata.plot_shock_decomp.zfull = DynareOptions.plot_shock_decomp.zfull(i_var(j),:,:);
|
||||
mydata.endo_names = endo_names{i_var(j)};
|
||||
mydata.endo_names_tex = DynareModel.endo_names_tex{i_var(j)};
|
||||
mydata.endo_names = endo_names(i_var(j));
|
||||
mydata.endo_names_tex = DynareModel.endo_names_tex(i_var(j));
|
||||
mydata.exo_names = DynareModel.exo_names;
|
||||
if ~isempty(mydata.shock_group.shocks)
|
||||
c = uicontextmenu;
|
||||
hl.UIContextMenu=c;
|
||||
|
@ -266,8 +248,9 @@ for j=1:nvar
|
|||
fprintf(fidTeX,' \n');
|
||||
end
|
||||
else
|
||||
dyn_saveas(fhandle,[DynareOptions.plot_shock_decomp.filepath, filesep, DynareModel.fname,preamble_figname,endo_names{i_var(j)},fig_mode1,fig_name],DynareOptions.plot_shock_decomp.nodisplay,DynareOptions.plot_shock_decomp.graph_format);
|
||||
|
||||
if ~isempty(DynareOptions.plot_shock_decomp.filepath)
|
||||
dyn_saveas(fhandle,[DynareOptions.plot_shock_decomp.filepath, filesep, DynareModel.fname,preamble_figname,endo_names{i_var(j)},fig_mode1,fig_name],DynareOptions.plot_shock_decomp.nodisplay,DynareOptions.plot_shock_decomp.graph_format);
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -53,25 +53,7 @@ if ~isempty(opts_decomp.type)
|
|||
fig_mode1 = ['_' fig_mode];
|
||||
fig_mode = [fig_mode '_'];
|
||||
end
|
||||
if isfield(opts_decomp,'flip')
|
||||
flip_decomp = opts_decomp.flip ;
|
||||
else
|
||||
flip_decomp = 0;
|
||||
end
|
||||
if flip_decomp
|
||||
fig_mode1 = [fig_mode1 '_flip'];
|
||||
fig_mode = [fig_mode 'flip_'];
|
||||
end
|
||||
|
||||
if isfield(opts_decomp,'diff')
|
||||
differentiate_decomp = opts_decomp.diff ;
|
||||
else
|
||||
differentiate_decomp = 0;
|
||||
end
|
||||
if differentiate_decomp
|
||||
fig_mode1 = [fig_mode1 '_diff'];
|
||||
fig_mode = [fig_mode 'diff_'];
|
||||
end
|
||||
if isfield(opts_decomp,'init_cond_decomp')
|
||||
init_cond_decomp = opts_decomp.init_cond_decomp ;
|
||||
else
|
||||
|
@ -232,8 +214,9 @@ for j=1:nvar
|
|||
mydata.first_obs = DynareOptions.first_obs;
|
||||
mydata.nobs = DynareOptions.nobs;
|
||||
mydata.plot_shock_decomp.zfull = DynareOptions.plot_shock_decomp.zfull(i_var(j),:,:);
|
||||
mydata.endo_names = endo_names{i_var(j)};
|
||||
mydata.endo_names_tex = DynareModel.endo_names_tex{i_var(j)};
|
||||
mydata.endo_names = endo_names(i_var(j));
|
||||
mydata.endo_names_tex = DynareModel.endo_names_tex(i_var(j));
|
||||
mydata.exo_names = DynareModel.exo_names;
|
||||
if ~isempty(mydata.shock_group.shocks)
|
||||
c = uicontextmenu;
|
||||
hax.UIContextMenu=c;
|
||||
|
@ -289,8 +272,9 @@ for j=1:nvar
|
|||
fprintf(fidTeX,' \n');
|
||||
end
|
||||
else
|
||||
dyn_saveas(fhandle,[DynareOptions.plot_shock_decomp.filepath, filesep, DynareModel.fname,preamble_figname,endo_names{i_var(j)},fig_mode1,fig_name suffix],DynareOptions.plot_shock_decomp.nodisplay,DynareOptions.plot_shock_decomp.graph_format);
|
||||
|
||||
if ~isempty(DynareOptions.plot_shock_decomp.filepath)
|
||||
dyn_saveas(fhandle,[DynareOptions.plot_shock_decomp.filepath, filesep, DynareModel.fname,preamble_figname,endo_names{i_var(j)},fig_mode1,fig_name suffix],DynareOptions.plot_shock_decomp.nodisplay,DynareOptions.plot_shock_decomp.graph_format);
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -43,6 +43,7 @@ options_.plot_shock_decomp.nodisplay = options_.initial_condition_decomp.nodispl
|
|||
options_.plot_shock_decomp.graph_format = options_.initial_condition_decomp.graph_format;
|
||||
options_.plot_shock_decomp.fig_name = options_.initial_condition_decomp.fig_name;
|
||||
options_.plot_shock_decomp.detail_plot = options_.initial_condition_decomp.detail_plot;
|
||||
options_.plot_shock_decomp.init2shocks = options_.initial_condition_decomp.init2shocks;
|
||||
options_.plot_shock_decomp.steadystate = options_.initial_condition_decomp.steadystate;
|
||||
options_.plot_shock_decomp.write_xls = options_.initial_condition_decomp.write_xls;
|
||||
options_.plot_shock_decomp.type = options_.initial_condition_decomp.type;
|
||||
|
@ -51,6 +52,11 @@ options_.plot_shock_decomp.plot_end_date = options_.initial_condition_decomp.plo
|
|||
options_.plot_shock_decomp.diff = options_.initial_condition_decomp.diff;
|
||||
options_.plot_shock_decomp.flip = options_.initial_condition_decomp.flip;
|
||||
|
||||
if isfield(options_.initial_condition_decomp,'init2shocks') % private trap for uimenu calls
|
||||
init2shocks=options_.initial_condition_decomp.init2shocks;
|
||||
else
|
||||
init2shocks=[];
|
||||
end
|
||||
% indices of endogenous variables
|
||||
if isempty(varlist)
|
||||
varlist = M_.endo_names(1:M_.orig_endo_nbr);
|
||||
|
@ -129,6 +135,15 @@ end
|
|||
% if ~options_.no_graph.shock_decomposition
|
||||
oo=oo_;
|
||||
oo.shock_decomposition = oo_.initval_decomposition;
|
||||
if ~isempty(init2shocks)
|
||||
init2shocks = M_.init2shocks.(init2shocks);
|
||||
n=size(init2shocks,1);
|
||||
for i=1:n
|
||||
j=strmatch(init2shocks{i}{1},M_.endo_names,'exact');
|
||||
oo.shock_decomposition(:,end-1,:)=oo.shock_decomposition(:,j,:)+oo.shock_decomposition(:,end-1,:);
|
||||
oo.shock_decomposition(:,j,:)=0;
|
||||
end
|
||||
end
|
||||
M_.exo_names = M_.endo_names;
|
||||
M_.exo_nbr = M_.endo_nbr;
|
||||
options_.plot_shock_decomp.realtime=0;
|
||||
|
@ -137,4 +152,4 @@ options_.plot_shock_decomp.use_shock_groups = '';
|
|||
options_.plot_shock_decomp.init_cond_decomp = 1; % private flag to plotting utilities
|
||||
|
||||
plot_shock_decomposition(M_,oo,options_,varlist);
|
||||
% end
|
||||
% end
|
||||
|
|
|
@ -36,6 +36,16 @@ if isempty(varlist)
|
|||
varlist = M_.endo_names(1:M_.orig_endo_nbr);
|
||||
end
|
||||
|
||||
if isfield(options_.plot_shock_decomp,'init2shocks') % private trap for uimenu calls
|
||||
init2shocks=options_.plot_shock_decomp.init2shocks;
|
||||
else
|
||||
init2shocks=[];
|
||||
end
|
||||
if ~isempty(init2shocks)
|
||||
init2shocks=M_.init2shocks.(init2shocks);
|
||||
end
|
||||
|
||||
|
||||
[i_var, ~, index_uniques] = varlist_indices(varlist, M_.endo_names);
|
||||
varlist = varlist(index_uniques);
|
||||
|
||||
|
@ -151,6 +161,24 @@ switch realtime_
|
|||
end
|
||||
end
|
||||
|
||||
|
||||
if ~isempty(init2shocks) && ~expand
|
||||
n=size(init2shocks,1);
|
||||
M_.exo_names_init=M_.exo_names;
|
||||
for i=1:n
|
||||
j=strmatch(init2shocks{i}{1},M_.endo_names,'exact');
|
||||
if ~isempty(init2shocks{i}{2})
|
||||
jj=strmatch(init2shocks{i}{2},M_.exo_names,'exact');
|
||||
M_.exo_names_init{jj}=[M_.exo_names_init{jj} ' + ' M_.endo_names{j}];
|
||||
z(:,jj,:)= z(:,jj,:) + oo_.initval_decomposition (:,j,:);
|
||||
else
|
||||
z(:,end,:)= z(:,end,:) - oo_.initval_decomposition (:,j,:);
|
||||
end
|
||||
z(:,end-1,:)= z(:,end-1,:) - oo_.initval_decomposition (:,j,:);
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
if isfield(oo_.dr,'ys')
|
||||
steady_state = oo_.dr.ys;
|
||||
else
|
||||
|
@ -208,6 +236,7 @@ end
|
|||
if ~expand
|
||||
fig_name = fig_name1;
|
||||
end
|
||||
|
||||
if options_.plot_shock_decomp.use_shock_groups
|
||||
fig_name=[fig_name ' group ' options_.plot_shock_decomp.use_shock_groups];
|
||||
if expand
|
||||
|
@ -228,10 +257,28 @@ if options_.plot_shock_decomp.use_shock_groups
|
|||
zfull = z;
|
||||
[z, shock_names, M_] = make_the_groups(z,gend,endo_nbr,nshocks,M_,options_);
|
||||
end
|
||||
if ~isempty(init2shocks) && ~expand
|
||||
M_.exo_names=M_.exo_names_init;
|
||||
end
|
||||
else
|
||||
if ~isempty(init2shocks) && ~expand
|
||||
M_.exo_names=M_.exo_names_init;
|
||||
end
|
||||
shock_names = M_.exo_names;
|
||||
end
|
||||
|
||||
if ~expand
|
||||
if flip_decomp
|
||||
fig_name=[fig_name ' flip'];
|
||||
end
|
||||
if differentiate_decomp
|
||||
fig_name=[fig_name ' diff'];
|
||||
end
|
||||
if ~isempty(init2shocks)
|
||||
fig_name=[fig_name ' init2shocks'];
|
||||
end
|
||||
end
|
||||
|
||||
func = @(x) colorspace('RGB->Lab',x);
|
||||
MAP = distinguishable_colors(size(z,2)-1,'w',func);
|
||||
% MAP = [MAP; MAP(end,:)];
|
||||
|
@ -390,6 +437,7 @@ options_.plot_shock_decomp.orig_varlist = varlist;
|
|||
if options_.plot_shock_decomp.interactive && ~isempty(options_.plot_shock_decomp.use_shock_groups)
|
||||
options_.plot_shock_decomp.zfull = zfull;
|
||||
end
|
||||
|
||||
if detail_plot
|
||||
graph_decomp_detail(z, shock_names, M_.endo_names, i_var, my_initial_date, M_, options_)
|
||||
else
|
||||
|
@ -408,18 +456,30 @@ shock_groups = M_.shock_groups.(options_.plot_shock_decomp.use_shock_groups);
|
|||
shock_ind = fieldnames(shock_groups);
|
||||
ngroups = length(shock_ind);
|
||||
shock_names = shock_ind;
|
||||
shock_varexo = shock_ind;
|
||||
for i=1:ngroups
|
||||
shock_names{i} = (shock_groups.(shock_ind{i}).label);
|
||||
if isfield(M_,'exo_names_init')
|
||||
shock_varexo{i} = (shock_groups.(shock_ind{i}).shocks);
|
||||
end
|
||||
end
|
||||
zz = zeros(endo_nbr,ngroups+2,gend);
|
||||
kcum=[];
|
||||
for i=1:ngroups
|
||||
indx=0;
|
||||
for j = shock_groups.(shock_ind{i}).shocks
|
||||
k = find(strcmp(j,cellstr(M_.exo_names)));
|
||||
if isfield(M_,'exo_names_init')
|
||||
indx=indx+1;
|
||||
shock_varexo{i}{indx} = M_.exo_names_init{k};
|
||||
end
|
||||
zz(:,i,:) = zz(:,i,:) + z(:,k,:);
|
||||
z(:,k,:) = 0;
|
||||
kcum = [kcum k];
|
||||
end
|
||||
if isfield(M_,'exo_names_init')
|
||||
shock_groups.(shock_ind{i}).shocks = shock_varexo{i};
|
||||
end
|
||||
end
|
||||
zothers = sum(z(:,1:nshocks,:),2);
|
||||
shock_groups.(['group' int2str(ngroups+1)]).label = 'Others';
|
||||
|
|
|
@ -33,6 +33,7 @@ options.initial_condition_decomp.nodisplay = false;
|
|||
options.initial_condition_decomp.graph_format = 'eps';
|
||||
options.initial_condition_decomp.fig_name = '';
|
||||
options.initial_condition_decomp.detail_plot = false;
|
||||
options.initial_condition_decomp.init2shocks = [];
|
||||
options.initial_condition_decomp.steadystate = false;
|
||||
options.initial_condition_decomp.write_xls = false;
|
||||
options.initial_condition_decomp.type = '';
|
||||
|
|
|
@ -33,6 +33,7 @@ options.plot_shock_decomp.colormap = '';
|
|||
options.plot_shock_decomp.nodisplay = false;
|
||||
options.plot_shock_decomp.graph_format = 'eps';
|
||||
options.plot_shock_decomp.detail_plot = false;
|
||||
options.plot_shock_decomp.init2shocks = [];
|
||||
options.plot_shock_decomp.interactive = false;
|
||||
options.plot_shock_decomp.screen_shocks = false;
|
||||
options.plot_shock_decomp.steadystate = false;
|
||||
|
|
|
@ -76,46 +76,59 @@ supply = e_A ;
|
|||
'RoW shocks' = e_q e_ys e_pies ;
|
||||
monetary = e_R ;
|
||||
end;
|
||||
|
||||
init2shocks;
|
||||
dq e_q;
|
||||
A e_A;
|
||||
end;
|
||||
|
||||
options_.initial_date=dates('1989Q4'); % date arbitrarily set for testing purposes
|
||||
shock_decomposition(use_shock_groups=trade) y_obs R_obs pie_obs dq de;
|
||||
|
||||
// various tests for plot_shock_decompositions
|
||||
// standard plot [using trade group defined before]
|
||||
plot_shock_decomposition;
|
||||
// standard plot
|
||||
plot_shock_decomposition y_obs R_obs pie_obs dq de;
|
||||
|
||||
// test datailed, custom name and yoy plots
|
||||
plot_shock_decomposition(detail_plot, fig_name = MR, type = yoy);
|
||||
plot_shock_decomposition(detail_plot, fig_name = MR, type = yoy) y_obs R_obs pie_obs dq de;
|
||||
|
||||
// testing init2shocks
|
||||
initial_condition_decomposition(detail_plot, type=aoa, steadystate, write_xls, plot_init_date=1991Q1, plot_end_date=1995Q4, graph_format=fig) R_obs;
|
||||
plot_shock_decomposition(init2shocks) y_obs R_obs pie_obs dq de;
|
||||
plot_shock_decomposition(init2shocks,use_shock_groups=trade) y_obs R_obs pie_obs dq de;
|
||||
|
||||
// testing flip and diff
|
||||
plot_shock_decomposition(diff, use_shock_groups=trade) y_obs;
|
||||
plot_shock_decomposition(flip, use_shock_groups=trade) de;
|
||||
|
||||
close all,
|
||||
|
||||
|
||||
// testing realtime decomposition
|
||||
// first compute realtime decompositions [pre-processor not yet available]
|
||||
realtime_shock_decomposition(forecast=8, save_realtime=[5 9 13 17 21 25 29 33 37 41 45 49 53 57 61 65 69 73 77]);
|
||||
realtime_shock_decomposition(forecast=8, save_realtime=[5 9 13 17 21 25 29 33 37 41 45 49 53 57 61 65 69 73 77]) y_obs R_obs pie_obs dq de;
|
||||
|
||||
//realtime pooled
|
||||
plot_shock_decomposition(realtime = 1);
|
||||
plot_shock_decomposition(realtime = 1) y_obs R_obs pie_obs dq de;
|
||||
|
||||
//conditional pooled
|
||||
plot_shock_decomposition(realtime = 2);
|
||||
plot_shock_decomposition(realtime = 2) y_obs R_obs pie_obs dq de;
|
||||
|
||||
// conditional 8-step ahead decomposition, given 1989q4
|
||||
plot_shock_decomposition(detail_plot, realtime = 2, vintage = 29);
|
||||
plot_shock_decomposition(detail_plot, realtime = 2, vintage = 29) y_obs R_obs pie_obs dq de;
|
||||
|
||||
close all,
|
||||
|
||||
//forecast pooled
|
||||
plot_shock_decomposition(realtime = 3);
|
||||
plot_shock_decomposition(realtime = 3) y_obs R_obs pie_obs dq de;
|
||||
|
||||
// forecast 8-step ahead decomposition, given 1989q4
|
||||
plot_shock_decomposition(detail_plot, realtime = 3, vintage = 29);
|
||||
plot_shock_decomposition(detail_plot, realtime = 3, vintage = 29) y_obs R_obs pie_obs dq de;
|
||||
|
||||
close all,
|
||||
|
||||
// now I test annualized variables
|
||||
options_.plot_shock_decomp.q2a=1;
|
||||
options_.plot_shock_decomp.islog=1;
|
||||
// options_.plot_shock_decomp.q2a=1;
|
||||
// options_.plot_shock_decomp.islog=1;
|
||||
plot_shock_decomposition(detail_plot, type = aoa) y;
|
||||
|
||||
plot_shock_decomposition(realtime = 1) y;
|
||||
|
@ -126,14 +139,14 @@ plot_shock_decomposition(realtime = 3, vintage = 29) y;
|
|||
close all
|
||||
|
||||
//test uimenu for groups
|
||||
plot_shock_decomposition(detail_plot, interactive, use_shock_groups = row, type = qoq);
|
||||
plot_shock_decomposition(detail_plot, interactive, realtime = 3, vintage = 29);
|
||||
plot_shock_decomposition(detail_plot, interactive, use_shock_groups = row, type = qoq, plot_init_date=2004Q1) y_obs R_obs pie_obs dq de;
|
||||
plot_shock_decomposition(detail_plot, interactive, realtime = 3, vintage = 29) y_obs R_obs pie_obs dq de;
|
||||
|
||||
close all,
|
||||
|
||||
|
||||
// testing realtime decomposition with fast_realtime option
|
||||
realtime_shock_decomposition(fast_realtime=75);
|
||||
realtime_shock_decomposition(fast_realtime=75) y_obs R_obs pie_obs dq de;
|
||||
|
||||
collect_latex_files;
|
||||
if system(['pdflatex -halt-on-error -interaction=batchmode ' M_.fname '_TeX_binder.tex'])
|
||||
|
|
Loading…
Reference in New Issue