+ 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.
These data are not used in the tests, and take a lot of space in RAM and on
the disk (when the results, e.g. oo_, are saved in <MOD_FILE_NAME>_results.mat).
*Example*
To run all the tests related to the numerical gradient, just type:
~$ make m/gradient
in the tests subfolder. These tests will be done with Matlab. If you want to
test these routines against Octave instead:
~$ make o/gradient
If you want to test against Matlab and Octave:
~$ make gradient.
*Remark*
[1] Integration tests in subfolders can be accessed using the same approach. For
instance:
~/m/observation_trends_and_prefiltering/MCMC
will run all the mod files with matlab in tests/observation_trends_and_prefiltering/MCMC.
[2] Autocompletion works.
[3] Some folders/subfolders are still missing...
(cherry picked from commit 0271f2e8c13d5fe94871fa7aed027047a2cfd36f)
example1long.mod is the benchmark (less than 32 nested parenthesis). The two
other mod files have more than 32 nested parenthesis (rewrite the sum of
discounted ys using the Horner factorization). Both files compare the approaches
discussed in issue #1201 with the benchmark.