MoM: Fix typos, improve messages and checks, schur_vec_tol option, dname
parent
2359a1496c
commit
205b87d195
|
@ -116,7 +116,7 @@ else
|
|||
options_mom_.loglinear = false;
|
||||
end
|
||||
|
||||
fprintf('\n==== Method of Moments (%s) Estimation ====\n\n',options_mom_.mom.mom_method)
|
||||
fprintf('\n==== Method of Moments Estimation (%s) ====\n\n',options_mom_.mom.mom_method)
|
||||
|
||||
% -------------------------------------------------------------------------
|
||||
% Step 1a: Prepare options_mom_ structure
|
||||
|
@ -222,9 +222,10 @@ options_mom_ = set_default_option(options_mom_,'lyapunov_doubling_tol',1e-16);
|
|||
options_mom_ = set_default_option(options_mom_,'sylvester_fp',false); % determines whether to use fixed point algorihtm to solve Sylvester equation (gensylv_fp), faster for large scale models
|
||||
options_mom_ = set_default_option(options_mom_,'sylvester_fixed_point_tol',1e-12); % convergence criterion used in the fixed point Sylvester solver
|
||||
options_mom_ = set_default_option(options_mom_,'qz_criterium',1-1e-6); % value used to split stable from unstable eigenvalues in reordering the Generalized Schur decomposition used for solving first order problems
|
||||
% if there are no unit roots one can use 1.0 (or slightly below) which we set as defautl; if they are possible, you may have have multiple unit roots and the accuracy decreases when computing the eigenvalues in lyapunov_symm
|
||||
% if there are no unit roots one can use 1.0 (or slightly below) which we set as default; if they are possible, you may have have multiple unit roots and the accuracy decreases when computing the eigenvalues in lyapunov_symm
|
||||
% Note that unit roots are only possible at first-order, at higher order we set it to 1 in pruned_state_space_system and focus only on stationary observables.
|
||||
options_mom_ = set_default_option(options_mom_,'qz_zero_threshold',1e-6); % value used to test if a generalized eigenvalue is 0/0 in the generalized Schur decomposition
|
||||
options_mom_ = set_default_option(options_mom_,'schur_vec_tol',1e-11); % tolerance level used to find nonstationary variables in Schur decomposition of the transition matrix.
|
||||
if options_mom_.order > 2
|
||||
fprintf('Dynare will use ''k_order_solver'' as the order>2\n');
|
||||
options_mom_.k_order_solver = true;
|
||||
|
@ -338,7 +339,6 @@ options_mom_.risky_steadystate = false; %needed by resol
|
|||
options_mom_.threads = options_.threads; %needed by resol
|
||||
options_mom_.jacobian_flag = true;
|
||||
options_mom_.gstep = options_.gstep;
|
||||
options_mom_.Schur_vec_tol = 1e-11; % used to find nonstationary variables in Schur decomposition of the transition matrix
|
||||
|
||||
% options_mom.dsge_var = false; %needed by check_list_of_variables
|
||||
% options_mom.bayesian_irf = false; %needed by check_list_of_variables
|
||||
|
@ -609,18 +609,15 @@ if ~isempty(dataset_)
|
|||
options_mom_.nobs = dataset_.nobs;
|
||||
end
|
||||
|
||||
% provide info on missing observations
|
||||
if any(any(isnan(dataset_.data)))
|
||||
fprintf('missing observations will be replaced by the sample mean of the corresponding moment')
|
||||
end
|
||||
|
||||
% Check length of data for estimation of second moments
|
||||
if options_mom_.ar > options_mom_.nobs+1
|
||||
error('method_of_moments: Data set is too short to compute second moments');
|
||||
end
|
||||
|
||||
% Get data moments for the method of moments
|
||||
% Provide info on data moments handling
|
||||
fprintf('Computing data moments. Note that NaN values in the moments (due to leads and lags or missing data) are replaced by the mean of the corresponding moment\n');
|
||||
|
||||
% Get data moments for the method of moments
|
||||
[oo_.mom.data_moments, oo_.mom.m_data] = method_of_moments_data_moments(dataset_.data, oo_, M_.matched_moments, options_mom_);
|
||||
|
||||
% Get shock series for SMM and set variance correction factor
|
||||
|
|
|
@ -39,11 +39,11 @@ end
|
|||
|
||||
[nbplt,nr,nc,lr,lc,nstar] = pltorg(length(xparam));
|
||||
|
||||
if ~exist([M_.fname filesep 'graphs'],'dir')
|
||||
mkdir(M_.fname,'graphs');
|
||||
if ~exist([M_.dname filesep 'graphs'],'dir')
|
||||
mkdir(M_.dname,'graphs');
|
||||
end
|
||||
if TeX && any(strcmp('eps',cellstr(options_.graph_format)))
|
||||
fidTeX = fopen([M_.fname, '/graphs/', M_.fname '_MoMCheckPlots.tex'],'w');
|
||||
fidTeX = fopen([M_.dname, '/graphs/', M_.fname '_MoMCheckPlots.tex'],'w');
|
||||
fprintf(fidTeX,'%% TeX eps-loader file generated by method_of_moments_check_plot.m (Dynare).\n');
|
||||
fprintf(fidTeX,['%% ' datestr(now,0) '\n']);
|
||||
fprintf(fidTeX,' \n');
|
||||
|
@ -165,12 +165,12 @@ for plt = 1:nbplt
|
|||
text(0.25,0.5,'log-post')
|
||||
text(0.69,0.5,'log-lik kernel')
|
||||
end
|
||||
dyn_saveas(hh,[M_.fname, '/graphs/', M_.fname '_MoMCheckPlots' int2str(plt) ],options_.nodisplay,options_.graph_format);
|
||||
dyn_saveas(hh,[M_.dname, '/graphs/', M_.fname '_MoMCheckPlots' int2str(plt) ],options_.nodisplay,options_.graph_format);
|
||||
if TeX && any(strcmp('eps',cellstr(options_.graph_format)))
|
||||
% TeX eps loader file
|
||||
fprintf(fidTeX,'\\begin{figure}[H]\n');
|
||||
fprintf(fidTeX,'\\centering \n');
|
||||
fprintf(fidTeX,'\\includegraphics[width=%2.2f\\textwidth]{%s_MoMCheckPlots%s}\n',options_.figures.textwidth*min(k/nc,1),[M_.fname, '/graphs/',M_.fname],int2str(plt));
|
||||
fprintf(fidTeX,'\\includegraphics[width=%2.2f\\textwidth]{%s_MoMCheckPlots%s}\n',options_.figures.textwidth*min(k/nc,1),[M_.dname, '/graphs/',M_.fname],int2str(plt));
|
||||
fprintf(fidTeX,'\\caption{Method of Moments check plots.}');
|
||||
fprintf(fidTeX,'\\label{Fig:MoMCheckPlots:%s}\n',int2str(plt));
|
||||
fprintf(fidTeX,'\\end{figure}\n');
|
||||
|
@ -181,4 +181,4 @@ if TeX && any(strcmp('eps',cellstr(options_.graph_format)))
|
|||
fclose(fidTeX);
|
||||
end
|
||||
|
||||
save([M_.fname filesep 'graphs' filesep M_.fname '_MoMCheckPlots_data.mat'],'mcheck');
|
||||
save([M_.dname filesep 'graphs' filesep M_.fname '_MoMCheckPlots_data.mat'],'mcheck');
|
||||
|
|
|
@ -60,6 +60,16 @@ eps_value = options_mom_.mom.se_tolx;
|
|||
if strcmp(options_mom_.mom.mom_method,'GMM') && options_mom_.mom.analytic_standard_errors
|
||||
fprintf('\nComputing standard errors using analytical derivatives of moments\n');
|
||||
D = oo_.mom.model_moments_params_derivs; %already computed in objective function via get_perturbation_params.m
|
||||
idx_nan = find(any(isnan(D)));
|
||||
if any(idx_nan)
|
||||
for i = idx_nan
|
||||
fprintf('No standard errors available for parameter %s\n',get_the_name(i,options_mom_.TeX, M_, estim_params_, options_mom_))
|
||||
end
|
||||
warning('There are NaN in the analytical Jacobian of Moments. Check your bounds and/or priors, or use a different optimizer.')
|
||||
Asympt_Var = NaN(length(xparam),length(xparam));
|
||||
SE_values = NaN(length(xparam),1);
|
||||
return
|
||||
end
|
||||
else
|
||||
fprintf('\nComputing standard errors using numerical derivatives of moments\n');
|
||||
for i=1:dim_params
|
||||
|
|
Loading…
Reference in New Issue