diff --git a/matlab/global_initialization.m b/matlab/global_initialization.m index c16e7729b023ff7316a5757c981fb4b221c69f13..d019777169362bee4f1bd988c98985c55624fd30 100644 --- a/matlab/global_initialization.m +++ b/matlab/global_initialization.m @@ -57,6 +57,8 @@ options_.solve_tolf = eps^(1/3); options_.solve_tolx = eps^(2/3); options_.solve_maxit = 500; +options_.mode_check_neighbourhood_size = 0.5; + % Default number of threads for parallelized mex files. options_.threads.kronecker.A_times_B_kronecker_C = 1; options_.threads.kronecker.sparse_hessian_times_B_kronecker_C = 1; diff --git a/matlab/mode_check.m b/matlab/mode_check.m index 36d516c89b7c60c87bc97a22eae9321af58f7526..fe62d6ddd5800416a83e01d9125e3659a255edb0 100644 --- a/matlab/mode_check.m +++ b/matlab/mode_check.m @@ -1,4 +1,43 @@ function mode_check(fun,x,hessian,DynareDataset,DynareOptions,Model,EstimatedParameters,BayesInfo,DynareResults) +% Checks the estimated ML mode or Posterior mode. + +%@info: +%! @deftypefn {Function File} {@var{y}, @var{y_} =} sequential_importance_particle_filter (@var{ReducedForm},@var{Y}, @var{start}, @var{DynareOptions}) +%! @anchor{particle/sequential_importance_particle_filter} +%! @sp 1 +%! Checks the estimated ML mode or Posterior mode by plotting sections of the likelihood/posterior kernel. +%! Each plot shows the variation of the likelihood implied by the variations of a single parameter, ceteris paribus) +%! @sp 2 +%! @strong{Inputs} +%! @sp 1 +%! @table @ @var +%! @item ReducedForm +%! Structure describing the state space model (built in @ref{non_linear_dsge_likelihood}). +%! @item Y +%! p*smpl matrix of doubles (p is the number of observed variables), the (detrended) data. +%! @item start +%! Integer scalar, likelihood evaluation starts at observation 'start'. +%! @item DynareOptions +%! Structure specifying Dynare's options. +%! @end table +%! @sp 2 +%! @strong{Outputs} +%! @sp 1 +%! @table @ @var +%! @item LIK +%! double scalar, value of (minus) the logged likelihood. +%! @item lik +%! smpl*1 vector of doubles, density of the observations at each period. +%! @end table +%! @sp 2 +%! @strong{This function is called by:} +%! @ref{non_linear_dsge_likelihood} +%! @sp 2 +%! @strong{This function calls:} +%! +%! @end deftypefn +%@eod: + % function mode_check(x,fval,hessian,gend,data,lb,ub) % Checks the maximum likelihood mode @@ -18,7 +57,7 @@ function mode_check(fun,x,hessian,DynareDataset,DynareOptions,Model,EstimatedPar % SPECIAL REQUIREMENTS % none -% Copyright (C) 2003-2010 Dynare Team +% Copyright (C) 2003-2010, 2012 Dynare Team % % This file is part of Dynare. % @@ -62,6 +101,8 @@ if TeX fprintf(fidTeX,' \n'); end +ll = DynareOptions.mode_check_neighbourhood_size; + for plt = 1:nbplt, if TeX NAMES = []; @@ -82,9 +123,18 @@ for plt = 1:nbplt, end end xx = x; - l1 = max(BayesInfo.lb(kk),0.5*x(kk)); - l2 = min(BayesInfo.ub(kk),1.5*x(kk)); - z = [l1:(l2-l1)/20:l2]; + l1 = max(BayesInfo.lb(kk),(1-ll)*x(kk)); m1 = 0; + l2 = min(BayesInfo.ub(kk),(1+ll)*x(kk)); + if l2<(1+ll)*x(kk) + l1 = x(kk) - (l2-x(kk)); + m1 = 1; + end + if ~m1 && (l1>(1-ll)*x(kk)) && (x(kk)+(x(kk)-l1)<ub(kk)) + l2 = x(kk) + (x(kk)-l1); + end + z1 = l1:((x(kk)-l1)/10):x(kk); + z2 = x(kk):((l2-x(kk))/10):l2; + z = union(z1,z2); if DynareOptions.mode_check_nolik==0, y = zeros(length(z),2); dy = priordens(xx,BayesInfo.pshape,BayesInfo.p6,BayesInfo.p7,BayesInfo.p3,BayesInfo.p4);