fda (version 2.4.4)

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).

  • fourier Lfdobj = a harmonic acceleration operator:

    Lfdobj <- vec2Lfd(c(0,(2*pi/diff(rng))^2,0), rng)

    where rng = fdobj[['basis']][['rangeval']].

  • anything elseLfdobj <- int2Lfd(0)

lambda

a nonnegative real number specifying the amount of smoothing to be applied to the estimated functional parameter.

estimate

a logical value: if TRUE, the functional parameter is estimated, otherwise, it is held fixed.

penmat

a roughness penalty matrix. Including this can eliminate the need to compute this matrix over and over again in some types of calculations.

Value

a functional data object.

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
# NOT RUN {
##
## 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 DataCamp Workspace