I am using the following special interface from NLSolversBase, to minimize a function.
function fg!(F, G, x) common_calc(…) if !(G == nothing) # mutating calculations specific to g! end if !(F == nothing) # calculations specific to f return f end end
In particular, my code that use Optim.jl is:
ODJ = OnceDifferentiable(only_fg!((F, G, theta)->fg!(F, G, theta, x1,x2)), θ) results = optimize(ODJ, θ, LBFGS(),Optim.Options(store_trace = true))
How can I get the hessian to estimate standard errors using the gradient that I already defined in only_fg! ? or is there another faster way? Since the problem has almost 100 parameters efficiency is important.
Currently, I am saving the gradient in another function to obtain the Hessian, and then the standard errors:
grad! = theta -> gradient_function!(theta, x1,x2) Jinv = ForwardDiff.jacobian(grad!, results.minimizer) V = inv(Jinv)/n