Learn R Programming

fda (version 2.4.0)

smooth.fdPar: Smooth a functional data object using a directly specified roughness penalty

Description

Smooth data already converted to a functional data object, fdobj, using directly specified criteria.

Usage

smooth.fdPar(fdobj, Lfdobj=NULL, lambda=0,
             estimate=TRUE, penmat=NULL)

Arguments

fdobj
a functional data object to be smoothed.
Lfdobj
either a nonnegative integer or a linear differential operator object.

If NULL, Lfdobj depends on fdobj[['basis']][['type']]:

  • bspline
{ Lfdobj <- int2Lfd(max(0, norder-2)), where norder = norder(fdobj).

Value

  • a functional data object.

item

  • lambda
  • estimate
  • penmat

code

TRUE

Details

1. fdPar

2. smooth.fd

References

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

Ramsay, James O., and Silverman, Bernard W. (2002), Applied Functional Data Analysis, Springer, New York.

See Also

smooth.fd, fdPar, smooth.basis, smooth.pos, smooth.morph

Examples

Run this code
##
## 1.  B-spline example
##
#  Shows the effects of two levels of smoothing
#  where the size of the third derivative is penalized.
#  The null space contains quadratic functions.
x <- seq(-1,1,0.02)
y <- x + 3*exp(-6*x^2) + rnorm(rep(1,101))*0.2
#  set up a saturated B-spline basis
basisobj <- create.bspline.basis(c(-1,1),81)
#  convert to a functional data object that interpolates the data.
result <- smooth.basis(x, y, basisobj)
yfd  <- result$fd
#  set up a functional parameter object with smoothing
#  parameter 1e-6 and a penalty on the 2nd derivative.
yfdPar <- fdPar(yfd, 2, 1e-6)
yfd1 <- smooth.fd(yfd, yfdPar)

yfd1. <- smooth.fdPar(yfd, 2, 1e-6)
all.equal(yfd1, yfd1.)
# TRUE

#  set up a functional parameter object with smoothing
#  parameter 1 and a penalty on the 2nd derivative.
yfd2 <- smooth.fdPar(yfd, 2, 1)

#  plot the data and smooth
plot(x,y)           # plot the data
lines(yfd1, lty=1)  #  add moderately penalized smooth
lines(yfd2, lty=3)  #  add heavily  penalized smooth
legend(-1,3,c("0.000001","1"),lty=c(1,3))
#  plot the data and smoothing using function plotfit.fd
plotfit.fd(y, x, yfd1)  # plot data and smooth
##
## 2.  Fourier basis with harmonic acceleration operator
##
daybasis65 <- create.fourier.basis(rangeval=c(0, 365), nbasis=65)
daySmooth <- with(CanadianWeather, smooth.basis(day.5,
       dailyAv[,,"Temperature.C"],
       daybasis65, fdnames=list("Day", "Station", "Deg C")) )

daySmooth2 <- smooth.fdPar(daySmooth$fd, lambda=1e5)
op <- par(mfrow=c(2,1))
plot(daySmooth)
plot(daySmooth2)
par(op)

Run the code above in your browser using DataLab