Learn R Programming

fda (version 1.2.3)

smooth.basisPar: Smooth Data Using a Directly Specified Roughness Penalty

Description

Smooth (argvals, y) data with roughness penalty defined by the remaining arguments.

Usage

smooth.basisPar(argvals, y, fdobj=NULL, Lfdobj=int2Lfd(2),
      lambda=1/diff(range(argvals)), estimate=TRUE, penmat=NULL,
      wtvec=rep(1,n), dffactor=1,
      fdnames=list(NULL, dimnames(y)[[2]], NULL) )

Arguments

argvals
a vector of argument values correspond to the observations in array y.
y
an array containing values of curves at discrete sampling points or argument values. If the array is a matrix, the rows must correspond to argument values and columns to replications, and it will be assumed that there is only one variable per
fdobj
a functional data object, although the argument may also be a functional basis object or another functional parameter object. Basis objects are converted to functional data objects with the identity matrix as the coefficient matrix.

If NU

Lfdobj
either a nonnegative integer or a linear differential operator object
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.
wtvec
a vector of the same length as argvals containing weights for the values to be smoothed.
dffactor
Chong Gu in his book Smoothing Spline ANOVA Models suggests a modification of the GCV criterion using a factor modifying the effective degrees of freedom of the smooth. He suggests that values like 1.2 are effective at avoiding under
fdnames
a list of length 3 with members containing the following:
  • a single name for the argument domain, such as 'Time'
  • a vector of names for the replications or cases
  • a name for the function, or a vector of names if there are

Value

  • The output of a call to 'smooth.data', which is a named list of length 7:
  • fdobja functional data object that smooths the data.
  • dfa degrees of freedom measure of the smooth
  • gcvthe value of the generalized cross-validation or GCV criterion. If there are multiple curves, this is a vector of values, one per curve. If the smooth is multivariate, the result is a matrix of gcv values, with columns corresponding to variables.
  • coefthe coefficient matrix or array for the basis function expansion of the smoothing function
  • SSEthe error sums of squares. SSE is a vector or a matrix of the same size as 'gcv'.
  • penmatthe penalty matrix.
  • y2cMapthe matrix mapping the data to the coefficients.

Details

1. if(is.null(fdobj))fdobj <- create.bspline.basis(argvals) 2. fdPar

3. smooth.basis

See Also

data2fd, df2lambda, fdPar, lambda2df, lambda2gcv, plot.fd, project.basis, smooth.basis, smooth.fd, smooth.monotone, smooth.pos

Examples

Run this code
# simplest call
girlGrowthSm <- with(growth, smooth.basisPar(argvals=age, y=hgtf))
plot(girlGrowthSm$fd, xlab="age", ylab="height (cm)",
         main="Girls in Berkeley Growth Study" )
plot(deriv(girlGrowthSm$fd), xlab="age", ylab="growth rate (cm / year)",
         main="Girls in Berkeley Growth Study" )
plot(deriv(girlGrowthSm$fd, 2), xlab="age",
        ylab="growth acceleration (cm / year^2)",
        main="Girls in Berkeley Growth Study" )

#  Shows the effects of three 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) + sin(1:101)/2
# sin not rnorm to make it easier to compare
# results across platforms 

#  set up a saturated B-spline basis
basisobj <- create.bspline.basis(c(-1,1),101)
fdParobj <- fdPar(basisobj, 2, lambda=1)
result1.  <- smooth.basis(x, y, fdParobj)

result1 <- smooth.basisPar(argvals=x, y=y,
              fdobj=basisobj, Lfdobj=2, lambda=1)
all.equal(result1, result1.)
# TRUE 

with(result1, c(df, gcv)) #  display df and gcv measures
fdParobj <- fdPar(basisobj, 2, lambda=1e-4)
result2 <- smooth.basisPar(x, y, basisobj, 2, lambda=1e-4)

with(result2, c(df, gcv)) #  display df and gcv measures

result3 <- smooth.basisPar(x, y, basisobj, 2, lambda=0)
with(result3, c(df, gcv)) #  display df and gcv measures

plot(x,y)           # plot the data
lines(result1$fd, lty=2)  #  add heavily penalized smooth
lines(result2$fd, lty=1)  #  add reasonably penalized smooth
lines(result3$fd, lty=3)  #  add smooth without any penalty
legend(-1,3,c("1","0.0001","0"),lty=c(2,1,3))
plotfit.fd(y, x, result2$fd)  # plot data and smooth

Run the code above in your browser using DataLab