Dear R-Users, I am interested in the optimal strategy for optim:
Q: How to formulate the optimization problem? Q1: Are there benefits for abs(f(x)) vs (f(x))^2? Q2: Are there any limitations for using abs(...)? Regarding point 1: my feeling is that the gradients should be more robust with the abs(...) method; but I did not test it. Regarding point 2: Obviously, abs(f(x)) is not differentiable. This is a limitation from a mathematical point of view, but the gradient should be still computable using a finite difference method. Are there any other limitations? The question is based on the following example: solving gamma(x) = y for some given y. Function multiroot in package rootSolve fails when y < 1. The version using optim fares much better. However, I had to tweak somewhat the parameters in order to get a higher precision. This made me curious about the optimal strategy; unfortunately, I do not have much experience with optimizations. The example is also available on GitHub: https://github.com/discoleo/R/blob/master/Math/Integrals.Gamma.Inv.R Sincerely, Leonard ### Example: gamma.invN = function(x, x0, lim, ..., ndeps = 1E-5, rtol = 1E-9, gtol = 0.0001, digits = 10) { v = x; if(length(lim) == 1) lim = c(lim - 1 + gtol, lim - gtol); cntr = c(list(...), ndeps = ndeps, pgtol = rtol); # abs(): should provide greater precision than ()^2 when computing the gradients; # param ndeps: needed to improve accuracy; r = optim(x0, \(x) { abs(gamma(x) - v); }, lower = lim[1], upper =lim[2], method = "L-BFGS-B", control = cntr); if( ! is.null(digits)) print(r$par, digits); return(r$par); } ### Example Euler = 0.57721566490153286060651209008240243079; x = gamma.invN(Euler, -3.5, lim = -3) gamma(x) - Euler x = gamma.invN(Euler, -3.9, lim = -3) gamma(x) - Euler [[alternative HTML version deleted]] ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.