Learn R Programming

tensorBSS (version 0.3.9)

tSOBI: SOBI for Tensor-Valued Time Series

Description

Computes the tensorial SOBI for time series where at each time point a tensor of order \(r\) is observed.

Usage

tSOBI(x, lags = 1:12, maxiter = 100, eps = 1e-06)

Value

A list with class 'tbss', inheriting from class 'bss', containing the following components:

S

Array of the same size as x containing the estimated uncorrelated sources.

W

List containing all the unmixing matrices

Xmu

The data location.

datatype

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

Arguments

x

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

lags

Vector of integers. Defines the lags used for the computations of the autocovariances.

maxiter

Maximum number of iterations. Passed on to rjd.

eps

Convergence tolerance. Passed on to rjd.

Author

Joni Virta

Details

It is assumed that \(S\) is a tensor (array) of size \(p_1 \times p_2 \times \ldots \times p_r\) measured at time points \(1, \ldots, T\). The assumption is that the elements of \(S\) are uncorrelated, centered and weakly stationary time series and are mixed from each mode \(m\) by the mixing matrix \(A_m\), \(m = 1, \ldots, r\), yielding the observed time series \(X\). In R the sample of \(X\) is saved as an array of dimensions \(p_1, p_2, \ldots, p_r, T\).

tSOBI recovers then based on x the underlying uncorrelated time series \(S\) by estimating the \(r\) unmixing matrices \(W_1, \ldots, W_r\) using the lagged joint autocovariances specified by lags.

If x is a matrix, that is, \(r = 1\), the method reduces to SOBI and the function calls SOBI.

References

Virta, J. and Nordhausen, K., (2017), Blind source separation of tensor-valued time series. Signal Processing 141, 204-216, tools:::Rd_expr_doi("10.1016/j.sigpro.2017.06.008")

See Also

SOBI, rjd

Examples

Run this code
n <- 1000
S <- t(cbind(as.vector(arima.sim(n = n, list(ar = 0.9))),
             as.vector(arima.sim(n = n, list(ar = -0.9))),
             as.vector(arima.sim(n = n, list(ma = c(0.5, -0.5)))),
             as.vector(arima.sim(n = n, list(ar = c(-0.5, -0.3)))),
             as.vector(arima.sim(n = n, list(ar = c(0.5, -0.3, 0.1, -0.1), ma=c(0.7, -0.3)))),
             as.vector(arima.sim(n = n, list(ar = c(-0.7, 0.1), ma = c(0.9, 0.3, 0.1, -0.1))))))
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)

tsobi <- tSOBI(X)

MD(tsobi$W[[1]], A1)
MD(tsobi$W[[2]], A2) 
tMD(tsobi$W, list(A1, A2))

Run the code above in your browser using DataLab