[R] Bad optimization solution
RAVI VARADHAN
rvaradhan at jhmi.edu
Tue May 8 16:23:08 CEST 2007
Paul,
The problem lies neither with R nor with numercial methods. The onus is always on the user to understand what the numerical schemes can do and what they can't do. One should never blindly take the results given by a numerical scheme and run with it. In your example, the optimization method is doing what it was designed to do: to find a critical point of a function where the gradient is zero. It is your responsibility to ensure that the result makes sense, and if it doesn't, to understand why it doesn't make sense. In your problem, maxima ((1,0) and (0,1)) lie on the boundary of the parameter space, and the gradient at the maxima (defined as the limit from within the domain) are clearly not zero. Another problem with your example is that the hessian for your function is singular, it has eigenvalues of 0 and 2. In short, there is no substitute to using your analytic powers!
Ravi.
----- Original Message -----
From: Paul Smith <phhs80 at gmail.com>
Date: Tuesday, May 8, 2007 4:33 am
Subject: Re: [R] Bad optimization solution
To: R-help <r-help at stat.math.ethz.ch>
> It seems that there is here a problem of reliability, as one never
> knows whether the solution provided by R is correct or not. In the
> case that I reported, it is fairly simple to see that the solution
> provided by R (without any warning!) is incorrect, but, in general,
> that is not so simple and one may take a wrong solution as a correct
> one.
>
> Paul
>
>
> On 5/8/07, Ravi Varadhan <rvaradhan at jhmi.edu> wrote:
> > Your function, (x1-x2)^2, has zero gradient at all the starting
> values such
> > that x1 = x2, which means that the gradient-based search methods will
> > terminate there because they have found a critical point, i.e. a
> point at
> > which the gradient is zero (which can be a maximum or a minimum or
> a saddle
> > point).
> >
> > However, I do not why optim converges to the boundary maximum, when
> analytic
> > gradient is supplied (as shown by Sundar).
> >
> > Ravi.
> >
> > ----------------------------------------------------------------------------
> > -------
> >
> > Ravi Varadhan, Ph.D.
> >
> > Assistant Professor, The Center on Aging and Health
> >
> > Division of Geriatric Medicine and Gerontology
> >
> > Johns Hopkins University
> >
> > Ph: (410) 502-2619
> >
> > Fax: (410) 614-9625
> >
> > Email: rvaradhan at jhmi.edu
> >
> > Webpage:
> >
> >
> >
> > ----------------------------------------------------------------------------
> > --------
> >
> >
> > -----Original Message-----
> > From: r-help-bounces at stat.math.ethz.ch
> > [ On Behalf Of Paul Smith
> > Sent: Monday, May 07, 2007 6:26 PM
> > To: R-help
> > Subject: Re: [R] Bad optimization solution
> >
> > On 5/7/07, Paul Smith <phhs80 at gmail.com> wrote:
> > > > I think the problem is the starting point. I do not remember the
> > details
> > > > of the BFGS method, but I am almost sure the (.5, .5) starting
> point is
> > > > suspect, since the abs function is not differentiable at 0. If
> you
> > perturb
> > > > the starting point even slightly you will have no problem.
> > > >
> > > > "Paul Smith"
> > > > <phhs80 at gmail.com
> > > > >
> > To
> > > > Sent by: R-help <r-help at stat.math.ethz.ch>
> > > > r-help-bounces at st
> > cc
> > > > at.math.ethz.ch
> > > >
> > Subject
> > > > [R] Bad optimization solution
> > > > 05/07/2007 04:30
> > > > PM
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > > Dear All
> > > >
> > > > I am trying to perform the below optimization problem, but getting
> > > > (0.5,0.5) as optimal solution, which is wrong; the correct solution
> > > > should be (1,0) or (0,1).
> > > >
> > > > Am I doing something wrong? I am using R 2.5.0 on Fedora Core 6
> (Linux).
> > > >
> > > > Thanks in advance,
> > > >
> > > > Paul
> > > >
> > > > ------------------------------------------------------
> > > > myfunc <- function(x) {
> > > > x1 <- x[1]
> > > > x2 <- x[2]
> > > > abs(x1-x2)
> > > > }
> > > >
> > > >
> > optim(c(0.5,0.5),myfunc,lower=c(0,0),upper=c(1,1),method="L-BFGS-B",control=
> > list(fnscale=-1))
> > >
> > > Yes, with (0.2,0.9), a correct solution comes out. However, how can
> > > one be sure in general that the solution obtained by optim is correct?
> > > In ?optim says:
> > >
> > > Method '"L-BFGS-B"' is that of Byrd _et. al._ (1995) which allows
> > > _box constraints_, that is each variable can be given a lower
> > > and/or upper bound. The initial value must satisfy the
> > > constraints. This uses a limited-memory modification of the
> BFGS
> > > quasi-Newton method. If non-trivial bounds are supplied, this
> > > method will be selected, with a warning.
> > >
> > > which only demands that "the initial value must satisfy the constraints".
> >
> > Furthermore, X^2 is everywhere differentiable and notwithstanding the
> > reported problem occurs with
> >
> > myfunc <- function(x) {
> > x1 <- x[1]
> > x2 <- x[2]
> > (x1-x2)^2
> > }
> >
> > optim(c(0.2,0.2),myfunc,lower=c(0,0),upper=c(1,1),method="L-BFGS-B",control=
> > list(fnscale=-1))
> >
> > Paul
> >
> > ______________________________________________
> > R-help at stat.math.ethz.ch mailing list
> >
> > PLEASE do read the posting guide
> > and provide commented, minimal, self-contained, reproducible code.
> >
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
>
> PLEASE do read the posting guide
> and provide commented, minimal, self-contained, reproducible code.
More information about the R-help
mailing list