# smooth the Canadian daily temperature data with a roughness
# penalty
# set up the fourier basis
nbasis <- 365
dayrange <- c(0,365)
daybasis <- create.fourier.basis(dayrange, nbasis)
dayperiod <- 365
harmaccelLfd <- vec2Lfd(c(0,(2*pi/365)^2,0), dayrange)
# Make temperature fd object
# Temperature data are in 12 by 365 matrix tempav
# See analyses of weather data.
# Set up sampling points at mid days
daytime <- (1:365)-0.5
# Convert the data to a functional data object
daybasis65 <- create.fourier.basis(dayrange, nbasis, dayperiod)
templambda <- 1e1
tempfdPar <- fdPar(fdobj=daybasis65, Lfdobj=harmaccelLfd, lambda=templambda)
#FIXME
#tempfd <- smooth.basis(CanadianWeather$tempav, daytime, tempfdPar)
# Set up the harmonic acceleration operator
Lbasis <- create.constant.basis(dayrange);
Lcoef <- matrix(c(0,(2*pi/365)^2,0),1,3)
bfdobj <- fd(Lcoef,Lbasis)
bwtlist <- fd2list(bfdobj)
harmaccelLfd <- Lfd(3, bwtlist)
# Define the functional parameter object for
# smoothing the temperature data
lambda <- 0.01 # minimum GCV estimate
#tempPar <- fdPar(daybasis365, harmaccelLfd, lambda)
# smooth the data
#tempfd <- smooth.basis(daytime, CanadialWeather$tempav, tempPar)$fd
# plot the temperature curves
#plot(tempfd)
Run the code above in your browser using DataLab