Skip to content

Optim() returns wrong maximum

2 messages · Ole Christensen, Martin Schlather

#
Dear R-devel

During the last half a year I have several times encountered the
following problem with optim() when using method= "L-BFGS-B". 

The function return a value which is clearly not the maximum (seen from
printing the value each time the function is called). Some output is
shown below.

A few things I have observed (as I remember it):

a. The problem seems to occur when the last function call is for a value
on the boundary.

b. The problem also seems to occur more frequently in cases where the
function providing the gradient is mis-specified.


I have deliberately not provided code such that you can reproduce the
behaviour. The reason being that these functions are complicated  and
involves a lot of input (data, fixed parameters, etc).


Someone might spot the problem based on the information I have given
(possibly a bug in optim() ?).
In case not, I would like to ask if anyone has observed similar problems
?. 
This may help me to construct a more simple example, which I could then
submit with reproducible code.



### facts  #########
[1] -1785.949
[1] -2310.573
[1] -1778.394
[1] -1765.151
[1] -1757.967
[1] -1752.537
[1] -1750.824
[1] -1748.693
[1] -1748.076
[1] -1742.308
[1] -1705.763
[1] -1742.279
[1] -1733.924
[1] -1722.277
[1] -1713.366
[1] -1705.763
[1] -1747.436
[1] -1733.532
[1] -1721.908
[1] -1713.091
[1] -1707.203
[1] -1704.112
[1] -1702.010
[1] -1700.100
[1] -1697.855
[1] -1713.081
[1] -1697.219
[1] -1696.692
[1] -1696.681
[1] -1697.401
[1] -1696.057
[1] -1698.833
[1] -1695.841
[1] -1696.371
[1] -1695.786
[1] -1695.781
[1] -1695.78
[1] -1695.780
[1] -1695.779
[1] -1695.776
[1] -1695.768
[1] -1696.822
[1] -1695.762
[1] -1695.719
[1] -1695.689
[1] -1695.658
[1] -1695.632
[1] -1695.643
[1] -1695.628
[1] -1697.267
$par
 [1] 0.007369536 0.032623958 1.025064715 0.315420992 0.288083186
0.008728551
 [7] 1.016895527 0.978822785 0.552299864 1.016390800 0.000100000

$value
[1] -1697.267

$counts
function gradient 
      50       50 

$convergence
[1] 0

$message
[1] "CONVERGENCE: REL_REDUCTION_OF_F <= FACTR*EPSMCH"


###########

Here ``likeli.time.log'' and ``gradient.time.log'' are functions,
``temp.censor'' is a list with input variables for the two functions
(data, fixed parameters, etc.), and the parameter space is of dimension
11.

Note that value returned is clearly not the maximum, but optim() reports
convergence.
_                
platform i686-pc-linux-gnu
arch     i686             
os       linux-gnu        
system   i686, linux-gnu  
status                    
major    1                
minor    5.1              
year     2002             
month    06               
day      17               
language R 




Cheers Ole
#
Hi Ole,

I have encountered similar problems.
Even more, the parameters are not always 
within the given bounds (for method= "L-BFGS-B")
The values are then only an epsilon outside,
but it can be very disturbing nonetheless.

Cheers,
Martin

PS: the MLE algorithm in my contributed package 
    `RandomFields' is written such that it
    gets around with these two problems of optim
Ole Christensen wrote: