fts.dpca: Compute Functional Dynamic Principal Components and dynamic...

View source: R/fts.dpca.R

fts.dpcaR Documentation

Compute Functional Dynamic Principal Components and dynamic Karhunen Loeve extepansion

Description

Functional dynamic principal component analysis (FDPCA) decomposes functional time series to a vector time series with uncorrelated components. Compared to classical functional principal components, FDPCA decomposition outputs components which are uncorrelated in time, allowing simpler modeling of the processes and maximizing long run variance of the projection.

Usage

fts.dpca(X, q = 30, freq = (-1000:1000/1000) * pi, Ndpc = X$basis$nbasis)

Arguments

X

a functional time series as a fd object from fda package.

q

window size for the kernel estimator, i.e. a positive integer.

freq

a vector containing frequencies in [-π, π] on which the spectral density should be evaluated.

Ndpc

is the number of principal component filters to compute as in fts.dpca.filters

Details

This convenient function applies the FDPCA methodology and returns filters (fts.dpca.filters), scores (fts.dpca.scores), the spectral density (fts.spectral.density), variances (fts.dpca.var) and Karhunen-Leove expansion (fts.dpca.KLexpansion).

See the example for understanding usage, and help pages for details on individual functions.

Value

A list containing

  • scores \quad DPCA scores (fts.dpca.scores)

  • filters \quad DPCA filters (fts.dpca.filters)

  • spec.density \quad spectral density of X (fts.spectral.density)

  • var \quad amount of variance explained by dynamic principal components (fts.dpca.var)

  • Xhat \quad Karhunen-Loeve expansion using Ndpc dynamic principal components (fts.dpca.KLexpansion)

References

Hormann, S., Kidzinski, L., and Hallin, M. Dynamic functional principal components. Journal of the Royal Statistical Society: Series B (Statistical Methodology) 77.2 (2015): 319-348.

Brillinger, D. Time Series (2001), SIAM, San Francisco.

Shumway, R., and Stoffer, D. Time series analysis and its applications: with R examples (2010), Springer Science & Business Media

Examples

# Load example PM10 data from Graz, Austria
data(pm10) # loads functional time series pm10 to the environment
X = center.fd(pm10)

# Compute functional dynamic principal components with only one component
res.dpca = fts.dpca(X, Ndpc = 1, freq=(-25:25/25)*pi) # leave default freq for higher precision
plot(res.dpca$Xhat)
fts.plot.filters(res.dpca$filters)

# Compute functional PCA with only one component
res.pca = prcomp(t(X$coefs), center = TRUE)
res.pca$x[,-1] = 0

# Compute empirical variance explained
var.dpca = (1 - sum( (res.dpca$Xhat$coefs - X$coefs)**2 ) / sum(X$coefs**2))*100
var.pca = (1 - sum( (res.pca$x %*% t(res.pca$rotation) - t(X$coefs) )**2 ) / sum(X$coefs**2))*100

cat("Variance explained by PCA (empirical):\t\t",var.pca,"%\n")
cat("Variance explained by PCA (theoretical):\t",
   (1 - (res.pca$sdev[1] / sum(res.pca$sdev)))*100,"%\n")
cat("Variance explained by DPCA (empirical):\t\t",var.dpca,"%\n")
cat("Variance explained by DPCA (theoretical):\t",(res.dpca$var[1])*100,"%\n")

# Plot filters
fts.plot.filters(res.dpca$filters)

# Plot spectral density (note that in case of these data it's concentrated around 0)
fts.plot.operators(res.dpca$spec.density,freq = c(-2,-3:3/30 * pi,2))

# Plot covariance of X
fts.plot.covariance(X)

# Compare values of the first PC scores with the first DPC scores 
plot(res.pca$x[,1],t='l',xlab = "Time",ylab="Score", lwd = 2.5)
lines(res.dpca$scores[,1], col=2, lwd = 2.5)
legend(0,4,c("first PC score","first DPC score"), # puts text in the legend
       lty=c(1,1),lwd=c(2.5,2.5), col=1:2)

kidzik/fda.ts documentation built on April 19, 2022, 5:34 a.m.