# vSOBI: A Variant of SOBI for Blind Source Separation In tsBSS: Blind Source Separation and Supervised Dimension Reduction for Time Series

## Description

The vSOBI method for the blind source separation problem. It is designed for time series with stochastic volatility. The method is a variant of SOBI, which is a method designed to separate ARMA sources, and an alternative to FixNA and FixNA2 methods.

## Usage

 ```1 2 3 4 5 6 7``` ```vSOBI(X, ...) ## Default S3 method: vSOBI(X, k = 1:12, eps = 1e-06, maxiter = 1000, G = "pow", ordered = FALSE, acfk = NULL, original = TRUE, ...) ## S3 method for class 'ts' vSOBI(X, ...) ```

## Arguments

 `X` A numeric matrix or a multivariate time series object of class `ts`. Missing values are not allowed. `k` A vector of lags. It can be any non-zero positive integer, or a vector consisting of them. Default is `1:12`. `eps` Convergence tolerance. `maxiter` The maximum number of iterations. `G` Function G(x). The choices are `pow` (default) and `lcosh`. `ordered` Whether to order components according to their volatility. Default is `FALSE`. `acfk` A vector of lags to be used in testing the presence of serial autocorrelation. Applicable only if `ordered = TRUE`. `original` Whether to return the original components or their residuals based on ARMA fit. Default is `TRUE`, i.e. the original components are returned. Applicable only if `ordered = TRUE`. `...` Further arguments to be passed to or from methods.

## Details

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 algorithm finds an orthogonal matrix U by maximizing

D(U) = sum_k(D_k(U))

= sum_k(sum_i(((1/(T - k))*sum_t[G(u_i' Y_t)*G(u_i' Y_(t + k))] - (1/(T - k)^2*sum_t[G(u_i' Y_t)]*sum_t[G(u_i' Y_(t + k))])^2))),

where i = 1, …, p, k = 1, …, K and t = 1, …, T. For function G(x) the choices are x^2 and log(cosh(x)).

The algorithm works iteratively starting with `diag(p)` as an initial value for an orthogonal matrix U = (u_1, u_2, …, u_p)'.

Matrix T_ik is a partial derivative of D_k(U) with respect to u_i. Then T_k = (T_1k, …, T_pk)', where p is the number of columns in Y, and T = sum(T_k). The update for the orthogonal matrix U.new = (TT')^(-1/2)*T is calculated at each iteration step. The algorithm stops when

||U.new - U.old||

is less than `eps`. The final unmixing matrix is then W = U S^(-1/2).

For `ordered = TRUE` the function orders the sources according to their volatility. First a possible linear autocorrelation is removed using `auto.arima`. Then a squared autocorrelation test is performed for the sources (or for their residuals, when linear correlation is present). The sources are then put in a decreasing order according to the value of the test statistic of the squared autocorrelation test. For more information, see `lbtest`.

## Value

A list with class 'bssvol' (inherits from class 'bss') containing the following components:

 `W ` The estimated unmixing matrix. `k ` The vector of the used lags. `S ` The estimated sources as time series object standardized to have mean 0 and unit variances. If `ordered = TRUE`, then components are ordered according to their volatility.

If `ordered = TRUE`, then also the following components included in the list:

 `fits ` The ARMA fits for the components with linear autocorrelation. `armaeff ` A logical vector. Has value 1 if ARMA fit was done to the corresponding component. `linTS ` The value of the modified Ljung-Box test statistic for each component. `linP ` P-value based on the modified Ljung-Box test statistic for each component. `volTS ` The value of the volatility clustering test statistic. `volP ` P-value based on the volatility clustering test statistic.

## Author(s)

Markus Matilainen

## References

Belouchrani, A., Abed-Meriam, K., Cardoso, J.F. and Moulines, R. (1997), A blind Source Separation Technique Using Second-Order Statistics, IEEE Transactions on Signal Processing, 434–444.

Matilainen, M., Miettinen, J., Nordhausen, K., Oja, H. and Taskinen, S. (2017), On Independent Component Analysis with Stochastic Volatility Models, Austrian Journal of Statistics, 46(3–4), 57–66.

`FixNA`, `SOBI`, `lbtest`, `auto.arima`
 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20``` ```library(stochvol) n <- 10000 A <- matrix(rnorm(9), 3, 3) # simulate SV models s1 <- svsim(n, mu = -10, phi = 0.8, sigma = 0.1)\$y s2 <- svsim(n, mu = -10, phi = 0.9, sigma = 0.2)\$y s3 <- svsim(n, mu = -10, phi = 0.95, sigma = 0.4)\$y # create a daily time series X <- ts(cbind(s1, s2, s3) %*% t(A), end = c(2015, 338), frequency = 365.25) res <- vSOBI(X) res coef(res) plot(res) head(bss.components(res)) MD(res\$W, A) # Minimum Distance Index, should be close to zero ```