fregre.lm {fda.usc} | R Documentation |
Fitting Functional Linear Models
Description
Computes functional regression between functional (and non functional) explanatory variables and scalar response using basis representation.
Usage
fregre.lm(
formula,
data,
basis.x = NULL,
basis.b = NULL,
lambda = NULL,
P = NULL,
weights = rep(1, n),
...
)
Arguments
formula |
an object of class |
data |
List that containing the variables in the model. Functional covariates are recommended to be of class fdata. Objects of class "fd" can be used at the user's own risk. |
basis.x |
List of basis for functional explanatory data estimation. |
basis.b |
List of basis for functional beta parameter estimation. |
lambda |
List, indexed by the names of the functional covariates, which contains the Roughness penalty parameter. |
P |
List, indexed by the names of the functional covariates, which contains the parameters for the creation of the penalty matrix. |
weights |
weights |
... |
Further arguments passed to or from other methods. |
Details
This section is presented as an extension of the linear regression models:
fregre.pc
, fregre.pls
and
fregre.basis
. Now, the scalar response Y
is estimated by
more than one functional covariate X^j(t)
and also more than one non
functional covariate Z^j
. The regression model is given by:
E[Y|X,Z]=\alpha+\sum_{j=1}^{p}\beta_{j}Z^{j}+\sum_{k=1}^{q}\frac{1}{\sqrt{T_k}}\int_{T_k}{X^{k}(t)\beta_{k}(t)dt}
where Z=\left[ Z^1,\cdots,Z^p \right]
are the non
functional covariates, X(t)=\left[ X^{1}(t_1),\cdots,X^{q}(t_q)
\right]
are the functional ones and
\epsilon
are random errors with mean zero , finite variance
\sigma^2
and E[X(t)\epsilon]=0
.
The first item in the data
list is called "df" and is a data
frame with the response and non functional explanatory variables, as
lm
. Functional covariates of class fdata
or fd
are introduced in the following items in the data
list.
basis.x
is a list of basis for represent each functional covariate.
The basis object can be created by the function:
create.pc.basis
, pca.fd
create.pc.basis
, create.fdata.basis
or
create.basis
.
basis.b
is a list of basis for
represent each functional \beta_k
parameter. If basis.x
is a
list of functional principal components basis (see
create.pc.basis
or pca.fd
) the argument
basis.b
(is unnecessary and) is ignored.
Penalty options are under development, not guaranteed to work properly.
The user can penalty the basis elements by: (i) lambda
is a list of
rough penalty values of each functional covariate, see
P.penalty
for more details.
Value
Return lm
object plus:
-
sr2
Residual variance. -
Vp
Estimated covariance matrix for the parameters. -
lambda
A roughness penalty. -
basis.x
Basis used forfdata
orfd
covariates. -
basis.b
Basis used for beta parameter estimation. -
beta.l
List of estimated beta parameter of functional covariates. -
data
List that containing the variables in the model. -
formula
formula.
Author(s)
Manuel Febrero-Bande, Manuel Oviedo de la Fuente manuel.oviedo@usc.es
References
Ramsay, James O., and Silverman, Bernard W. (2006), Functional Data Analysis, 2nd ed., Springer, New York.
Febrero-Bande, M., Oviedo de la Fuente, M. (2012). Statistical Computing in Functional Data Analysis: The R Package fda.usc. Journal of Statistical Software, 51(4), 1-28. https://www.jstatsoft.org/v51/i04/
See Also
See Also as: predict.fregre.lm
and
summary.lm
.
Alternative method: fregre.glm
.
Examples
## Not run:
data(tecator)
x <- tecator$absorp.fdata
y <- tecator$y$Fat
tt <- x[["argvals"]]
dataf <- as.data.frame(tecator$y)
nbasis.x <- 11
nbasis.b <- 5
basis1 <- create.bspline.basis(rangeval=range(tt),nbasis=nbasis.x)
basis2 <- create.bspline.basis(rangeval=range(tt),nbasis=nbasis.b)
basis.x <- list("x"=basis1)
basis.b <- list("x"=basis2)
f <- Fat ~ Protein + x
ldat <- ldata("df"=dataf,"x"=x)
res fregre.lm(f,ldat, basis.b=basis.b)
summary(res)
f2 <- Fat ~ Protein + xd +xd2
xd <- fdata.deriv(x,nderiv=1,class.out='fdata', nbasis=nbasis.x)
xd2 <- fdata.deriv(x,nderiv=2,class.out='fdata', nbasis=nbasis.x)
ldat2 <- list("df"=dataf,"xd"=xd,"x"=x,"xd2"=xd2)
basis.x2 <- NULL#list("xd"=basis1)
basis.b2 <- NULL#list("xd"=basis2)
basis.b2 <- list("xd"=basis2,"xd2"=basis2,"x"=basis2)
res2 <- fregre.lm(f2, ldat2,basis.b=basis.b2)
summary(res2)
par(mfrow=c(2,1))
plot(res$beta.l$x,main="functional beta estimation")
plot(res2$beta.l$xd,col=2)
## End(Not run)