## Computing FPC for equispaced data
# Sample data
X_fdata1 <- r_ou(n = 200, t = seq(2, 4, l = 201))
# FPC with trapezoid rule
X_fpc1 <- fpc(X_fdata = X_fdata1, n_fpc = 50, equispaced = TRUE,
int_rule = "trapezoid")
# FPC with Simpsons's rule
X_fpc2 <- fpc(X_fdata = X_fdata1, n_fpc = 50, equispaced = TRUE,
int_rule = "Simpson")
# Check if FPC are orthonormal
norms1 <- rep(0, length(X_fpc1$l))
for (i in X_fpc1$l) {
norms1[i] <- integral1D(fx = X_fpc1$rotation$data[i, ]^2,
t = X_fdata1$argvals)
}
norms2 <- rep(0, length(X_fpc2$l))
for (i in X_fpc2$l) {
norms2[i] <- integral1D(fx = X_fpc2$rotation$data[i, ]^2,
t = X_fdata1$argvals)
}
## Computing FPC for non equispaced data
# Sample data
X_fdata2 <- r_ou(n = 200, t = c(seq(0, 0.5, l = 201), seq(0.51, 1, l = 301)))
# FPC with trapezoid rule
X_fpc3 <- fpc(X_fdata = X_fdata2, n_fpc = 5, int_rule = "trapezoid",
equispaced = FALSE)
# Check if FPC are orthonormal
norms3 <- rep(0, length(X_fpc3$l))
for (i in X_fpc3$l) {
norms3[i] <- integral1D(fx = X_fpc3$rotation$data[i, ]^2,
t = X_fdata2$argvals)
}
# \donttest{
## Efficiency comparisons
# fpc() vs. fda.usc::fdata2pc()
data(phoneme, package = "fda.usc")
mlearn <- phoneme$learn[1:10, ]
res1 <- fda.usc::fdata2pc(mlearn, ncomp = 3)
res2 <- fpc(X_fdata = mlearn, n_fpc = 3)
plot(res1$x[, 1:3], col = 1)
points(res2$scores, col = 2)
microbenchmark::microbenchmark(fda.usc::fdata2pc(mlearn, ncomp = 3),
fpc(X_fdata = mlearn, n_fpc = 3), times = 1e3,
control = list(warmup = 20))
# }
Run the code above in your browser using DataLab