FOBI for Tensor-Valued Observations

Description

Computes the tensorial FOBI in an independent component model.

Usage

1
tFOBI(x)

Arguments

x

Numeric array of an order at least two. It is assumed that the last dimension corresponds to the sampling units.

Details

It is assumed that S is a tensor (array) of size p_1 x p_2 x ... x 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, ..., r, yielding the observed data X. In R the sample of X is saved as an array of dimensions p_1, p_2, ..., p_r, N.

tFOBI recovers then based on x the underlying independent components S by estimating the r unmixing matrices W_1, ..., W_r using fourth joint moments.

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

Xmu

The data location.

datatype

Character string with value "iid". Relevant for plot.tbss.

Author(s)

Joni Virta

References

Virta, J., Li, B., Nordhausen, K. and Oja, H., (2016), Independent component analysis for tensor-valued data, submitted, ???, ???–???. Preprint available on ArXiv http://arxiv.org/abs/1602.00879.

See Also

FOBI, tgFOBI

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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) 
MD(tfobi$W[[2]] %x% tfobi$W[[1]], A2 %x% A1)


# Digit data example

library(ElemStatLearn)
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)