tFOBI {tensorBSS} | R Documentation |
FOBI for Tensor-Valued Observations
Description
Computes the tensorial FOBI in an independent component model.
Usage
tFOBI(x, norm = NULL)
Arguments
x |
Numeric array of an order at least two. It is assumed that the last dimension corresponds to the sampling units. |
norm |
A Boolean vector with number of entries equal to the number of modes in a single observation. The elements tell which modes use the “normed” version of tensorial FOBI. If |
Details
It is assumed that S
is a tensor (array) of size p_1 \times p_2 \times \ldots \times p_r
with mutually independent elements and measured on N
units. The tensor independent component model further assumes that the tensors S are mixed from each mode
m
by the mixing matrix A_m
, m = 1, \ldots, r
, yielding the observed data X
. In R the sample of X
is saved as an array
of dimensions
p_1, p_2, \ldots, p_r, N
.
tFOBI
recovers then based on x
the underlying independent components S
by estimating the r
unmixing matrices
W_1, \ldots, W_r
using fourth joint moments.
The unmixing can in each mode be done in two ways, using a “non-normed” or “normed” method and this is controlled by the argument norm
. The authors advocate the general use of non-normed version, see the reference below for their comparison.
If x
is a matrix, that is, r = 1
, the method reduces to FOBI and the function calls FOBI
.
For a generalization for tensor-valued time series see tgFOBI
.
Value
A list with class 'tbss', inheriting from class 'bss', containing the following components:
S |
Array of the same size as x containing the independent components. |
W |
List containing all the unmixing matrices. |
norm |
The vector indicating which modes used the “normed” version. |
Xmu |
The data location. |
datatype |
Character string with value "iid". Relevant for |
Author(s)
Joni Virta
References
Virta, J., Li, B., Nordhausen, K. and Oja, H., (2017), Independent component analysis for tensor-valued data, Journal of Multivariate Analysis, doi: 10.1016/j.jmva.2017.09.008
See Also
Examples
n <- 1000
S <- t(cbind(rexp(n)-1,
rnorm(n),
runif(n, -sqrt(3), sqrt(3)),
rt(n,5)*sqrt(0.6),
(rchisq(n,1)-1)/sqrt(2),
(rchisq(n,2)-2)/sqrt(4)))
dim(S) <- c(3, 2, n)
A1 <- matrix(rnorm(9), 3, 3)
A2 <- matrix(rnorm(4), 2, 2)
X <- tensorTransform(S, A1, 1)
X <- tensorTransform(X, A2, 2)
tfobi <- tFOBI(X)
MD(tfobi$W[[1]], A1)
MD(tfobi$W[[2]], A2)
tMD(tfobi$W, list(A1, A2))
# Digit data example
data(zip.train)
x <- zip.train
rows <- which(x[, 1] == 0 | x[, 1] == 1)
x0 <- x[rows, 2:257]
y0 <- x[rows, 1] + 1
x0 <- t(x0)
dim(x0) <- c(16, 16, 2199)
tfobi <- tFOBI(x0)
plot(tfobi, col=y0)