While developing updates to optimization tools for R (I was behind 3 of
the 5 codes in optim(), but Brian Ripley did the implementation), I've
been seeing this kind of error when the objective function cannot be
computed so returns NA. Examples: attempts to divide by 0 or sqrt(-ve)
or log(0). A crude work-around is to detect bad situations when
evaluating the function and return a very large number e.g., something
using .Machine$double.xmax (I used this divided by 4 or so to avoid
troubles if algorithms try to do some arithmetic, as in gradient based
routines).
Most routines will "bounce off" such a value, but the scaling of the
surface is messed up so it is not always efficient. A better way is if
optimization codes can handle a "failed evaluation" flag and simply back
off from a step or whatever is needed, but in R non tools do this as yet
-- I'm hoping to put this in some of my codes using returned values
larger than some threshhold as the "flag". My 1980s BASIC codes had this
(and bounds and masks). However, it takes time and ....
For information, I'd like to know if this turns out to be the problem,
as it would raise the priority for working on such issues.
JN
Message: 57
Date: Mon, 19 Oct 2009 17:48:12 +0200
From: "Reynaerts, Jo" <jo.reynae...@econ.kuleuven.be>
Subject: [R] (no subject)
To: "r-help@r-project.org" <r-help@r-project.org>
Message-ID:
<603d249cbe0b304490d0f774142b8e0f01cdcb9a4...@econsrvex6.econ.kuleuven.ac.be>
Content-Type: text/plain
Dear R users
I have the following problem when calling optim() to minimize a function "f.obj" (= outer
loop) that calls another function "f.con" (a contraction mapping, = inner loop). It
seems to me that it is a numerical problem that I currently fail to take into account when coding.
Calling optim(), for the first few iterations of the outer loop, everything
seems fine; the contraction mapping is calculated in each run. However, after
a number of outer loop iterations, an error occurs and the following message is
displayed:
Error in while (max.dev >= tol.in) { :
missing value where TRUE/FALSE needed
The previous conditional statement ensures that the iteration in the inner loop
should run as long as max.dev <- max(abs(x - x.in)) is greater than the inner loop
tolerance level (tol.in <- 1E-9), where x is computed by the contraction mapping
using x.in. I used different stopping rules and tolerance levels, but this gives the
same result.
As I said, I think it's a numerical problem. Has anyone had similar
experiences using optim() and could you give some coding advice?
Thanks in advance,
Jo Reynaerts
______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.