[R] Optim() and Instability

Berend Hasselman
Sat, 14 Nov 2015 18:18:43 -0000

> On 14 Nov 2015, at 17:02, Berend Hasselman <bhh at xs4all.nl> wrote:
>
>>
>> On 14 Nov 2015, at 16:15, Lorenzo Isella <lorenzo.isella at
gmail.com> wrote:
>>
>> 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
>>
>
> The initial parameter values for the percentage error variant are not very
good.
> If you print min.perc_error(data,par_ini2) you can see that.
>
> Try
>
> par_ini2 <- c(1e-4,1e-4,1e-4)
>
> and you'll get results that are closer to each other.
> The rest is up to you.

Try this at the end of your script:

# Original
min.perc_error(data,par_ini2)

# Much better
par_ini3 <- c(1e-4,1e-4,1e-4)
min.perc_error(data,par_ini3)
mm_def3 <-optim(par = par_ini3
                  , min.perc_error, data = data)

mm_bfgs3 <-optim(par = par_ini3
                  , min.perc_error, data = data, method="BFGS")

print("fit parameters with the default algorithms and the second seed
")
print(mm_def3$par)
min.perc_error(data,mm_def3$par)
print("fit parameters with the BFGS algorithms and the second seed  ")
print(mm_bfgs3$par)
min.perc_error(data,mm_bfgs3$par)

and rejoice!

Berend