Learn R Programming

fda (version 2.4.0)

Fperm.fd: Permutation F-test for functional linear regression.

Description

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.

Usage

Fperm.fd(yfdPar, xfdlist, betalist, wt=NULL, nperm=200,
         argvals=NULL, q=0.05, plotres=TRUE, ...)

Arguments

yfdPar
the dependent variable object. It may be an object of three possible classes:
  • vector
{ if the dependent variable is scalar.} fd{ a functional data object if the dependent variable is functional.

Value

  • A list with the following components:
  • pvalthe observed p-value of the permutation test.
  • qvalthe qth quantile of the null distribution.
  • Fobsthe observed maximal F-statistic.
  • Fnulla vector of length nperm giving the observed values of the permutation distribution.
  • Fvalsthe pointwise values of the observed F-statistic.
  • Fnullvalsthe pointwise values of of the permutation observations.
  • pvals.ptspointwise p-values of the F-statistic.
  • qvals.ptspointwise qth quantiles of the null distribution
  • fRegressListthe result of fRegress on the observed data
  • argvalsargument values for evaluating the F-statistic if yfdPar is a functional data object.

item

  • xfdlist
  • betalist
  • wt
  • nperm
  • argvals
  • q
  • plotres
  • ...

itemize

  • a vector if the independent dependent variable is scalar.
  • a functional data object if the dependent variable is functional.

code

plot

source

Ramsay, James O., and Silverman, Bernard W. (2006), Functional Data Analysis, 2nd ed., Springer, New York.

Side Effects

a plot of the functional observations

Details

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.

See Also

fRegress Fstat.fd

Examples

Run this code
##
## 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=10)

##
## 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

# cut this example to reduce test time on CRAN
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
growfdPar <- fdPar(hgtbasis, 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(hgtbasis,2,1e-6),fdPar(hgtbasis,2,1e-6))

# Should use nperm = 200 or so,
# but use 10 to save test time
Fres = Fperm.fd(hgtfd,xfdlist,betalist,nperm=10)
}

Run the code above in your browser using DataLab