ffpc {refund} | R Documentation |
Construct a PC-based function-on-function regression term
Description
Defines a term
for inclusion in an
mgcv::gam
-formula (or bam
or gamm
or gamm4:::gamm4
) as constructed
by pffr
.
Usage
ffpc(
X,
yind = NULL,
xind = seq(0, 1, length = ncol(X)),
splinepars = list(bs = "ps", m = c(2, 1), k = 8),
decomppars = list(pve = 0.99, useSymm = TRUE),
npc.max = 15
)
Arguments
X |
an n by |
yind |
DEPRECATED used to supply matrix (or vector) of indices of evaluations of |
xind |
matrix (or vector) of indices of evaluations of |
splinepars |
optional arguments supplied to the |
decomppars |
parameters for the FPCA performed with |
npc.max |
maximal number |
Details
In contrast to ff
, ffpc
does an FPCA decomposition using
fpca.sc
and
represents in the function space spanned by these
.
That is, since
the function-on-function term can be represented as a sum of univariate functions
in
each multiplied by the FPC
scores
. The truncation parameter
is chosen as described in
fpca.sc
.
Using this instead of ff()
can be beneficial if the covariance operator of the
has low effective rank (i.e., if
is small). If the covariance operator of the
is of (very) high rank, i.e., if
is large,
ffpc()
will not be very efficient.
To reduce model complexity, the all have a single joint smoothing parameter
(in
mgcv
, they get the same id
, see s
).
Please see pffr
for details on model specification and
implementation.
Value
A list containing the necessary information to construct a term to be included in a mgcv::gam
-formula.
Author(s)
Fabian Scheipl
Examples
## Not run:
set.seed(1122)
n <- 55
S <- 60
T <- 50
s <- seq(0,1, l=S)
t <- seq(0,1, l=T)
#generate X from a polynomial FPC-basis:
rankX <- 5
Phi <- cbind(1/sqrt(S), poly(s, degree=rankX-1))
lambda <- rankX:1
Xi <- sapply(lambda, function(l)
scale(rnorm(n, sd=sqrt(l)), scale=FALSE))
X <- Xi %*% t(Phi)
beta.st <- outer(s, t, function(s, t) cos(2 * pi * s * t))
y <- (1/S*X) %*% beta.st + 0.1 * matrix(rnorm(n * T), nrow=n, ncol=T)
data <- list(y=y, X=X)
# set number of FPCs to true rank of process for this example:
m.pc <- pffr(y ~ c(1) + 0 + ffpc(X, yind=t, decomppars=list(npc=rankX)),
data=data, yind=t)
summary(m.pc)
m.ff <- pffr(y ~ c(1) + 0 + ff(X, yind=t), data=data, yind=t)
summary(m.ff)
# fits are very similar:
all.equal(fitted(m.pc), fitted(m.ff))
# plot implied coefficient surfaces:
layout(t(1:3))
persp(t, s, t(beta.st), theta=50, phi=40, main="Truth",
ticktype="detailed")
plot(m.ff, select=1, zlim=range(beta.st), theta=50, phi=40,
ticktype="detailed")
title(main="ff()")
ffpcplot(m.pc, type="surf", auto.layout=FALSE, theta = 50, phi = 40)
title(main="ffpc()")
# show default ffpcplot:
ffpcplot(m.pc)
## End(Not run)