Learn R Programming

mvLSW (version 1.2.5)

varEWS: Asymptotic Variance of the mvEWS Estimate

Description

Calculates the asymptotic variance of a multivariate evolutionary wavelet spectrum estimate.

Usage

varEWS(object, ACWIP = NULL, verbose = FALSE)

Arguments

object

A mvLSW object containing the multivariate evolutionary wavelet spectrum. Matrices must be positive definite, i.e. information item min.eig.val must be greater than zero.

ACWIP

4D array containing the wavelet autocorrelation inner product functions. Set to NULL by default and therefore evaluated within the command based on the information supplied by object.

verbose

Logical. Controls the printing of messages whist the computations progress. Set as FALSE as default.

Value

Invisibly returns a mvLSW object containing the asymptotic variance of the multivariate evolutionary wavelet spectrum.

Details

The varEWS commands evaluate the asymptotic variance of a multivariate evolutionary wavelet spectrum (mvEWS) estimate. Note, the variance is only applicable when the mvEWS is smoothed consistently across all levels with list item smooth.type="all". This can be written in terms of the smoothed periodogram relating to the bias correction of the mvEWS estimate, where \(A_{j,k}\) is the inner product matrix of the wavelet autocorrelation function:

$$Var( \hat{S}^{(p,q)}_{j,k} ) = \sum_{l_1,l_2=1}^{J} (A^{-1})_{j,l_1} (A^{-1})_{j,l_2} Cov( \tilde{I}^{(p,q)}_{l_1,k}, \tilde{I}^{(p,q)}_{l_1,k})$$

The covariance between elements of the smoothed periodogram can also be expressed in terms of the raw wavelet periodogram:

$$Cov( \tilde{I}^{(p,q)}_{l_1,k}, \tilde{I}^{(p,q)}_{l_1,k}) = \sum_{m_1,m_2} W_{m_1} W_{m_2} Cov( I^{(p,q)}_{l_1,m_1}, I^{(p,q)}_{l_2,m_2} )$$

The weights \(W_i\), for integer i, define the smoothing kernel function that is evaluated by the kernel command. Note that \(W_i = W_{-i}\) and \(\sum_i W_i = 1\).

The final step is to derive the covariance of the raw periodogram. This has a long derivation, which can be concisely calculated by:

$$Cov( I^{(p,q)}_{j,k}, I^{(p,q)}_{l,m} ) = E(p,j,k,q,l,m)^2 + E(p,j,k,p,l,m)E(q,j,k,q,l,m)$$ where $$E(p,j,k,q,l,m) = \sum_{h=1}^{J} A^{k-m}_{j,l,h} S^{(p,q)}_h((k+m)/2T) $$

Here, \(A^{\lambda}_{j,l,h}\) defines the autocorrelation wavelet inner product function and \(S^{(p,q)}_{j}(k/T)\) is the true spectrum of the process between channels p & q, level j and location k. The true spectrum is not always available and so this may be substituted with the smoothed and bias corrected mvEWS estimate. For practical purposes, if k+m is odd then the average between the available spectrum values at neighbouring locations are substituted.

For efficiency purpose, if the varEWS command is going to be called multiple times then it is highly recommended that the autocorrelation wavelet inner product should be evaluated beforehand by AutoCorrIP and supplied via the ACWIP argument.

References

Taylor, S.A.C., Park, T.A. and Eckley, I. (2019) Multivariate locally stationary wavelet analysis with the mvLSW R package. Journal of statistical software 90(11) pp. 1--16, doi: 10.18637/jss.v090.i11.

Park, T. (2014) Wavelet Methods for Multivariate Nonstationary Time Series, PhD thesis, Lancaster University, pp. 91-111.

See Also

ipndacw, AutoCorrIP, as.mvLSW, mvEWS

Examples

Run this code
# NOT RUN {
## Define evolutionary wavelet spectrum, structure only on level 2
Spec <- array(0, dim=c(3, 3, 8, 256))
Spec[1, 1, 2, ] <- 10
Spec[2, 2, 2, ] <- c(rep(5, 64), rep(0.6, 64), rep(5, 128))
Spec[3, 3, 2, ] <- c(rep(2, 128), rep(8, 128))
Spec[2, 1, 2, ] <- Spec[1, 2, 2, ] <- punif(1:256, 65, 192)
Spec[3, 1, 2, ] <- Spec[1, 3, 2, ] <- c(rep(-1, 128), rep(5, 128))
Spec[3, 2, 2, ] <- Spec[2, 3, 2, ] <- -0.5
EWS <- as.mvLSW(x = Spec, filter.number = 1, family = "DaubExPhase",
  min.eig.val = NA)

## Sample time series and estimate the EWS.
set.seed(10)
X <- rmvLSW(Spectrum = EWS)
EWS_X <- mvEWS(X, kernel.name = "daniell", kernel.param = 20)

## Evaluate asymptotic spectral variance 
SpecVar <- varEWS(EWS_X)

## Plot Estimate & 95% confidence interval
CI <- ApxCI(object = EWS_X, var = SpecVar, alpha = 0.05)
plot(x = EWS_X, style = 2, info = 2, Interval = CI)
# }

Run the code above in your browser using DataLab