Functions for better-than-log positive parameterization
It is common practice in statistical optimization to use log-parameterizations when a
parameter ought to be positive. i.e. if an optimization parameter a
should be non-negative then
we use a=exp(b)
and optimize with respect to the unconstrained parameter b
. This often works
well, but it does imply a rather limited working range for b
: using 8 byte doubles, for example,
if b
's magnitude gets much above 700 then a
overflows or underflows. This can cause
problems for numerical optimization methods.
notExp
is a monotonic function for mapping the real line into the positive real line with much less
extreme underflow and overflow behaviour than exp
. It is a piece-wise function, but is continuous
to second derivative: see the source code for the exact definition, and the example below to see what it
looks like.
notLog
is the inverse function of notExp
.
notExp(x) notLog(x)
x |
Argument array of real numbers ( |
An array of function values evaluated at the supplied argument values.
Simon N. Wood simon.wood@r-project.org
## Illustrate the notExp function: ## less steep than exp, but still monotonic. require(mgcv) x <- -100:100/10 op <- par(mfrow=c(2,2)) plot(x,notExp(x),type="l") lines(x,exp(x),col=2) plot(x,log(notExp(x)),type="l") lines(x,log(exp(x)),col=2) # redundancy intended x <- x/4 plot(x,notExp(x),type="l") lines(x,exp(x),col=2) plot(x,log(notExp(x)),type="l") lines(x,log(exp(x)),col=2) # redundancy intended par(op) range(notLog(notExp(x))-x) # show that inverse works!
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.