notExp {mgcv} | R Documentation |
Functions for better-than-log positive parameterization
Description
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
.
The major use of these functions was originally to provide more robust
pdMat
classes for lme
for use by gamm
. Currently
the notExp2
and notLog2
functions are used in
their place, as a result of changes to the nlme optimization routines.
Usage
notExp(x)
notLog(x)
Arguments
x |
Argument array of real numbers ( |
Value
An array of function values evaluated at the supplied argument values.
Author(s)
Simon N. Wood simon.wood@r-project.org
References
https://www.maths.ed.ac.uk/~swood34/
See Also
Examples
## 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!