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 (`notExp` ) or positive real numbers (`notLog` ). |

### Value

An array of function values evaluated at the supplied argument values.

### Author(s)

Simon N. Wood simon.wood@r-project.org

### References

http://www.maths.bath.ac.uk/~sw283/

### See Also

`pdTens`

, `pdIdnot`

, `gamm`

### Examples

## Illustrate the notExp function:
## less steep than exp, but still monotonic.
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!

[Package

*mgcv* version 1.3-23

Index]