0001
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
0129
0130
0131
0132
0133
0134
0135
0136
0137
0138
0139
0140
0141
0142
0143
0144
0145
0146
0147