Fperm.fd | R Documentation |
Fperm.fd
creates a null distribution for a test of no effect in
functional linear regression. It makes generic use of fRegress
and permutes the yfdPar
input.
Fperm.fd(yfdPar, xfdlist, betalist, wt=NULL, nperm=200,
argvals=NULL, q=0.05, plotres=TRUE, ...)
yfdPar |
the dependent variable object. It may be an object of three possible classes:
|
xfdlist |
a list of length equal to the number of independent variables. Members of this list are the independent variables. They be objects of either of these two classes:
In either case, the object must have the same number of replications as the dependent variable object. That is, if it is a scalar, it must be of the same length as the dependent variable, and if it is functional, it must have the same number of replications as the dependent variable. |
betalist |
a list of length equal to the number of independent variables. Members of this list define the regression functions to be estimated. They are functional parameter objects. Note that even if corresponding independent variable is scalar, its regression coefficient will be functional if the dependent variable is functional. Each of these functional parameter objects defines a single functional data object, that is, with only one replication. |
wt |
weights for weighted least squares, defaults to all 1. |
nperm |
number of permutations to use in creating the null distribution. |
argvals |
If |
q |
Critical upper-tail quantile of the null distribution to compare to the observed F-statistic. |
plotres |
Argument to plot a visual display of the null distribution
displaying the |
... |
Additional plotting arguments that can be used with |
An F-statistic is calculated as the ratio of residual variance to predicted variance. The observed F-statistic is returned along with the permutation distribution.
If yfdPar
is a fd
object, the maximal value of the
pointwise F-statistic is calculated. The pointwise F-statistics are
also returned.
The default of setting q = 0.95
is, by now, fairly
standard. The default nperm = 200
may be small, depending on
the amount of computing time available.
If argvals
is not specified and yfdPar
is a fd
object, it defaults to 101 equally-spaced points on the range of
yfdPar
.
A list with the following components:
pval |
the observed p-value of the permutation test. |
qval |
the |
Fobs |
the observed maximal F-statistic. |
Fnull |
a vector of length |
Fvals |
the pointwise values of the observed F-statistic. |
Fnullvals |
the pointwise values of of the permutation observations. |
pvals.pts |
pointwise p-values of the F-statistic. |
qvals.pts |
pointwise |
fRegressList |
the result of |
argvals |
argument values for evaluating the F-statistic if |
a plot of the functional observations
Ramsay, James O., Hooker, Giles, and Graves, Spencer (2009), Functional data analysis with R and Matlab, Springer, New York.
Ramsay, James O., and Silverman, Bernard W. (2005), Functional Data Analysis, 2nd ed., Springer, New York.
Ramsay, James O., and Silverman, Bernard W. (2002), Applied Functional Data Analysis, Springer, New York.
fRegress
,
Fstat.fd
oldpar <- par(no.readonly=TRUE)
##
## 1. yfdPar = vector
##
annualprec <- log10(apply(
CanadianWeather$dailyAv[,,"Precipitation.mm"], 2,sum))
# set up a smaller basis using only 40 Fourier basis functions
# to save some computation time
smallnbasis <- 40
smallbasis <- create.fourier.basis(c(0, 365), smallnbasis)
tempfd <- smooth.basis(day.5, CanadianWeather$dailyAv[,,"Temperature.C"],
smallbasis)$fd
constantfd <- fd(matrix(1,1,35), create.constant.basis(c(0, 365)))
xfdlist <- vector("list",2)
xfdlist[[1]] <- constantfd
xfdlist[[2]] <- tempfd[1:35]
betalist <- vector("list",2)
# set up the first regression function as a constant
betabasis1 <- create.constant.basis(c(0, 365))
betafd1 <- fd(0, betabasis1)
betafdPar1 <- fdPar(betafd1)
betalist[[1]] <- betafdPar1
nbetabasis <- 35
betabasis2 <- create.fourier.basis(c(0, 365), nbetabasis)
betafd2 <- fd(matrix(0,nbetabasis,1), betabasis2)
lambda <- 10^12.5
harmaccelLfd365 <- vec2Lfd(c(0,(2*pi/365)^2,0), c(0, 365))
betafdPar2 <- fdPar(betafd2, harmaccelLfd365, lambda)
betalist[[2]] <- betafdPar2
# Should use the default nperm = 200
# but use 10 to save test time for illustration
F.res2 = Fperm.fd(annualprec, xfdlist, betalist, nperm=100)
##
## 2. yfdpar = Functional data object (class fd)
##
# The very simplest example is the equivalent of the permutation
# t-test on the growth data.
# First set up a basis system to hold the smooths
if (!CRAN()) {
Knots <- growth$age
norder <- 6
nbasis <- length(Knots) + norder - 2
hgtbasis <- create.bspline.basis(range(Knots), nbasis, norder, Knots)
# Now smooth with a fourth-derivative penalty and a very small smoothing
# parameter
Lfdobj <- 4
lambda <- 1e-2
growfd <- fd(matrix(0,nbasis,1),hgtbasis)
growfdPar <- fdPar(growfd, Lfdobj, lambda)
hgtfd <- smooth.basis(growth$age,
cbind(growth$hgtm,growth$hgtf),growfdPar)$fd
# Now set up factors for fRegress:
cbasis = create.constant.basis(range(Knots))
maleind = c(rep(1,ncol(growth$hgtm)),rep(0,ncol(growth$hgtf)))
constfd = fd( matrix(1,1,length(maleind)),cbasis)
maleindfd = fd( matrix(maleind,1,length(maleind)),cbasis)
xfdlist = list(constfd,maleindfd)
# The fdPar object for the coefficients and call Fperm.fd
betalist = list(fdPar(hgtfd,2,1e-6),fdPar(hgtfd,2,1e-6))
# Should use nperm = 200 or so,
# but use 10 to save test time
Fres = Fperm.fd(hgtfd,xfdlist,betalist,nperm=100)
par(oldpar)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.