Last chance! 50% off unlimited learning
Sale ends in
Constructs a functional principal component regression (Reiss and Ogden,
2007, 2010) term for inclusion in an mgcv::gam
-formula (or
bam
or gamm
or gamm4:::gamm
) as
constructed by pfr
. Currently only one-dimensional functions
are allowed.
fpc(
X,
argvals = NULL,
method = c("svd", "fpca.sc", "fpca.face", "fpca.ssvd"),
ncomp = NULL,
pve = 0.99,
penalize = (method == "svd"),
bs = "ps",
k = 40,
...
)
functional predictors, typically expressed as an N
by J
matrix,
where N
is the number of columns and J
is the number of
evaluation points. May include missing/sparse functions, which are
indicated by NA
values. Alternatively, can be an object of class
"fd"
; see fd
.
indices of evaluation of X
, i.e. J
vector, or as
an N
by J
matrix. Indices may be unequally spaced. Entering
as a matrix allows for different observations times for each subject. If
NULL
, defaults to an equally-spaced grid between 0 or 1 (or within
X$basis$rangeval
if X
is a fd
object.)
the method used for finding principal components. The default
is an unconstrained SVD of the
number of principal components. if NULL
, chosen by pve
proportion of variance explained; used to choose the number of principal components
if TRUE
, a roughness penalty is applied to the
functional estimate. Defaults to TRUE
if method=="svd"
(corresponding to the FPCR_R method of Reiss and Ogden (2007)), and
FALSE
if method!="svd"
(corresponding to FPCR_C).
two letter character string indicating the mgcv
-style basis
to use for pre-smoothing X
the dimension of the pre-smoothing basis
additional options to be passed to lf
. These include
argvals
, integration
, and any additional options for the
pre-smoothing basis (as constructed by mgcv::s
), such as m
.
The result of a call to lf
.
Unlike fpcr
, fpc
within a pfr
formula does
not automatically decorrelate the functional predictors from additional
scalar covariates.
fpc
is a wrapper for lf
, which defines linear
functional predictors for any type of basis for inclusion in a pfr
formula. fpc
simply calls lf
with the appropriate options for
the fpc
basis and penalty construction.
This function implements both the FPCR-R and FPCR-C methods of Reiss and Ogden (2007). Both methods consist of the following steps:
project
perform a principal components decomposition of
use those PC's as the basis in fitting a (generalized) functional linear model
This implementation provides options for each of these steps. The basis
for in step 1 can be specified using the arguments bs
and k
,
as well as other options via ...
; see s
for
these options. The type of PC-decomposition is specified with method
.
And the FLM can be fit either penalized or unpenalized via penalize
.
The default is FPCR-R, which uses a b-spline basis, an unconstrained
principal components decomposition using svd
, and the FLM
fit with a second-order difference penalty. FPCR-C can be selected by
using a different option for method
, indicating a constrained
("functional") PC decomposition, and by default an unpenalized fit of the
FLM.
FPCR-R is also implemented in fpcr
; here we implement the
method for inclusion in a pfr
formula.
Reiss, P. T. (2006). Regression with signals and images as predictors. Ph.D. dissertation, Department of Biostatistics, Columbia University. Available at http://works.bepress.com/phil_reiss/11/.
Reiss, P. T., and Ogden, R. T. (2007). Functional principal component regression and functional partial least squares. Journal of the American Statistical Association, 102, 984-996.
Reiss, P. T., and Ogden, R. T. (2010). Functional generalized linear models with images as predictors. Biometrics, 66, 61-69.
# NOT RUN {
data(gasoline)
par(mfrow=c(3,1))
# Fit PFCR_R
gasmod1 <- pfr(octane ~ fpc(NIR, ncomp=30), data=gasoline)
plot(gasmod1, rug=FALSE)
est1 <- coef(gasmod1)
# Fit FPCR_C with fpca.sc
gasmod2 <- pfr(octane ~ fpc(NIR, method="fpca.sc", ncomp=6), data=gasoline)
plot(gasmod2, se=FALSE)
est2 <- coef(gasmod2)
# Fit penalized model with fpca.face
gasmod3 <- pfr(octane ~ fpc(NIR, method="fpca.face", penalize=TRUE), data=gasoline)
plot(gasmod3, rug=FALSE)
est3 <- coef(gasmod3)
par(mfrow=c(1,1))
ylm <- range(est1$value)*1.35
plot(value ~ X.argvals, type="l", data=est1, ylim=ylm)
lines(value ~ X.argvals, col=2, data=est2)
lines(value ~ X.argvals, col=3, data=est3)
# }
Run the code above in your browser using DataLab