From Sebastian.Meyer at ifspm.uzh.ch  Wed Sep 26 11:13:49 2012
From: Sebastian.Meyer at ifspm.uzh.ch (Sebastian Meyer)
Date: Wed, 26 Sep 2012 11:13:49 +0200
Subject: [Rd] non-differentiable evaluation points in nlminb(),
	follow-up of PR#15052
Message-ID: <5062C74D.3010002@ifspm.uzh.ch>

This is a follow-up question for PR#15052
<http://bugs.r-project.org/bugzilla3/show_bug.cgi?id=15052>

There is another thing I would like to discuss wrt how nlminb() should
proceed with NAs. The question is: What would be a successful way to
deal with an evaluation point of the objective function where the
gradient and the hessian are not well defined?

If the gradient and the hessian both return NA values (assuming R <
r60789, e.g. R 2.15.1), and also if both return +Inf values, nlminb
steps to an NA parameter vector.
Here is a really artificial one-dimensional example for demonstration:

f <- function (x) {
  cat("evaluating f(", x, ")\n")
  if(is.na(x)) {Inf   # to prevent an infinite loop for R < r60789
  } else abs(x)
}
gr <- function (x) if (abs(x) < 1e-5) Inf else sign(x)
hess <- function (x) matrix(if (abs(x) < 1e-5) Inf else 0, 1L, 1L)
trace(gr)
trace(hess)
nlminb(5, f, gr, hess, control=list(eval.max=30, trace=1))

Thus, if nlminb reaches a point where the derivatives are not defined,
optimization is effectively lost. Is there a way to deal with such
points in nlminb? Otherwise, the objective function is doomed to
emergency stop() if it receives NA parameters because nlminb won't pick
up courage - regardless of the following return value of the objective
function.
As far as I would assess the situation, nlminb is currently not capable
of optimizing objective functions with non-differentiable points.

Best regards,
  Sebastian Meyer

-- 
Sebastian Meyer
Division of Biostatistics
Institute of Social and Preventive Medicine
University of Zurich



[Rd] non-differentiable evaluation points in nlminb(), follow-up of PR#15052
Sebastian Meyer