PVC {tsBSS} | R Documentation |
PVC (Principal Volatility Component) estimator for the blind source separation (BSS) problem. This method is a modified version of PVC by Hu and Tsay (2014).
PVC(X, ...)
## Default S3 method:
PVC(X, k = 1:12, ordered = FALSE, acfk = NULL, original = TRUE, alpha = 0.05, ...)
## S3 method for class 'ts'
PVC(X, ...)
## S3 method for class 'xts'
PVC(X, ...)
## S3 method for class 'zoo'
PVC(X, ...)
X |
A numeric matrix or a multivariate time series object of class |
k |
A vector of lags. It can be any non-zero positive integer, or a vector consisting of them. Default is |
ordered |
Whether to order components according to their volatility. Default is |
acfk |
A vector of lags to be used in testing the presence of serial autocorrelation. Applicable only if |
original |
Whether to return the original components or their residuals based on ARMA fit. Default is |
alpha |
Alpha level for linear correlation detection. Default is 0.05. |
... |
Further arguments to be passed to or from methods. |
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
.
Then for each lag k
we calculate
\widehat{Cov}({\bf Y}_t {\bf Y}_t', Y_{ij, t-k}) = \frac{1}{T}\sum_{t = k + 1}^T \left({\bf Y}_t {\bf Y}_t' - \frac{1}{T-k}\sum_{t = k+1}^T {\bf Y}_t {\bf Y}_t' \right)\left(Y_{ij, t-k} - \frac{1}{T-k}\sum_{t = k+1}^T {Y}_{ij, t-k}\right),
where t = k + 1, \ldots, T
and Y_{ij, t-k} = Y_{i, t-k} Y_{j, t-k}, i, j = 1, \ldots, p
.
Then
{\bf g}_k({\bf Y}) = \sum_{i = 1}^p \sum_{j=1}^p (\widehat{Cov}({\bf Y}_t {\bf Y}_t', Y_{ij, t-k}))^2.
where i,j = 1, \ldots, p.
Thus the generalized kurtosis matrix is
{\bf G}_K({\bf Y}) = \sum_{k = 1}^K {\bf g}_k({\bf Y}),
where k = 1, \ldots, K
is the set of chosen lags.
Then \bf U
is the matrix with eigenvectors of {\bf G}_K({\bf Y})
as its rows.
The final unmixing matrix is then {\bf W} = {\bf US}^{-1/2}
, where the average value of each row is set to be positive.
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
.
A list of class 'bssvol', inheriting from class 'bss', containing the following components:
W |
The estimated unmixing matrix. If |
k |
The vector of the used lags. |
S |
The estimated sources as time series object standardized to have mean 0 and unit variances. If |
MU |
The mean vector of |
If ordered = TRUE
, then also the following components included in the list:
Sraw |
The ordered original estimated sources as time series object standardized to have mean 0 and unit variances. Returned only if |
fits |
The ARMA fits for the components with linear autocorrelation. |
armaeff |
A logical vector. Is TRUE 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. |
Jari Miettinen, Markus Matilainen
Miettinen, M., Matilainen, M., Nordhausen, K. and Taskinen, S. (2020), Extracting Conditionally Heteroskedastic Components Using Independent Component Analysis, Journal of Time Series Analysis,41, 293–311.
Hu, Y.-P. and Tsay, R. S. (2014), Principal Volatility Component Analysis, Journal of Business & Economic Statistics, 32(2), 153–164.
comVol
, gSOBI
, lbtest
, auto.arima
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 <- PVC(X)
res
coef(res)
plot(res)
head(bss.components(res))
MD(res$W, A) # Minimum Distance Index, should be close to zero
}