notExp                 package: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:

     <URL: 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!

