Prof. John C Nash
2010-Apr-03 13:39 UTC
[R] Restricting optimisation algorithm's parameter space
> I have a problem. I am using the NLME library to fit a non-linear model. There is a linear component to the model that has a couple parameter values that can only be positive (the coefficients are embedded in a sqrt). When I try and fit the model to data the search algorithm tries to see if a negative value for one of these parameter values will produce an optimal fit. When it does so, it crashes because the equation can not have a negative value because its in a sqrt function. > > QUESTION: How do I restrict the optimisation algorithm's parameter space so it does not search negative values when using GNLM? Are there other Libraries that Fit Non-linear models and allow for one to control the parameter space the search algorithm is restricted by?There are two issues here: 1) Rendering optimization codes resistant to inadmissible parameter vectors (sqrt of negatives etc.) 2) Providing constraints, particularly parameter bounds, on parameter inputs to optimization. There is quite a lot of activity going on right now with optimization in R. With Ravi Varadhan, Kate Mullen and Paul Gilbert, I've been putting some codes on R-forge in the OptimizeR project. Doug Bates has done some important kibbitzing. Stefan Theussl and others have the R Optimization Infrastructure. There are some differences of focus in these projects. For the present poster, I cannot unfortunately help much on GNLM details, but I can say that there are trial versions of methods that will handle bounds (packages minqa, Rcgmin and Rvmmin) that accept bounds, along with existing L-BFGS-B in optim(). Rcgmin and Rvmmin also accept "masks", that is fixed parameters. These routines are about to go into CRAN. It appears GNLM is not a CRAN package. Does it permit substitution of optimizer? That is something those of us working in optimization strongly recommend to package writers i.e., make the optimization a black box so any of a number of tools can be slotted in easily. That way, advances or even minor fixups to routines can be included in tools quickly. However, the "bad parameters" issue, such as trying to take square root of negatives, requires the user or the writer of a package that the user calls to code the objective function to return a flag -- we are looking at an Inf or an NA, we are not yet fully decided on the rules -- AND the optimization package writer to then make it act appropriately. Mary Walker-Smith and I had this in BASIC codes in the 1980s, but we were maybe a bit ahead of folk and it didn't catch on generally. If R users have some nice examples of things crashing because of such issues, I would really like to hear of them off-list. For us, "nice" means pretty small and easy to build into tests. Without such tests -- and users always provide better ones than we can think of -- the code is never as robust. JN