FCP_TPA | R Documentation |
This function implements the functional CP-TPA (FCP-TPA) algorithm, that
calculates a smooth PCA for 3D tensor data (i.e. N
observations of 2D
images with dimension S1 x S2
). The results are given in a
CANDECOMP/PARAFRAC (CP) model format
X = ∑ d_k u_k %o% v_k %o% w_k
where %o% stands for the outer product, d_k is a scalar and u_k, v_k, w_k are eigenvectors for each direction of the tensor. In this representation, the outer product v_k %o% w_k can be regarded as the k-th eigenimage, while d_k u_k represents the vector of individual scores for this eigenimage and each observation.
FCP_TPA( X, K, penMat, alphaRange, verbose = FALSE, tol = 1e-04, maxIter = 15, adaptTol = TRUE )
X |
The data tensor of dimensions |
K |
The number of eigentensors to be calculated. |
penMat |
A list with entries |
alphaRange |
A list of length 2 with entries |
verbose |
Logical. If |
tol |
A numeric value, giving the tolerance for relative error values in
the algorithm. Defaults to |
maxIter |
A numeric value, the maximal iteration steps. Can be doubled,
if |
adaptTol |
Logical. If |
The smoothness of the eigenvectors v_k, w_k is induced by penalty matrices for both image directions, that are weighted by smoothing parameters α_{vk}, α_{wk}. The eigenvectors u_k are not smoothed, hence the algorithm does not induce smoothness along observations.
Optimal smoothing parameters are found via a nested generalized cross
validation. In each iteration of the TPA (tensor power algorithm), the GCV
criterion is optimized via optimize
on the interval
specified via alphaRange$v
(or alphaRange$w
, respectively).
The FCP_TPA algorithm is an iterative algorithm. Convergence is assumed if
the relative difference between the actual and the previous values are all
below the tolerance level tol
. The tolerance level is increased
automatically, if the algorithm has not converged after maxIter
steps
and if adaptTol = TRUE
. If the algorithm did not converge after
maxIter
steps (or 2 * maxIter
) steps, the function throws a
warning.
d |
A vector of length |
U |
A matrix of dimensions |
V |
A
matrix of dimensions |
W |
A matrix of dimensions |
G. I. Allen, "Multi-way Functional Principal Components Analysis", IEEE International Workshop on Computational Advances in Multi-Sensor Adaptive Processing, 2013.
fcptpaBasis
# set.seed(1234) N <- 100 S1 <- 75 S2 <- 75 # define "true" components v <- sin(seq(-pi, pi, length.out = S1)) w <- exp(seq(-0.5, 1, length.out = S2)) # simulate tensor data with dimensions N x S1 x S2 X <- rnorm(N, sd = 0.5) %o% v %o% w # create penalty matrices (penalize first differences for each dimension) Pv <- crossprod(diff(diag(S1))) Pw <- crossprod(diff(diag(S2))) # estimate one eigentensor res <- FCP_TPA(X, K = 1, penMat = list(v = Pv, w = Pw), alphaRange = list(v = c(1e-4, 1e4), w = c(1e-4, 1e4)), verbose = TRUE) # plot the results and compare to true values plot(res$V) points(v/sqrt(sum(v^2)), pch = 20) legend("topleft", legend = c("True", "Estimated"), pch = c(20, 1)) plot(res$W) points(w/sqrt(sum(w^2)), pch = 20) legend("topleft", legend = c("True", "Estimated"), pch = c(20, 1))
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.