Home > . > stoch_simul.m

stoch_simul

PURPOSE ^

Copyright (C) 2001 Michel Juillard

SYNOPSIS ^

function info=stoch_simul(var_list)

DESCRIPTION ^

 Copyright (C) 2001 Michel Juillard

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 % Copyright (C) 2001 Michel Juillard
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_;% Est-ce vraiment utile ? Il y a la mme ligne dans irf...
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       %    close(hh)
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         %                    close(hh);
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       %                close(hh);
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);

Generated on Fri 16-Jun-2006 09:09:06 by m2html © 2003