gFOBI: Generalized FOBI

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

View source: R/gFOBI.R

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.

See Also

FOBI, frjd, lbtest, auto.arima

Examples

 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

tsBSS documentation built on Nov. 18, 2017, 4:01 a.m.