The FixNA (Shi et al., 2009) and FixNA2 (Matilainen et al., 2016) methods for blind source separation problem. It is used in a case of time series with stochastic volatility. These methods are alternatives to vSOBI method.

1 2 3 4 5 6 |

`X` |
Numeric matrix or multivariate time series object of class |

`k` |
Vector of lags. Lag can be any non-zero positive integer, or a vector consisting of them. Default is |

`eps` |
Convergence tolerance. |

`maxiter` |
Maximum number of iterations. |

`G` |
Function |

`method` |
Method to be used. Choices are |

`...` |
Further arguments to be passed to or from methods. |

Assume that *Y* has *p* columns and it is whitened, i.e. *Y = S^(-1/2)*(X - (1/T)*sum_t(X_(ti)))*, where *S* is a sample covariance matrix of *X*. The algorithm for method FixNA finds an orthogonal matrix *U* by maximizing

*D_1(U) = sum_k(D_k1(U)) = sum_i(sum_k((1/(T - k))*sum_t[G(u_i' Y_t)*G(u_i' Y_(t + k))])) *

and the algorithm for method FixNA2

*D_2(U) = sum_k(D_k2(U))*

*D_2(U) = sum_k(D_k2(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))]|)),*

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_mik* is a partial derivative of *D_mk(U)*, for *m = 1, 2*, with respect to *u_i*.
Then *T_mk = (T_m1k, …, T_mpk)'*, where *p* is the number of columns in *Y*, and *T = sum(T_mk)*.
The update for the orthogonal matrix *U.new = (T_m T_m')^(-1/2)*T_m* 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)*.

A list with class 'bss' containing the following components:

`W ` |
The estimated unmixing matrix. |

`k ` |
The vector of the used lags. |

`S ` |
Estimated sources as time series object standardized to have mean 0 and unit variances. |

Markus Matilainen

Hyvärinen, A. (2001), *Blind source separation by nonstationarity of variance: A cumulant-based approach*, IEEE Transactions on Neural Networks, 12(6): 1471-1474.

Matilainen, M., Miettinen, J., Nordhausen, K., Oja, H. and Taskinen, S. (2016), *ICA and Stochastic Volatility Models*, Proceedings of the XI International Conference on Computer Data Analysis and Modeling (CDAM'2016), 30–37.

Shi, Z., Jiang, Z. and Zhou, F. (2009), * Blind source separation with nonlinear autocorrelation
and non-gaussianity*, Journal of Computational and Applied Mathematics, 223(1): 908-915.

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 <- FixNA(X)
res
coef(res)
plot(res)
head(bss.components(res))
MD(res$W, A) # Minimum Distance Index, should be close to zero
``` |

Questions? Problems? Suggestions? Tweet to @rdrrHQ or email at ian@mutexlabs.com.

Please suggest features or report bugs with the GitHub issue tracker.

All documentation is copyright its authors; we didn't write any of that.