0001
0002
0003 function olr(var_list,olr_inst,obj_var,W)
0004 global M_ options_ oo_
0005
0006 options_.order = 1;
0007 options_ = set_default_option(options_,'ar',5);
0008 options_ = set_default_option(options_,'irf',40);
0009 options_ = set_default_option(options_,'dr_algo',0);
0010 options_ = set_default_option(options_,'simul_algo',0);
0011 options_ = set_default_option(options_,'drop',100);
0012 options_ = set_default_option(options_,'replic',1);
0013 options_ = set_default_option(options_,'nomoments',0);
0014 options_ = set_default_option(options_,'nocorr',0);
0015 options_ = set_default_option(options_,'simul_seed',[]);
0016 options_ = set_default_option(options_,'hp_filter',0);
0017 options_ = set_default_option(options_,'hp_ngrid',512);
0018 options_ = set_default_option(options_,'simul',0);
0019 options_ = set_default_option(options_,'olr_beta',1);
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
0027 make_ex_;
0028
0029 oo_.dr=olr1(oo_.steady_state,options_.dr_algo,olr_inst,options_.olr_beta,obj_var,W);
0030
0031 disp(' ')
0032 disp('OPTIMAL LINEAR REGULATOR')
0033 disp(' ')
0034 disp('MODEL SUMMARY')
0035 disp(' ')
0036 disp([' Number of variables: ' int2str(M_.endo_nbr-size(olr_inst,1))])
0037 disp([' Number of stochastic shocks: ' int2str(M_.exo_nbr)])
0038 disp([' Number of instruments ' int2str(size(olr_inst,1))])
0039
0040
0041
0042
0043 disp([' Number of static variables: ' int2str(oo_.dr.nstatic)])
0044 my_title='MATRIX OF COVARIANCE OF EXOGENOUS SHOCKS';
0045 labels = deblank(M_.exo_name);
0046 headers = strvcat('Variables',labels);
0047 lh = size(labels,2)+2;
0048 table(my_title,headers,labels,M_.Sigma_e,lh,10,6);
0049 disp(' ')
0050 disp_dr(oo_.dr,options_.order,var_list);
0051 if options_.order == 1 & options_.simul == 0 & options_.nomoments == 0
0052 disp_th_moments(oo_.dr,var_list);
0053 elseif options_.simul == 1 | options_.nomoments == 0
0054 if options_.periods == 0
0055 error('OLR error: number of periods for the simulation isn''t specified')
0056 end
0057 if options_.periods < options_.drop
0058 disp(['OLR error: The horizon of simulation is shorter' ...
0059 ' than the number of observations to be DROPed'])
0060 return
0061 end
0062
0063 oo_.y_simul = simult(repmat(oo_.dr.ys,1,M_.maximum_lag),oo_.dr);
0064 dyn2vec;
0065 if options_.nomoments == 0
0066 disp_moments(oo_.y_simul,var_list);
0067 end
0068 end
0069
0070 n = size(var_list,1);
0071 if n == 0
0072 n = length(oo_.dr.order_var);
0073 ivar = [1:n]';
0074 var_list = M_.endo_names;
0075 else
0076 ivar=zeros(n,1);
0077 for i=1:n
0078 i_tmp = strmatch(var_list(i,:),M_.endo_names,'exact');
0079 if isempty(i_tmp)
0080 error (['One of the specified variables does not exist']) ;
0081 else
0082 ivar(i) = i_tmp;
0083 end
0084 end
0085 end
0086
0087 if n < 13 & options_.irf > 0
0088 if n == 1
0089 nr = 1;
0090 nc = 1;
0091 elseif n == 2
0092 nr = 1;
0093 nc = 2;
0094 elseif n <= 4
0095 nr = 2;
0096 nc = 2;
0097 elseif n <= 6
0098 nr = 2;
0099 nc = 3;
0100 elseif n <= 9
0101 nr = 3;
0102 nc = 3;
0103 elseif n <= 12
0104 nr = 3;
0105 nc = 4;
0106 end
0107 olditer = options_.periods;
0108 if options_.order == 1
0109 options_.replic = 1;
0110 else
0111 if options_.replic == 0
0112 options_.replic = 50;
0113 end
0114 end
0115 for i = 1:M_.exo_nbr
0116 figure('Name',['Shock to ' M_.exo_name(i,:)]);
0117 y=irf(oo_.dr,M_.exo_name(i,:),sqrt(M_.Sigma_e(i,i)), options_.irf, options_.drop, options_.replic, options_.order);
0118 m = 1;
0119 for j = 1:n
0120 if max(y(ivar(j),:))-min(y(ivar(j),:)) > 1e-10
0121 subplot(nr,nc,m);
0122 plot([y(ivar(j),:)']);
0123 title(var_list(j,:),'Interpreter','none');
0124 assignin('base',[deblank(var_list(j,:)) '_' deblank(M_.exo_name(i,:))],y(ivar(j),:)');
0125 m = m + 1;
0126 end
0127 end
0128
0129 end
0130 options_.periods = olditer;
0131 end
0132
0133