+ Code factorization.
+ Added an option for using the penalized objective when computing numerically
the hessian at the mode.
Previous behaviour (introduced with penalty_hessian routine) was to compute the
hessian matrix at the mode with the penalized objective function (instead of
the original objective function). This behaviour hides problematic situations,
where the computed hessian (using the original objective) would not be full
rank. For instance, if the estimation ends up with a parameter on (or very
close to) the bounds of its possible values (which is often not a desirable
outcome), the estimated posterior variance would be zero for this
parameter (with the original objective) because the hessian is not finite in
this direction, while the posterior variance would be positive if the penalized
objective is used instead. But this estimate would not be reliable by
construction of the penalty which is quite ad-hoc (more fundamentally I do not
think that there exists any rational for approximating the covariance matrix
with the inverse of the hessian matrix if the mode is on the border of the set
of possible values).
This commit restore the behaviour previous to 2446ab02ba.
An option is available for computing the hessian with the penalized
objective function.
- handle sub lists of individual samplers
- split checks in dynare_estimation_init.m and before running posterior_sampler.m [invhess checks]
- posterior sampler options checks moved from initial_estimation_checks.m to check_posterior_sampler_options.m
- added use_mh_covariance_matrix to imh and rwmh
- slice re-sets mode_compute=0 cova_compute=0
- updated test function
There was no check in dynare_estimation_init.m whether the steady state solved, but the noconstant option was set nevertheless. This gave rise to cases where a steady state file returned 0 for the observables, but the steady state did not exits. Due to later using use_calibration, this problem with the initial values was not detected, but the observation equation featured no constant although it should. The solution is to move the use_calibration option before the first steady state computation and then issue an error if the parameterization does not work
This options relates to alternative numerical hessian computations:
optim=('Hessian',1) is the default dynare numeric Hessian
optim=('Hessian',0) is the outer product gradient
optim=('Hessian',2) is the 'mixed' outer product gradient, where diagonal elements using second order derivation formula,
Both 0 and 2 cases require univariate filters, to ensure using maximum number of individual densities.
- also moves several options to subfields of options structure
- allows setting options of newrat
- requires newrat to have compatible kalman_algo specified in order for it to not change options_
- explicitly disallows using analytical derivation with numerical gradient (before the numerical gradient request was overwritten)
- always outputs hessian returned by optimizer (empty matrix if not computed) and deletes subsequent overwriting if cova_compute=0
The check for running the smoother on the model at the posterior mean is only based on whether the smoother option was set. But filtered_vars is a separate option. If not also checking whether Bayesian filtered variables have already been requested, oo_.FilteredVariables will contain both "ML" and Bayesian fields, which is confusing. The change only saves the filtered variables from the classical smoother if the user did not use Bayesian estimation.
* Second and third positional arguments after the name of the
estimated parameter in the estimated_params block are only
considered in the optimization stage (not in the MCMC)
* Do not store bounds in bayestopt_, because bounds do not always
reflect restrictions implied by prior shapes.
* prior_bounds routine returns a structure (with fields lb and ub)
instead of a matrix.
Because xparam1 is used by the smoother, but xparam was set to the posterior mean, the non-Bayesian smoother results were based on the parameters at the mode, which are stored in xparam1.
- Suppresses spurious output from dynare_estimation_1.m
- Removes unset output argument from dynare_estimation_init.m (which seems to be totally unused as it was not set at all and nobody reported any crashes)
- Corrects header of dynare_estimation_init.m
- in dr_block.m and ep_residuals.m the option was hardcoded and disabled
- for csminwel1.m, no verbosity option exists anymore, thus definitions preceeding calls to it were redundant as was the options_.osr.verbose
MCMC convergence diagnostics should be computed even if mh_replic is less than 2000, provided that the total number of iterations is greater than 2000 (if option load_mh_file is used).
Details about the MCMC can be loaded in the workspace with the following command:
>> internals --load-mh-history <NAME_OF_THE_MOD_FILE>
under the name mcmc_informations, or printed in the command window, using the following
command:
>> internals --display-mh-history <NAME_OF_THE_MOD_FILE>