# gFOBI: Generalized FOBI In tsBSS: Blind Source Separation and Supervised Dimension Reduction for Time Series

## Description

The gFOBI method for blind source separation problem. It is designed for time series with stochastic volatility. The method is a generalization of FOBI, which is a method designed for iid data.

## Usage

 ```1 2 3 4 5 6 7 8``` ```gFOBI(X, ...) ## Default S3 method: gFOBI(X, k = 0:12, eps = 1e-06, maxiter = 100, method = "frjd", na.action = na.fail, weight = NULL, ordered = FALSE, acfk = NULL, original = TRUE, ...) ## S3 method for class 'ts' gFOBI(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-negative integer, or a vector consisting of them. Default is `0:12`. If k = 0, this method reduces to `FOBI`. `eps` Convergence tolerance. `maxiter` The maximum number of iterations. `method` The method to use for the joint diagonalization. The options are `rjd` and `frjd`. Default is `frjd`. `na.action` A function which indicates what should happen when the data contain 'NA's. Default is to fail. `weight` A vector of length k to give weight to the different matrices in joint diagonalization. If NULL, all matrices have equal weight. `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`. `...` Other arguments passed on to `auto.arima` function.

## 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. Algorithm first calculates

B^ij_k(Y) = (1/(T - k))*sum[Y_(t + k) Y_t' E^ij Y_t Y_(t + k)'],

where t = 1, …, T, and then

B_k(Y) = sum(B^ii_k(Y)),

for i = 1, …, p.

The algorithm finds an orthogonal matrix U by maximizing

sum(||diag(U B_k(Y) U')||^2).

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, Klaus Nordhausen

## References

Cardoso, J.-F., (1989), Source Separation Using Higher Order Moments, in: Proceedings of the IEEE International Conference on Acoustics, Speech and Signal Processing, 2109–2112.

Matilainen, M., Nordhausen, K. and Oja, H. (2015), New Independent Component Analysis Tools for Time Series, Statistics & Probability Letters, 105, 80–87.

`FOBI`, `frjd`, `lbtest`, `auto.arima`
 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18``` ```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 X <- cbind(s1, s2, s3) %*% t(A) res <- gFOBI(X) res coef(res) plot(res) head(bss.components(res)) MD(res\$W, A) # Minimum Distance Index, should be close to zero ```