tNSS.TD.JD {tensorBSS} | R Documentation |
TNSS-TD-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 and lags.
Usage
tNSS.TD.JD(x, K = 12, lags = 0:12, n.cuts = NULL, eps = 1e-06, maxiter = 100, ...)
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 |
lags |
The lag set for the autocovariance matrices. |
n.cuts |
Either a interval cutoffs (the cutoffs are used to define the two intervals that are open below and closed above, e.g. |
eps |
Convergence tolerance for |
maxiter |
Maximum number of iterations for |
... |
Further arguments to be passed to or from methods. |
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-TD-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 autocovariance matrices (specified by lags
) of the K
intervals within each mode.
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. |
lags |
The lag set. |
n.cuts |
The interval cutoffs. |
Xmu |
The data location. |
datatype |
Character string with value "ts". Relevant for |
Author(s)
Joni Virta
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), doi: 10.1109/MLSP.2017.8168122
See Also
NSS.SD
, NSS.JD
, NSS.TD.JD
, tNSS.SD
, tNSS.JD
Examples
# 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-TD-JD
res <- tNSS.TD.JD(tenx)
res$W
res <- tNSS.TD.JD(tenx, K = 6, lags = 0:6)
res$W