FixNA: The FixNA method for Blind Source Separation

Description Usage Arguments Details Value Author(s) References See Also Examples

View source: R/FixNA.R

Description

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

Usage

1
2
3
4
5
6
FixNA(X, ...)

## Default S3 method:
FixNA(X, k = 1:12, eps = 1e-06, maxiter = 1000, G = "pow", method = "FixNA", ...)
## S3 method for class 'ts'
FixNA(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.

method

The method to be used. The choices are FixNA (default) and FixNA2.

...

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

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).

Value

A list with 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.

Author(s)

Markus Matilainen

References

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. (2017), On Independent Component Analysis with Stochastic Volatility Models, Austrian Journal of Statistics, 46(3–4), 57–66.

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.

See Also

vSOBI

Examples

 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

tsBSS documentation built on Aug. 18, 2017, 5:04 p.m.