From o.christensen@lancaster.ac.uk  Tue Jul 30 10:45:24 2002
From: o.christensen@lancaster.ac.uk (Ole Christensen)
Date: Tue, 30 Jul 2002 10:45:24 +0100
Subject: Optim() returns wrong maximum
Message-ID: <3D466034.ED2C7EFF@lancs.ac.uk>

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  #########
 
> lik.t.cen.log <- optim(par = sqrt(lik.log$par)+0.1, fn=likeli.time.log, gr=gradient.time.log, method= "L-BFGS-B", control = list(fnscale=-1), lower = rep(0.0001,11), temp.list=temp.censor)
[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
> 

> lik.t.cen.log
$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.





> version
         _                
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



-- 
Ole F. Christensen
Department of Mathematics and Statistics
Fylde College, Lancaster University 
Lancaster, LA1 4YF, England
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-devel-request@stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._


Optim() returns wrong maximum
Ole Christensen