Home > . > dynare_MC.m

dynare_MC

PURPOSE ^

SYNOPSIS ^

function dynare_MC(var_list_)

DESCRIPTION ^

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 function dynare_MC(var_list_)
0002 
0003 global M_ options_ oo_ estim_params_ 
0004 global bayestopt_
0005 
0006 options_.varlist = var_list_;
0007 options_.lgyidx2varobs = zeros(size(M_.endo_names,1),1);
0008 for i = 1:size(M_.endo_names,1)
0009   tmp = strmatch(deblank(M_.endo_names(i,:)),options_.varobs,'exact');
0010   if ~isempty(tmp)
0011     options_.lgyidx2varobs(i,1) = tmp;
0012   end
0013 end  
0014 
0015 options_ = set_default_option(options_,'first_obs',1);
0016 options_ = set_default_option(options_,'prefilter',0);
0017 options_ = set_default_option(options_,'presample',0);
0018 options_ = set_default_option(options_,'lik_algo',1);
0019 options_ = set_default_option(options_,'lik_init',1);
0020 options_ = set_default_option(options_,'nograph',0);
0021 options_ = set_default_option(options_,'mh_conf_sig',0.90);
0022 options_ = set_default_option(options_,'mh_replic',20000);
0023 options_ = set_default_option(options_,'mh_drop',0.5);
0024 options_ = set_default_option(options_,'mh_jscale',0.2);
0025 options_ = set_default_option(options_,'mh_init_scale',2*options_.mh_jscale);
0026 options_ = set_default_option(options_,'mode_file','');
0027 options_ = set_default_option(options_,'mode_compute',4);
0028 options_ = set_default_option(options_,'mode_check',0);
0029 options_ = set_default_option(options_,'prior_trunc',1e-10);
0030 options_ = set_default_option(options_,'mh_mode',1);     
0031 options_ = set_default_option(options_,'mh_nblck',2);    
0032 options_ = set_default_option(options_,'load_mh_file',0);
0033 options_ = set_default_option(options_,'nodiagnostic',0);
0034 options_ = set_default_option(options_,'loglinear',0);
0035 options_ = set_default_option(options_,'unit_root_vars',[]);
0036 options_ = set_default_option(options_,'XTick',[]);
0037 options_ = set_default_option(options_,'XTickLabel',[]);
0038 options_ = set_default_option(options_,'bayesian_irf',0);
0039 options_ = set_default_option(options_,'bayesian_th_moments',0);
0040 options_ = set_default_option(options_,'TeX',0);
0041 options_ = set_default_option(options_,'irf',0);
0042 options_ = set_default_option(options_,'relative_irf',0);
0043 options_ = set_default_option(options_,'order',1);
0044 options_ = set_default_option(options_,'ar',5);
0045 options_ = set_default_option(options_,'dr_algo',0);
0046 options_ = set_default_option(options_,'linear',0);
0047 options_ = set_default_option(options_,'drop',0);
0048 options_ = set_default_option(options_,'replic',1);
0049 options_ = set_default_option(options_,'hp_filter',0);
0050 options_ = set_default_option(options_,'forecast',0);
0051 options_ = set_default_option(options_,'smoother',0);
0052 options_ = set_default_option(options_,'moments_varendo',0);
0053 options_ = set_default_option(options_,'filtered_vars',0);
0054 options_ = set_default_option(options_,'kalman_algo',1);
0055 options_ = set_default_option(options_,'kalman_tol',10^(-12));
0056 options_ = set_default_option(options_,'posterior_mode_estimation',1);
0057 options_ = set_default_option(options_,'MaxNumberOfBytes',1e6);
0058 options_ = set_default_option(options_,'xls_sheet','');
0059 options_ = set_default_option(options_,'xls_range','');
0060 
0061 %% Add something to the parser ++>
0062 M_.dname = M_.fname; % The user should be able to choose another name
0063                      % for the directory...
0064 
0065 
0066 pnames         = ['     ';'beta ';'gamm ';'norm ';'invg ';'unif ';'invg2'];
0067 n_varobs     = size(options_.varobs,1);
0068 
0069 [xparam1,estim_params_,bayestopt_,lb,ub] = set_prior(estim_params_);
0070 
0071 options_.mh_replic = 0;
0072 
0073 bounds = prior_bounds(bayestopt_);
0074 bounds(:,1)=max(bounds(:,1),lb);
0075 bounds(:,2)=min(bounds(:,2),ub);
0076 
0077 if any(xparam1 < bounds(:,1)) | any(xparam1 > bounds(:,2))
0078   find(xparam1 < bounds(:,1))
0079   find(xparam1 > bounds(:,2))
0080   error('Initial parameter values are outside parameter bounds')
0081 end
0082 lb = bounds(:,1);
0083 ub = bounds(:,2);
0084 bayestopt_.lb = lb;
0085 bayestopt_.ub = ub;
0086 
0087 if ~isfield(options_,'trend_coeffs')
0088   bayestopt_.with_trend = 0;
0089 else
0090   bayestopt_.with_trend = 1;
0091   bayestopt_.trend_coeff = {};
0092   trend_coeffs = options_.trend_coeffs;
0093   nt = length(trend_coeffs);
0094   for i=1:n_varobs
0095     if i > length(trend_coeffs)
0096       bayestopt_.trend_coeff{i} = '0';
0097     else
0098       bayestopt_.trend_coeff{i} = trend_coeffs{i};
0099     end
0100   end
0101 end
0102 
0103 bayestopt_.penalty = 1e8;    % penalty
0104 
0105 nvx = estim_params_.nvx;
0106 nvn = estim_params_.nvn;
0107 ncx = estim_params_.ncx;
0108 ncn = estim_params_.ncn;
0109 np  = estim_params_.np ;
0110 nx  = nvx+nvn+ncx+ncn+np;
0111 
0112 %% Static solver
0113 if exist([M_.fname '_steadystate'])
0114   bayestopt_.static_solve = [M_.fname '_steadystate'];
0115 else
0116   bayestopt_.static_solve = 'dynare_solve';
0117 end
0118 
0119 dr = set_state_space([]);
0120 
0121 %% Initialization with unit-root variables
0122 if ~isempty(options_.unit_root_vars)
0123   n_ur = size(options_.unit_root_vars,1);
0124   i_ur = zeros(n_ur,1);
0125   for i=1:n_ur
0126     i1 = strmatch(deblank(options_.unit_root_vars(i,:)),M_.endo_names(dr.order_var,:),'exact');
0127     if isempty(i1)
0128       error('Undeclared variable in unit_root_vars statement')
0129     end
0130     i_ur(i) = i1;
0131   end
0132   if M_.maximum_lag > 1
0133     l1 = flipud([cumsum(M_.lead_lag_incidence(1:M_.maximum_lag-1,dr.order_var),1);ones(1,M_.endo_nbr)]);
0134     n1 = nnz(l1);
0135     bayestopt_.Pinf = zeros(n1,n1);
0136     l2 = find(l1');
0137     l3 = zeros(M_.endo_nbr,M_.maximum_lag);
0138     l3(i_ur,:) = l1(:,i_ur)';
0139     l3 = l3(:);
0140     i_ur1 = find(l3(l2));
0141     i_stable = ones(M_.endo_nbr,1);
0142     i_stable(i_ur) = zeros(n_ur,1);
0143     i_stable = find(i_stable);
0144     bayestopt_.Pinf(i_ur1,i_ur1) = diag(ones(1,length(i_ur1)));
0145     bayestopt_.i_var_stable = i_stable;
0146     l3 = zeros(M_.endo_nbr,M_.maximum_lag);
0147     l3(i_stable,:) = l1(:,i_stable)';
0148     l3 = l3(:);
0149     bayestopt_.i_T_var_stable = find(l3(l2));
0150   else
0151     n1 = M_.endo_nbr;
0152     bayestopt_.Pinf = zeros(n1,n1);
0153     bayestopt_.Pinf(i_ur,i_ur) = diag(ones(1,length(i_ur)));
0154     l1 = ones(M_.endo_nbr,1);
0155     l1(i_ur,:) = zeros(length(i_ur),1);
0156     bayestopt_.i_T_var_stable = find(l1);
0157   end
0158   options_.lik_init = 3;
0159 end % if ~isempty(options_.unit_root_vars)
0160 
0161 if isempty(options_.datafile)
0162   error('ESTIMATION: datafile option is missing')
0163 end
0164 
0165 if isempty(options_.varobs)
0166   error('ESTIMATION: VAROBS is missing')
0167 end
0168 
0169 
0170 %% If jscale isn't specified for an estimated parameter, use
0171 %% global option options_.jscale, set to 0.2, by default
0172 k = find(isnan(bayestopt_.jscale));
0173 bayestopt_.jscale(k) = options_.mh_jscale;
0174 
0175 %% Read and demean data
0176 rawdata = read_variables(options_.datafile,options_.varobs,[],options_.xls_sheet,options_.xls_range);
0177 
0178 k = [];
0179 k1 = [];
0180 for i=1:n_varobs
0181   k = [k strmatch(deblank(options_.varobs(i,:)),M_.endo_names(dr.order_var,:), ...
0182           'exact')];
0183   k1 = [k1 strmatch(deblank(options_.varobs(i,:)),M_.endo_names, 'exact')];
0184 end
0185 
0186 bayestopt_.mf     = k;
0187 bayestopt_.mfys = k1;
0188 options_ = set_default_option(options_,'nobs',size(rawdata,1)-options_.first_obs+1);
0189 gend = options_.nobs;
0190 
0191 rawdata = rawdata(options_.first_obs:options_.first_obs+gend-1,:);
0192 if options_.loglinear == 1
0193   rawdata = log(rawdata);
0194 end
0195 if options_.prefilter == 1
0196   bayestopt_.mean_varobs = mean(rawdata,1);
0197   data = transpose(rawdata-ones(gend,1)*bayestopt_.mean_varobs);
0198 else
0199   data = transpose(rawdata);
0200 end
0201 
0202 if ~isreal(rawdata)
0203   error(['There are complex values in the data. Probably  a wrong' ...
0204      ' transformation'])
0205 end
0206 
0207 nvx  = estim_params_.nvx;
0208 nvn  = estim_params_.nvn;
0209 ncx  = estim_params_.ncx;
0210 ncn  = estim_params_.ncn;
0211 np   = estim_params_.np ;
0212 npar = nvx+nvn+ncx+ncn+np;
0213 offset = npar-np;
0214 fname_=M_.fname;
0215 
0216 options_ = set_default_option(options_,'opt_gsa',1);
0217 options_gsa_ = options_.opt_gsa;
0218 
0219 if options_gsa_.pprior,
0220   load([fname_,'_prior'])
0221   namfile=[fname_,'_prior'];
0222 else
0223   load([fname_,'_mc'])
0224   namfile=[fname_,'_mc'];
0225 end
0226 load(options_.mode_file)
0227 %%
0228 %%
0229 %%
0230 x=[lpmat0(istable,:) lpmat(istable,:)];
0231 clear lpmat lpmat0 istable iunstable egg yys T
0232 B = size(x,1);
0233 if M_.maximum_lag > 1
0234     l1 = flipud([cumsum(M_.lead_lag_incidence(1:M_.maximum_lag-1,dr.order_var),1);ones(1,M_.endo_nbr)]);
0235     n1 = nnz(l1);
0236 else
0237     n1 = M_.endo_nbr;
0238 end
0239 stock_smooth = zeros(gend,n1,B);
0240 stock_filter = zeros(gend+1,n1,B);
0241 stock_ys = zeros(M_.endo_nbr,B);
0242 %%
0243 h = waitbar(0,'MC smoother ...');
0244 for b=1:B
0245   deep = x(b,:);
0246   %deep(1:offset) = xparam1(1:offset);
0247   logpo2(b) = DsgeLikelihood(deep',gend,data);
0248   [atT,innov,measurement_error,filtered_state_vector,ys,trend_coeff] = DsgeSmoother(deep,gend,data);
0249   stock_smooth(:,:,b)=atT';
0250   stock_filter(:,:,b)=filtered_state_vector';
0251   stock_ys(:,b)=ys;
0252   waitbar(b/B,h,['MC smoother ...',num2str(b),'/',num2str(B)]);
0253 end
0254 close(h)
0255 
0256 save(namfile,'x','logpo2','stock_smooth','stock_filter','stock_ys','-append')

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