Optim() returns wrong maximum
Ole Christensen
o.christensen@lancaster.ac.uk
Tue, 30 Jul 2002 10:45:24 +0100
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
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._