Learn R Programming

tensorBSS (version 0.3.9)

tNSS.JD: NSS-JD Method for Tensor-Valued Time Series

Description

Estimates the non-stationary sources of a tensor-valued time series using separation information contained in several time intervals.

Usage

tNSS.JD(x, K = 12, n.cuts = NULL, eps = 1e-06, maxiter = 100, ...)

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.

K

The number of intervals.

n.cuts

The interval cutoffs.

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 sampling units.

K

The number of equisized intervals into which the time range is divided. If the parameter n.cuts is non-NULL it takes preference over this argument.

n.cuts

Either a interval cutoffs (the cutoffs are used to define the two intervals that are open below and closed above, e.g. \((a, b]\)) or NULL (the parameter K is used to define the the amount of intervals).

eps

Convergence tolerance for rjd.

maxiter

Maximum number of iterations for rjd.

...

Further arguments to be passed to or from methods.

Author

Joni Virta

Details

Assume that the observed tensor-valued time series comes from a tensorial BSS model where the sources have constant means over time but the component variances change in time. Then TNSS-JD first standardizes the series from all modes and then estimates the non-stationary sources by dividing the time scale into K intervals and jointly diagonalizing the covariance matrices of the K intervals within each mode.

References

Virta J., Nordhausen K. (2017): Blind source separation for nonstationary tensor-valued time series, 2017 IEEE 27th International Workshop on Machine Learning for Signal Processing (MLSP), tools:::Rd_expr_doi("10.1109/MLSP.2017.8168122")

See Also

NSS.SD, NSS.JD, NSS.TD.JD, tNSS.SD, tNSS.TD.JD

Examples

Run this code
# Create innovation series with block-wise changing variances
n1 <- 200
n2 <- 500
n3 <- 300
n <- n1 + n2 + n3
innov1 <- c(rnorm(n1, 0, 1), rnorm(n2, 0, 3), rnorm(n3, 0, 5))
innov2 <- c(rnorm(n1, 0, 1), rnorm(n2, 0, 5), rnorm(n3, 0, 3))
innov3 <- c(rnorm(n1, 0, 5), rnorm(n2, 0, 3), rnorm(n3, 0, 1))
innov4 <- c(rnorm(n1, 0, 5), rnorm(n2, 0, 1), rnorm(n3, 0, 3))

# Generate the observations
vecx <- cbind(as.vector(arima.sim(n = n, list(ar = 0.8), innov = innov1)),
              as.vector(arima.sim(n = n, list(ar = c(0.5, 0.1)), innov = innov2)),
              as.vector(arima.sim(n = n, list(ma = -0.7), innov = innov3)),
              as.vector(arima.sim(n = n, list(ar = 0.5, ma = -0.5), innov = innov4)))
             
# Vector to tensor
tenx <- t(vecx)
dim(tenx) <- c(2, 2, n)

# Run TNSS-JD
res <- tNSS.JD(tenx, K = 6)
res$W

res <- tNSS.JD(tenx, K = 12)
res$W

Run the code above in your browser using DataLab