The vSOBI method for blind source separation problem. It is used in case of time series with stochastic volatility.
The method is a variant of SOBI, which is a method designed to separate ARMA sources.
Usage
vSOBI(X, ...)
## Default S3 method:
vSOBI(X, k = 1:12, eps = 1e-06, maxiter = 1000, ...)
## S3 method for class 'ts'
vSOBI(X, ...)
Arguments
X
Numeric matrix or multivariate time series object of class ts. Missing values are not allowed.
k
Vector of lags. Lag can be any non-zero positive integer, or a vector consisting of them. Default is 1:12.
eps
Convergence tolerance.
maxiter
Maximum number of iterations.
...
Further arguments to be passed to or from methods.
Details
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 finds an orthogonal matrix U by maximizing
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, where
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).
Value
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.
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. (2016), A variant of SOBI to accommodate stochastic volatility, Submitted.
See Also
SOBI
Examples
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