Home > . > osr.m

osr

PURPOSE ^

Copyright (C) 2001 Michel Juillard

SYNOPSIS ^

function osr(var_list,params,W)

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 osr(var_list,params,W)
0004   global M_ options_ oo_  
0005 
0006   options_.order = 1;
0007   options_.linear = 1;
0008   options_ = set_default_option(options_,'ar',5);
0009   options_ = set_default_option(options_,'irf',40);
0010   options_ = set_default_option(options_,'dr_algo',0);
0011   options_ = set_default_option(options_,'simul_algo',0);
0012   options_ = set_default_option(options_,'drop',100);
0013   options_ = set_default_option(options_,'replic',1);
0014   options_ = set_default_option(options_,'nomoments',0);
0015   options_ = set_default_option(options_,'nocorr',0);
0016   options_ = set_default_option(options_,'simul_seed',[]);
0017   options_ = set_default_option(options_,'hp_filter',0);
0018   options_ = set_default_option(options_,'hp_ngrid',512);
0019   options_ = set_default_option(options_,'simul',0);
0020   options_ = set_default_option(options_,'periods',1);
0021   if options_.simul & ~isempty(options_.periods) & options_.periods == 0
0022     options_.periods = options_.periods;
0023   end
0024 
0025   options_.periods = max(options_.periods,1);
0026   options_.periods = options_.periods;
0027   
0028   make_ex_;
0029 
0030   disp(' ')
0031   disp('OPTIMAL SIMPLE RULE')
0032   disp(' ')
0033   oo_.dr = osr1(params,W);
0034   disp('MODEL SUMMARY')
0035   disp(' ')
0036   disp(['  Number of variables:         ' int2str(M_.endo_nbr)])
0037   disp(['  Number of stochastic shocks: ' int2str(M_.exo_nbr)])
0038   disp(['  Number of state variables:   ' ...
0039     int2str(length(find(oo_.dr.kstate(:,2) <= M_.maximum_lag+1)))])
0040   disp(['  Number of jumpers:           ' ...
0041     int2str(length(find(oo_.dr.kstate(:,2) == M_.maximum_lag+2)))])
0042   disp(['  Number of static variables:  ' int2str(oo_.dr.nstatic)])
0043   my_title='MATRIX OF COVARIANCE OF EXOGENOUS SHOCKS';
0044   labels = deblank(M_.exo_name);
0045   headers = strvcat('Variables',labels);
0046   lh = size(labels,2)+2;
0047   table(my_title,headers,labels,M_.Sigma_e,lh,10,6);
0048   disp(' ')
0049   disp_dr(oo_.dr,options_.order,var_list);
0050   if options_.order == 1 & options_.simul == 0 & options_.nomoments == 0
0051     disp_th_moments(oo_.dr,var_list);
0052   elseif options_.simul == 1 | options_.nomoments == 0
0053     if options_.periods == 0
0054       error('OSR error: number of periods for the simulation isn''t specified')
0055     end
0056     if options_.periods < options_.drop
0057       disp(['OSR error: The horizon of simulation is shorter' ...
0058         ' than the number of observations to be DROPed'])
0059       return
0060     end
0061     
0062     oo_.y_simul = simult(repmat(oo_.dr.ys,1,M_.maximum_lag),oo_.dr);
0063     dyn2vec;
0064     if options_.nomoments == 0
0065       disp_moments(oo_.y_simul,var_list);
0066     end
0067   end
0068   
0069   n = size(var_list,1);
0070   if n == 0
0071     n = length(oo_.dr.order_var);
0072     ivar = [1:n]';
0073     var_list = M_.endo_names;
0074   else
0075     ivar=zeros(n,1);
0076     for i=1:n
0077       i_tmp = strmatch(var_list(i,:),M_.endo_names,'exact');
0078       if isempty(i_tmp)
0079           error (['One of the specified variables does not exist']) ;
0080       else
0081     ivar(i) = i_tmp;
0082       end
0083     end
0084   end
0085 
0086   if n < 13 & options_.irf > 0
0087     if n == 1
0088       nr = 1;
0089       nc = 1;
0090     elseif n == 2
0091       nr = 1;
0092       nc = 2;
0093     elseif n <= 4
0094       nr = 2;
0095       nc = 2;
0096     elseif n <= 6
0097       nr = 2;
0098       nc = 3;
0099     elseif n <= 9
0100       nr = 3;
0101       nc = 3;
0102     elseif n <= 12
0103       nr = 3;
0104       nc = 4;
0105     end
0106     olditer = options_.periods;
0107     if options_.order == 1
0108       options_.replic = 1;
0109     else
0110       if options_.replic == 0
0111     options_.replic = 50;
0112       end
0113     end
0114     for i = 1:M_.exo_nbr
0115       figure('Name',['Shock to ' M_.exo_name(i,:)]);
0116       y=irf(oo_.dr,M_.exo_name(i,:),sqrt(M_.Sigma_e(i,i)), options_.irf, options_.drop, options_.replic, options_.order);
0117       for j = 1:n
0118     subplot(nr,nc,j);
0119     plot([y(ivar(j),:)']);
0120     title(var_list(j,:),'Interpreter','none');
0121     assignin('base',[deblank(var_list(j,:)) '_' deblank(M_.exo_name(i,:))],y(ivar(j),:)');
0122       end
0123     
0124     end
0125     options_.periods = olditer;
0126   end
0127       
0128 % 01/10/01 FC oo_.dr and oo_.y_simul made global
0129 % 02/20/01 MJ oo_.steady_state removed from calling sequence for simult (all in oo_.dr)
0130 % 02/23/01 MJ added dyn2vec()
0131 % 06/24/01 MJ steady -> steady_
0132 % 09/24/01 MJ oo_.dr made global
0133 % 08/28/02 MJ added var_list
0134 % 10/09/02 MJ no simulation and theoretical moments for order 1
0135 % 10/14/02 MJ added plot of IRFs
0136 % 10/30/02 MJ options_ are now a structure
0137 % 01/01/03 MJ added dr_algo
0138 % 01/09/03 MJ set default values for options_ (correct absence of autocorr
0139 %             when order == 1)
0140 % 01/12/03 MJ removed call to steady_ as already checked in resol()
0141 % 01/31/03 MJ make IRF global with varname_shockname
0142 % 02/09/03 MJ oo_.steady_state reset with value declared in initval after computations
0143 % 02/18/03 MJ removed above change. oo_.steady_state shouldn't be affected by
0144 %             computations in this function
0145 %             new option SIMUL computes a stochastic simulation and save
0146 %             results in oo_.y_simul and via dyn2vec
0147 % 04/03/03 MJ corrected bug for simulation with M_.maximum_lag > 1

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