SSAcor | R Documentation |
SSAcor method for identifying non-stationarity in the covariance structure.
SSAcor(X, ...) ## Default S3 method: SSAcor(X, K, n.cuts = NULL, tau = 1, eps = 1e-6, maxiter = 2000, ...) ## S3 method for class 'ts' SSAcor(X, ...)
X |
A numeric matrix or a multivariate time series object of class |
K |
Number of intervals the time series is split into. |
n.cuts |
A K+1 vector of values that correspond to the breaks which are used for splitting the data. Default is intervals of equal length. |
tau |
The lag as a scalar or a vector. Default is 1. |
eps |
Convergence tolerance. |
maxiter |
The maximum number of iterations. |
... |
Further arguments to be passed to or from methods. |
Assume that a p-variate Y with T observations is whitened, i.e. Y = S^(-1/2)*(X_t - (1/T)*sum_t(X_t)), for t = 1, …, T, where S is the sample covariance matrix of X.
The values of Y are then split into K disjoint intervals T_i. For all lags j=1, ..., ntau, algorithm first calculates matrices
M_j = sum[(T_i/(T)) (S_(j,T) - S_(j, Ti))*(S_(j,T) - S_(j, Ti))'],
where i = 1, …, K, K is the number of breakpoints, S_(j,T) is the global sample covariance for lag j, and S_(j, Ti) is the sample covariance of values of Y which belong to a disjoint interval T_i.
The algorithm finds an orthogonal matrix U by maximizing
sum(||diag(U M_j U')||^2),
where j = 1, …, ntau.
The final unmixing matrix is then W = U S^(-1/2). Then the pseudo eigenvalues D_i = diag(U M_i U') = (d_i1, ..., d_ip) are obtained and the value of d_ij tells if the jth component is nonstationary with respect to M_i. The first k rows of W project the observed time series to the subspace of components with non-stationary covariance, and the last p-k rows to the subspace of components with stationary covariance.
A list of class 'ssabss', inheriting from class 'bss', containing the following components:
W |
The estimated unmixing matrix. |
S |
The estimated sources as time series object standardized to have mean 0 and unit variances. |
M |
Used separation matrix. |
K |
Number of intervals the time series is split into. |
D |
The sums of pseudo eigenvalues. |
DTable |
The peudo eigenvalues of size ntau*p to see which type of nonstationarity there exists in each component. |
MU |
The mean vector of |
n.cut |
Used K+1 vector of values that correspond to the breaks which are used for splitting the data. |
k |
The used lag. |
method |
Name of the method ("SSAcor"), to be used in e.g. screeplot. |
Markus Matilainen, Klaus Nordhausen
Flumian L., Matilainen M., Nordhausen K. and Taskinen S. (2021) Stationary subspace analysis based on second-order statistics. Submitted. Available on arXiv: https://arxiv.org/abs/2103.06148
JADE
n <- 5000 A <- rorth(4) z1 <- rtvAR1(n) z2a <- arima.sim(floor(n/3), model = list(ar = c(0.5), innov = c(rnorm(floor(n/3), 0, 1)))) z2b <- arima.sim(floor(n/3), model = list(ar = c(0.2), innov = c(rnorm(floor(n/3), 0, 1.28)))) z2c <- arima.sim(n - 2*floor(n/3), model = list(ar = c(0.8), innov = c(rnorm(n - 2*floor(n/3), 0, 0.48)))) z2 <- c(z2a, z2b, z2c) z3 <- arima.sim(n, model = list(ma = c(0.72, 0.24), ar = c(0.14, 0.45))) z4 <- arima.sim(n, model = list(ar = c(0.34, 0.27, 0.18))) Z <- cbind(z1, z2, z3, z4) library(zoo) X <- as.zoo(tcrossprod(Z, A)) # A zoo object res <- SSAcor(X, K = 6, tau = 1) ggscreeplot(res, type = "barplot", color = "gray") # Two non-zero eigenvalues # Plotting the components as a zoo object plot(res) # The first two are nonstationary in autocovariance
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.