Alternative to log parameterization for variance components
The functions are typically used to ensure that smoothing parameters are
positive, but the notExp2
is not monotonic: rather it cycles between
‘effective zero’ and ‘effective infinity’ as its argument changes. The
notLog2
is the inverse function of the notExp2
only over an
interval centered on zero.
Parameterizations using these functions ensure that estimated smoothing
parameters remain positive, but also help to ensure that the likelihood is
never indefinite: once a working parameter pushes a smoothing parameter below
‘effetive zero’ or above ‘effective infinity’ the cyclic nature of the
notExp2
causes the likelihood to decrease, where otherwise it might
simply have flattened.
This parameterization is really just a numerical trick, in order to get
lme
to fit gamm
models, without failing due to indefiniteness.
Note in particular that asymptotic results on the likelihood/REML criterion are
not invalidated by the trick,
unless parameter estimates end up close to the effective zero or effective
infinity: but if this is the case then the asymptotics would also have been invalid
for a conventional monotonic parameterization.
This reparameterization was made necessary by some modifications to the
underlying optimization method in lme
introduced in nlme 3.1-62. It is
possible that future releases will return to the notExp
parameterization.
Note that you can reset ‘effective zero’ and ‘effective infinity’: see below.
notExp2(x,d=.Options$mgcv.vc.logrange,b=1/d) notLog2(x,d=.Options$mgcv.vc.logrange,b=1/d)
x |
Argument array of real numbers ( |
d |
the range of |
b |
determines the period of the cycle of |
An array of function values evaluated at the supplied argument values.
Simon N. Wood simon.wood@r-project.org
## Illustrate the notExp2 function: require(mgcv) x <- seq(-50,50,length=1000) op <- par(mfrow=c(2,2)) plot(x,notExp2(x),type="l") lines(x,exp(x),col=2) plot(x,log(notExp2(x)),type="l") lines(x,log(exp(x)),col=2) # redundancy intended x <- x/4 plot(x,notExp2(x),type="l") lines(x,exp(x),col=2) plot(x,log(notExp2(x)),type="l") lines(x,log(exp(x)),col=2) # redundancy intended par(op)
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.