(1) Added more checks on the content of the provided mode file compared the the list of declared parameters (the condition on the number of parameters is not strong enough).
(2) Added a mechanism to adapt the content of the mode file if possible. For instance, if the estimated parameters are a subset of the parameters in the mode file, we only need to discard some of the parameters in the mode file.
(3) Added output argument in dynare_estimation_init, which returns the hessian matrix (hh) with the estimated mode.
If the mode_file option was used, xparam1 was reloaded from the
mode-file after the initial checks, sometimes leading to very cryptic
errors. Now the initial checks already load the correct parameter
vector.
Replace them by equivalents in M_ (and an extra one: M_.dynamic).
IMPORTANT POINT: oo_.dr.npred used to count both purely backward and mixed/both
variables. This was the cause of lots of confusion. The new M_.npred only
counts purely backward variables.
We now have the following indentities:
M_.npred + M_.nboth + M_.nfwrd + M_.nstatic = M_.endo_nbr
M_.nspred = M_.npred + M_.nboth
M_.nsfwrd = M_.nfwrd + M_.nboth
M_.ndynamic = M_.npred + M_.nboth + M_.nfwrd
1) allow to compute derivatives starting from NUMERICAL derivatives of jacobian and steady state: this has a minor cost in accuracy and allow apply without errors identification and estimation with numerical derivatives;
2) added trap in dynare_estimation_init: if steadystate changes param values, automaticly shifts to numerical derivs of jacoban and steady state + analytic derivatives of all the rest;
3) bug fixes for 2nd order derivatives w.r.t. model parameters;
oo_.posterior.optimization.mode oo_.posterior.optimization.variance
oo_.posterior.metropolis.mean oo_.posterior.metropolis.variance as
aggregate arrays in addition to previous storage variable by variable
is contradictory with diffuse_filter or unit_root_variables
declaration. Models with non-stationary variables, but only stationary
observed variables need diffuse_filter option and make a useless call
to kalman_filter_d (this seems better than trying to distinguish these
rare cases)