The vSOBI (variant of Second Order Blind Identification) method for the blind source separation of time series with stochastic volatility. The method is a variant of SOBI, which is a method designed to separate ARMA sources, and an alternative to FixNA and FixNA2 methods.
vSOBI(X, …)# S3 method for default
vSOBI(X, k = 1:12, eps = 1e-06, maxiter = 1000, G = c("pow", "lcosh"),
ordered = FALSE, acfk = NULL, original = TRUE, alpha = 0.05, …)
# S3 method for ts
vSOBI(X, …)
# S3 method for xts
vSOBI(X, …)
# S3 method for zoo
vSOBI(X, …)
A vector of lags. It can be any non-zero positive integer, or a vector consisting of them. Default is 1:12
.
Convergence tolerance.
The maximum number of iterations.
Function \(G(x)\). The choices are "pow"
(default) and "lcosh"
.
Whether to order components according to their volatility. Default is FALSE
.
A vector of lags to be used in testing the presence of serial autocorrelation. Applicable only if ordered = TRUE
.
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
.
Alpha level for linear correlation detection. Default is 0.05.
Further arguments to be passed to or from methods.
A list of class 'bssvol', inheriting from class 'bss', containing the following components:
The estimated unmixing matrix. If ordered = TRUE
, the rows are ordered according to the order of the components.
The vector of the used lags.
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 original = FALSE
, the sources with linear autocorrelation are replaced by their ARMA residuals.
The mean vector of X
.
The ordered original estimated sources as time series object standardized to have mean 0 and unit variances. Returned only if original = FALSE
.
The ARMA fits for the components with linear autocorrelation.
A logical vector. Is TRUE if ARMA fit was done to the corresponding component.
The value of the modified Ljung-Box test statistic for each component.
p-value based on the modified Ljung-Box test statistic for each component.
The value of the volatility clustering test statistic.
p-value based on the volatility clustering test statistic.
Assume that a \(p\)-variate \({\bf Y}\) with \(T\) observations is whitened, i.e. \({\bf Y}={\bf S}^{-1/2}({\bf X}_t - \frac{1}{T}\sum_{t=1}^T {\bf X}_{t})\), for \(t = 1, \ldots, T\), where \({\bf S}\) is the sample covariance matrix of \({\bf X}\). The algorithm finds an orthogonal matrix \({\bf U}\) by maximizing $${\bf D}({\bf U}) = \sum_{k = 1}^K {\bf D}_k({\bf U})$$ $$= \sum_{k = 1}^K \sum_{i = 1}^p \left(\frac{1}{T - k}\sum_{t=1}^{T - k}[G({\bf u}_i' {\bf Y}_t) G({\bf u}_i' {\bf Y}_{t + k})] - \left(\frac{1}{T - k}\right)^2\sum_{t=1}^{T - k}[G({\bf u}_i' {\bf Y}_t)]\sum_{t=1}^{T - k}[G({\bf u}_i' {\bf Y}_{t + k})]\right)^2.$$ where \(i = 1, \ldots, p\), \(k = 1, \ldots, K\) and \(t = 1, \ldots, 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 \({\bf U} = ({\bf u}_1, {\bf u}_2, \ldots, {\bf u}_p)'\).
Matrix \({\bf T}_{ik}\) is a partial derivative of \({\bf D}_k({\bf U})\) with respect to \({\bf u}_i\).
Then \({\bf T}_k = ({\bf T}_{1k}, \ldots, {\bf T}_{pk})'\), where \(p\) is the number of columns in \({\bf Y}\), and \({\bf T} = \sum_{k = 1}^K {\bf T}_k\).
The update for the orthogonal matrix \({\bf U}_{new} = ({\bf TT}')^{-1/2}{\bf T}\) is calculated at each iteration step. The algorithm stops when
$$||{\bf U}_{new} - {\bf U}_{old}||$$
is less than eps
.
The final unmixing matrix is then \({\bf W} = {\bf US}^{-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
.
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. (2017), On Independent Component Analysis with Stochastic Volatility Models, Austrian Journal of Statistics, 46(3--4), 57--66.
# NOT RUN {
if(require("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
}
# }
Run the code above in your browser using DataLab