0001
0002
0003 function info=stoch_simul(var_list)
0004 global M_ options_ oo_
0005
0006 global it_
0007 options_ = set_default_option(options_,'TeX',0);
0008 options_ = set_default_option(options_,'order',2);
0009 options_ = set_default_option(options_,'linear',0);
0010 if options_.linear
0011 options_.order = 1;
0012 end
0013 options_ = set_default_option(options_,'ar',5);
0014 options_ = set_default_option(options_,'irf',40);
0015 options_ = set_default_option(options_,'relative_irf',0);
0016 options_ = set_default_option(options_,'dr_algo',0);
0017 options_ = set_default_option(options_,'simul_algo',0);
0018 options_ = set_default_option(options_,'drop',100);
0019 if options_.order == 1
0020 options_.replic = 1;
0021 else
0022 options_ = set_default_option(options_,'replic',50);
0023 end
0024 options_ = set_default_option(options_,'nomoments',0);
0025 options_ = set_default_option(options_,'nocorr',0);
0026 options_ = set_default_option(options_,'simul_seed',[]);
0027 options_ = set_default_option(options_,'hp_filter',0);
0028 options_ = set_default_option(options_,'hp_ngrid',512);
0029 options_ = set_default_option(options_,'simul',0);
0030 options_ = set_default_option(options_,'periods',0);
0031 options_ = set_default_option(options_,'noprint',0);
0032
0033 TeX = options_.TeX;
0034
0035 iter_ = max(options_.periods,1);
0036 if M_.exo_nbr > 0
0037 oo_.exo_simul= ones(iter_ + M_.maximum_lag + M_.maximum_lead,1) * oo_.exo_steady_state';
0038 end
0039
0040 check_model;
0041
0042 [oo_.dr, info] = resol(oo_.steady_state,0);
0043
0044 if info(1)
0045 print_info(info);
0046 return
0047 end
0048
0049 if ~options_.noprint
0050 disp(' ')
0051 disp('MODEL SUMMARY')
0052 disp(' ')
0053 disp([' Number of variables: ' int2str(M_.endo_nbr)])
0054 disp([' Number of stochastic shocks: ' int2str(M_.exo_nbr)])
0055 disp([' Number of state variables: ' ...
0056 int2str(length(find(oo_.dr.kstate(:,2) <= M_.maximum_lag+1)))])
0057 disp([' Number of jumpers: ' ...
0058 int2str(length(find(oo_.dr.kstate(:,2) == M_.maximum_lag+2)))])
0059 disp([' Number of static variables: ' int2str(oo_.dr.nstatic)])
0060 my_title='MATRIX OF COVARIANCE OF EXOGENOUS SHOCKS';
0061 labels = deblank(M_.exo_names);
0062 headers = strvcat('Variables',labels);
0063 lh = size(labels,2)+2;
0064 table(my_title,headers,labels,M_.Sigma_e,lh,10,6);
0065 disp(' ')
0066 disp_dr(oo_.dr,options_.order,var_list);
0067 end
0068
0069 if options_.simul == 0 & options_.nomoments == 0
0070 disp_th_moments(oo_.dr,var_list);
0071 elseif options_.simul == 1
0072 if options_.periods == 0
0073 error('STOCH_SIMUL error: number of periods for the simulation isn''t specified')
0074 end
0075 if options_.periods < options_.drop
0076 disp(['STOCH_SIMUL error: The horizon of simulation is shorter' ...
0077 ' than the number of observations to be DROPed'])
0078 return
0079 end
0080 oo_.endo_simul = simult(repmat(oo_.dr.ys,1,M_.maximum_lag),oo_.dr);
0081 dyn2vec;
0082 if options_.nomoments == 0
0083 disp_moments(oo_.endo_simul,var_list);
0084 end
0085 end
0086
0087
0088
0089 if options_.irf
0090 n = size(var_list,1);
0091 if n == 0
0092 n = M_.endo_nbr;
0093 ivar = [1:n]';
0094 var_list = M_.endo_names;
0095 if TeX
0096 var_listTeX = M_.endo_names_tex;
0097 end
0098 else
0099 ivar=zeros(n,1);
0100 if TeX
0101 var_listTeX = [];
0102 end
0103 for i=1:n
0104 i_tmp = strmatch(var_list(i,:),M_.endo_names,'exact');
0105 if isempty(i_tmp)
0106 error (['One of the specified variables does not exist']) ;
0107 else
0108 ivar(i) = i_tmp;
0109 if TeX
0110 var_listTeX = strvcat(var_listTeX,deblank(M_.endo_names_tex(i_tmp,:)));
0111 end
0112 end
0113 end
0114 end
0115 if TeX
0116 fidTeX = fopen([M_.fname '_IRF.TeX'],'w');
0117 fprintf(fidTeX,'%% TeX eps-loader file generated by stoch_simul.m (Dynare).\n');
0118 fprintf(fidTeX,['%% ' datestr(now,0) '\n']);
0119 fprintf(fidTeX,' \n');
0120 end
0121 olditer = iter_;
0122 SS(M_.exo_names_orig_ord,M_.exo_names_orig_ord)=M_.Sigma_e+1e-14*eye(M_.exo_nbr);
0123 cs = transpose(chol(SS));
0124 tit(M_.exo_names_orig_ord,:) = M_.exo_names;
0125 if TeX
0126 titTeX(M_.exo_names_orig_ord,:) = M_.exo_names_tex;
0127 end
0128 for i=1:M_.exo_nbr
0129 if SS(i,i) > 1e-13
0130 y=irf(oo_.dr,cs(M_.exo_names_orig_ord,i), options_.irf, options_.drop, ...
0131 options_.replic, options_.order);
0132 if options_.relative_irf
0133 y = 100*y/cs(i,i);
0134 end
0135 irfs = [];
0136 mylist = [];
0137 if TeX
0138 mylistTeX = [];
0139 end
0140 for j = 1:n
0141 if max(y(ivar(j),:)) - min(y(ivar(j),:)) > 1e-10
0142 irfs = cat(1,irfs,y(ivar(j),:));
0143 mylist = strvcat(mylist,deblank(var_list(j,:)));
0144 if TeX
0145 mylistTeX = strvcat(mylistTeX,deblank(var_listTeX(j,:)));
0146 end
0147 end
0148 end
0149 number_of_plots_to_draw = size(irfs,1);
0150 [nbplt,nr,nc,lr,lc,nstar] = pltorg(number_of_plots_to_draw);
0151 if nbplt == 0
0152 elseif nbplt == 1
0153 if options_.relative_irf
0154 hh = figure('Name',['Relative response to' ...
0155 ' orthogonalized shock to ' tit(i,:)]);
0156 else
0157 hh = figure('Name',['Orthogonalized shock to' ...
0158 ' ' tit(i,:)]);
0159 end
0160 for j = 1:number_of_plots_to_draw
0161 subplot(nr,nc,j);
0162 plot(1:options_.irf,transpose(irfs(j,:)),'-k','linewidth',1);
0163 hold on
0164 plot([1 options_.irf],[0 0],'-r','linewidth',0.5);
0165 hold off
0166 xlim([1 options_.irf]);
0167 title(deblank(mylist(j,:)),'Interpreter','none');
0168 assignin('base',[deblank(mylist(j,:)) '_' deblank(tit(i,:))],transpose(irfs(j,:)));
0169 end
0170 eval(['print -depsc2 ' M_.fname '_IRF_' deblank(tit(i,:))]);
0171 eval(['print -dpdf ' M_.fname '_IRF_' deblank(tit(i,:))]);
0172 saveas(hh,[M_.fname '_IRF_' deblank(tit(i,:)) '.fig']);
0173 if TeX
0174 fprintf(fidTeX,'\\begin{figure}[H]\n');
0175 for j = 1:number_of_plots_to_draw
0176 fprintf(fidTeX,['\\psfrag{%s}[1][][0.5][0]{$%s$}\n'],deblank(mylist(j,:)),deblank(mylistTeX(j,:)));
0177 end
0178 fprintf(fidTeX,'\\centering \n');
0179 fprintf(fidTeX,'\\includegraphics[scale=0.5]{%s_IRF_%s}\n',M_.fname,deblank(tit(i,:)));
0180 fprintf(fidTeX,'\\caption{Impulse response functions (orthogonalized shock to $%s$).}',titTeX(i,:));
0181 fprintf(fidTeX,'\\label{Fig:IRF:%s}\n',deblank(tit(i,:)));
0182 fprintf(fidTeX,'\\end{figure}\n');
0183 fprintf(fidTeX,' \n');
0184 end
0185
0186 else
0187 for fig = 1:nbplt-1
0188 if options_.relative_irf == 1
0189 hh = figure('Name',['Relative response to orthogonalized shock' ...
0190 ' to ' tit(i,:) ' figure ' int2str(fig)]);
0191 else
0192 hh = figure('Name',['Orthogonalized shock to ' tit(i,:) ...
0193 ' figure ' int2str(fig)]);
0194 end
0195 for plt = 1:nstar
0196 subplot(nr,nc,plt);
0197 plot(1:options_.irf,transpose(irfs((fig-1)*nstar+plt,:)),'-k','linewidth',1);
0198 hold on
0199 plot([1 options_.irf],[0 0],'-r','linewidth',0.5);
0200 hold off
0201 xlim([1 options_.irf]);
0202 title(deblank(mylist((fig-1)*nstar+plt,:)),'Interpreter','none');
0203 assignin('base',[deblank(mylist((fig-1)*nstar+plt,:)) '_' deblank(tit(i,:))],transpose(irfs((fig-1)*nstar+plt,:)));
0204 end
0205 eval(['print -depsc2 ' M_.fname '_IRF_' deblank(tit(i,:)) int2str(fig)]);
0206 eval(['print -dpdf ' M_.fname '_IRF_' deblank(tit(i,:)) int2str(fig)]);
0207 saveas(hh,[M_.fname '_IRF_' deblank(tit(i,:)) int2str(fig) '.fig']);
0208 if TeX
0209 fprintf(fidTeX,'\\begin{figure}[H]\n');
0210 for j = 1:nstar
0211 fprintf(fidTeX,['\\psfrag{%s}[1][][0.5][0]{$%s$}\n'],deblank(mylist((fig-1)*nstar+j,:)),deblank(mylistTeX((fig-1)*nstar+j,:)));
0212 end
0213 fprintf(fidTeX,'\\centering \n');
0214 fprintf(fidTeX,'\\includegraphics[scale=0.5]{%s_IRF_%s%s}\n',M_.fname,deblank(tit(i,:)),int2str(fig));
0215 if options_.relative_irf
0216 fprintf(fidTeX,['\\caption{Relative impulse response' ...
0217 ' functions (orthogonalized shock to $%s$).}'],deblank(titTeX(i,:)));
0218 else
0219 fprintf(fidTeX,['\\caption{Impulse response functions' ...
0220 ' (orthogonalized shock to $%s$).}'],deblank(titTeX(i,:)));
0221 end
0222 fprintf(fidTeX,'\\label{Fig:BayesianIRF:%s:%s}\n',deblank(tit(i,:)),int2str(fig));
0223 fprintf(fidTeX,'\\end{figure}\n');
0224 fprintf(fidTeX,' \n');
0225 end
0226
0227 end
0228 hh = figure('Name',['Orthogonalized shock to ' tit(i,:) ' figure ' int2str(nbplt) '.']);
0229 m = 0;
0230 for plt = 1:number_of_plots_to_draw-(nbplt-1)*nstar;
0231 m = m+1;
0232 subplot(lr,lc,m);
0233 plot(1:options_.irf,transpose(irfs((nbplt-1)*nstar+plt,:)),'-k','linewidth',1);
0234 hold on
0235 plot([1 options_.irf],[0 0],'-r','linewidth',0.5);
0236 hold off
0237 xlim([1 options_.irf]);
0238 title(deblank(mylist((nbplt-1)*nstar+plt,:)),'Interpreter','none');
0239 assignin('base',[deblank(mylist((nbplt-1)*nstar+plt,:)) '_' deblank(tit(i,:))],transpose(irfs((nbplt-1)*nstar+plt,:)));
0240 end
0241 eval(['print -depsc2 ' M_.fname '_IRF_' deblank(tit(i,:)) int2str(nbplt)]);
0242 eval(['print -dpdf ' M_.fname '_IRF_' deblank(tit(i,:)) int2str(nbplt)]);
0243 saveas(hh,[M_.fname '_IRF_' deblank(tit(i,:)) int2str(nbplt) '.fig']);
0244 if TeX
0245 fprintf(fidTeX,'\\begin{figure}[H]\n');
0246 for j = 1:m
0247 fprintf(fidTeX,['\\psfrag{%s}[1][][0.5][0]{$%s$}\n'],deblank(mylist((nbplt-1)*nstar+j,:)),deblank(mylistTeX((nbplt-1)*nstar+j,:)));
0248 end
0249 fprintf(fidTeX,'\\centering \n');
0250 fprintf(fidTeX,'\\includegraphics[scale=0.5]{%s_IRF_%s%s}\n',M_.fname,deblank(tit(i,:)),int2str(nbplt));
0251 if options_.relative_irf
0252 fprintf(fidTeX,['\\caption{Relative impulse response functions' ...
0253 ' (orthogonalized shock to $%s$).}'],deblank(titTeX(i,:)));
0254 else
0255 fprintf(fidTeX,['\\caption{Impulse response functions' ...
0256 ' (orthogonalized shock to $%s$).}'],deblank(titTeX(i,:)));
0257 end
0258 fprintf(fidTeX,'\\label{Fig:IRF:%s:%s}\n',deblank(tit(i,:)),int2str(nbplt));
0259 fprintf(fidTeX,'\\end{figure}\n');
0260 fprintf(fidTeX,' \n');
0261 end
0262
0263 end
0264 end
0265 end
0266 iter_ = olditer;
0267 if TeX
0268 fprintf(fidTeX,' \n');
0269 fprintf(fidTeX,'%% End Of TeX file. \n');
0270 fclose(fidTeX);
0271 end
0272 end
0273
0274
0275
0276 [omega,f] = UnivariateSpectralDensity(oo_.dr,var_list);