R: Functions for better-than-log positive parameterization

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.4-1.1 Index]