[R] Order of methods for optimx
Marc Girondot
marc_grt at yahoo.fr
Sun Dec 31 15:03:58 CET 2017
Dear R-er,
For a non-linear optimisation, I used optim() with BFGS method but it
stopped regularly before to reach a true mimimum. It was not a problem
with limit of iterations, just a local minimum. I was able sometimes to
reach better minimum using several rounds of optim().
Then I moved to optimx() to do the different optim rounds automatically
using "Nelder-Mead" and "BFGS" methods
I find a huge time difference using system.time() based on the order of
these both methods:
> snb # "Nelder-Mead" and "BFGS"
user system elapsed
1021.656 0.200 1021.695
> sbn # "BFGS" and "Nelder-Mead"
user system elapsed
3140.096 0.384 3139.728
But optimx() with "Nelder-Mead" and "BFGS" stops in local minimum:
> o_mu2p1$value
[1] 2297.557
whereas "BFGS" and "Nelder-Mead" stops in better model (not sure if it
is a global minimum, but it is better):
> o_mu2p1$value
[1] 2297.305
####################
My questions are:
Are my findings common and documented (order of methods giving non
consistant results) or are they specific to the model I try to fit ?
If it is known problem, where I can find the best advice about order of
methods ?
####################
To reproduce what I said:
install.packages("http://www.ese.u-psud.fr/epc/conservation/CRAN/HelpersMG.tar.gz",
repos=NULL, type="source")
install.packages("http://www.ese.u-psud.fr/epc/conservation/CRAN/phenology.tar.gz",
repos=NULL, type="source")
library("phenology")
library("car")
library("optimx")
library("numDeriv")
ECFOCF_2002 <- TableECFOCF(MarineTurtles_2002)
snb <- system.time(
o_mu2p1_nb <- fitCF(par = structure(c(0.244863062899293,
43.5578630363601,
4.94764539004454,
129.606771856887,
-0.323749593604171,
1.37326091618759),
.Names = c("mu1", "size1", "mu2",
"size2", "p", "OTN")),
method = c("Nelder-Mead", "BFGS"),
data=ECFOCF_2002, hessian = TRUE)
)
sbn <- system.time(
o_mu2p1_bn <- fitCF(par = structure(c(0.244863062899293,
43.5578630363601,
4.94764539004454,
129.606771856887,
-0.323749593604171,
1.37326091618759),
.Names = c("mu1", "size1", "mu2",
"size2", "p", "OTN")),
method = c("BFGS", "Nelder-Mead"),
data=ECFOCF_2002, hessian = TRUE)
)
snb
o_mu2p1_nb$value
sbn
o_mu2p1_bn$value
More information about the R-help
mailing list