Thank you very much for your quick response:
your arguments are clear and perfectly understandable.
I realize that my first message was a bit unclear, so I would like to rephrase it.
Indeed, if you have an analytical hessian you should:
* During optimization iterations: pass on that hessian to a 2nd order method such as Newton method
* Once optimization is finished: calculate the inverse of that hessian
However, if you don't have access to the analytical hessian, gradients and/or hessians are estimated via finite differences.
(My original mail was concerned with that specific situation.)
When using bfgs, you have 2 alternatives for calculating the inverse of the hessian at the end of the optimization:
1) calculate the inverse of the finite difference approximation of the hessian
2) use the finite difference approximation of the inverse of the hessian (which is calculated at each bfgs iteration)
When I mentioned 'robustness' in my original mail, I meant there are situation where 1) returns non invertible
(or non SDP) hessians but 2) returns a (finite) inverse of hessian.
Concerning your question on packages, I am deeply sorry but I cannot remember where I read this trick for the first time, all I know, is that I am using it in all my own MLE codes when I compute standard errors. Since then, I must have convinced myself that the trick is used everywhere.