slp.mgcv {slp} | R Documentation |
Generate a Basis Matrix for Discrete Prolate Spheroidal (Slepian) Sequences
Description
Generate the basis matrix for a particular N, W
Slepian sequence
family member, with the additional property that the smoother captures/passes constants
without distortion. Can be quite slow in execution due to the latter property.
Based on smooth.construct.cr.smooth.spec
for implementation
with mgcv
.
Usage
## S3 method for class 'slp.smooth.spec'
smooth.construct(object,data,knots)
Arguments
object |
a smooth specification object, usually generated by a model term |
data |
a list containing just the data required by this term, with names corresponding to
|
knots |
a list containing any knots supplied for basis setup – should be |
Details
slp
is based on .dpss
, which generates a family of Discrete
Prolate Spheroidal (Slepian) Sequences. These vectors are orthonormal, have alternating
even/odd parity, and form the optimally concentrated basis set for the subspace of
R^N
corresponding to the bandwidth W
. Full details are given
in Slepian (1978). These basis functions have natural boundary conditions, and lack any form of
knot structure. This version is returned for naive = TRUE
.
The dpss
basis vectors can be adapted to provide the additional
useful property of capturing or passing constants perfectly. That is, the smoother matrix
S
formed from the returned rectangular matrix will either reproduce constants
at near round-off precision, i.e., S %*% rep(1, N) = rep(1, N)
,
for naive = FALSE
with intercept = TRUE
, or will pass constants,
i.e., S %*% rep(1, N) = rep(0, N)
, for naive = FALSE
with intercept = FALSE
.
The primary use is in modeling formula to directly specify a Slepian time-based smoothing term in a model: see the examples.
For large N
this routine can be very slow. If you are computing models with
large N
, we highly recommend pre-computing the basis object, then using it
in your models without recomputation. The third example below demonstrates this approach.
Value
An object of class slp.smooth
. In addition to the usual elements of a smooth
class (see smooth.construct
), this object will
contain:
C |
a constraint matrix which restricts |
K |
the user-specified number of basis vectors, or the computed |
W |
the user-specified bandwidth |
fullBasis |
the full-span computed, normalized basis set, before contiguity is
taken into account. Used by |
contiguous |
a logical variable declaring whether or not the input time array was considered to be contiguous by the basis computation procedure. |
wx |
the “corrected” input time array; if |
References
Wood S.N. (2006) Generalized Additive Models: An Introduction with R. Chapman and Hall/CRC Press.
Hastie T.J. & Tibshirani, R.J. (1990) Generalized Additive Models. Chapman and Hall.
Thomson, D.J (1982) Spectrum estimation and harmonic analysis. Proceedings of the IEEE. Volume 70, number 9, pp. 1055-1096.
Slepian, David (1978) Prolate Spheroidal Wave Functions, Fourier Analysis, and Uncertainty V: the Discrete Case. Bell System Technical Journal. Volume 57, pp. 1371-1429.
See Also
Examples
# Examples using pkg:mgcv
library("mgcv")
library("slp")
N <- 730
W <- 8 / N
K <- 16 # will actually use 15 df as intercept = FALSE
x <- rnorm(n = N, sd = 1)
y <- x + rnorm(n = N, sd = 2) + 5.0
t <- seq(1, N)
# note: all three examples share identical results
# example with in-call computation, using K (df)
fit1 <- gam(y ~ x + s(t, bs = 'slp', xt = list(K = K)), family = gaussian)
# example with in-call computation, using W
fit2 <- gam(y ~ x + s(t, bs = 'slp', xt = list(W = W)), family = gaussian)