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
formula
(or one that can be coerced to that class): a symbolic description of the model to be fitted. The details of model specification are given underDetails
.- 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.
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 containing the variables in the model.formula
: Formula used in the model.
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.
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
.
Author
Manuel Febrero-Bande, Manuel Oviedo de la Fuente manuel.oviedo@usc.es
Examples
if (FALSE) { # \dontrun{
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)
} # }