[R] Optim() and Instability

Lorenzo Isella
Sat, 14 Nov 2015 15:15:18 -0000

Dear All,
I am using optim() for a relatively simple task: a linear model where
instead of minimizing the sum of the squared errors, I minimize the sum
of the squared relative errors.
However, I notice that the default algorithm is very sensitive to the
choice of the initial fit parameters, whereas I get much more stable
(and therefore better?) results with the BFGS algorithm.
I would like to have some feedback on this (perhaps I made a mistake
somewhere).
I provide a small self-contained example.
You can download a tiny data set from the link

https://www.dropbox.com/s/tmbj3os4ev3d4y8/data-instability.csv?dl=0

whereas I paste the script I am using at the end of the email.
Any feedback is really appreciated.
Many thanks

Lorenzo

################################################################

min.perc_error <- function(data, par) {
              with(data, sum(((par[1]*x1 + par[2]*x2+par[3]*x3 -
              y)/y)^2))
	                   }

par_ini1 <- c(.3,.1, 1e-3)

par_ini2 <- c(1,1, 1)


data <- read.csv("data-instability.csv")

mm_def1 <-optim(par = par_ini1
                    , min.perc_error, data = data)

mm_bfgs1 <-optim(par = par_ini1
                    , min.perc_error, data = data, method="BFGS")

print("fit parameters with the default algorithms and the first seed
")
print(mm_def1$par)

print("fit parameters with the BFGS algorithms and the first seed  ")
print(mm_bfgs1$par)



mm_def2 <-optim(par = par_ini2
                    , min.perc_error, data = data)

mm_bfgs2 <-optim(par = par_ini2
                    , min.perc_error, data = data, method="BFGS")




print("fit parameters with the default algorithms and the second seed
")
print(mm_def2$par)

print("fit parameters with the BFGS algorithms and the second seed  ")
print(mm_bfgs2$par)