Learn R Programming

HDTSA (version 1.0.5)

Coint: Identifying the cointegration rank of nonstationary vector time series

Description

Coint() deals with cointegration analysis for high-dimensional vector time series proposed in Zhang, Robinson and Yao (2019). Consider the model: $${\bf y}_t = {\bf Ax}_t\,,$$ where \({\bf A}\) is a \(p \times p\) unknown and invertible constant matrix, \({\bf x}_t = ({\bf x}'_{t,1}, {\bf x}'_{t,2})'\) is a latent \(p \times 1\) process, \({\bf x}_{t,2}\) is an \(r \times 1\) \(I(0)\) process, \({\bf x}_{t,1}\) is a process with nonstationary components, and no linear combination of \({\bf x}_{t,1}\) is \(I(0)\). This function aims to estimate the cointegration rank \(r\) and the invertible constant matrix \({\bf A}\).

Usage

Coint(
  Y,
  lag.k = 5,
  type = c("acf", "urtest", "both"),
  c0 = 0.3,
  m = 20,
  alpha = 0.01
)

Value

An object of class "coint", which contains the following components:

A

The estimated \(\hat{\bf A}\).

coint_rank

The estimated cointegration rank \(\hat{r}\).

lag.k

The time lag used in function.

method

A string indicating which method is used to identify the cointegration rank.

Arguments

Y

An \(n \times p\) data matrix \({\bf Y} = ({\bf y}_1, \dots , {\bf y}_n )'\), where \(n\) is the number of the observations of the \(p \times 1\) time series \(\{{\bf y}_t\}_{t=1}^n\).

lag.k

The time lag \(K\) used to calculate the nonnegative definte matrix \(\hat{{\bf W}}_y\): $$\hat{\mathbf{W}}_y\ =\ \sum_{k=0}^{K}\hat{\mathbf{\Sigma}}_y(k)\hat{\mathbf{\Sigma}}_y(k)'\,,$$ where \(\hat{\bf \Sigma}_y(k)\) is the sample autocovariance of \( {\bf y}_t\) at lag \(k\). The default is 5.

type

The method used to identify the cointegration rank. Available options include: "acf" (the default) for the method based on the sample autocorrelations, "urtest" for the method based on the unit root tests, and "both" to apply these two methods. See Section 2.3 of Zhang, Robinson and Yao (2019) and 'Details' for more information.

c0

The prescribed constant \(c_0\) involved in the method based on the sample correlations, which is used when type = "acf" or type = "both". See Section 2.3 of Zhang, Robinson and Yao (2019) and 'Details' for more information. The default is 0.3.

m

The prescribed constant \(m\) involved in the method based on the sample correlations, which is used when type = "acf" or type = "both". See Section 2.3 of Zhang, Robinson and Yao (2019) and 'Details' for more information. The default is 20.

alpha

The significance level \(\alpha\) of the unit root tests, which is used when type = "urtest" or type = "both". See 'Details'. The default is 0.01.

Details

Write \(\hat{\bf x}_t=\hat{\bf A}'{\bf y}_t\equiv (\hat{x}_t^1,\ldots,\hat{x}_t^p)'\). When type = "acf", Coint() estimates \(r\) by $$\hat{r}=\sum_{i=1}^{p}1\bigg\{\frac{S_i(m)}{m}<c_0 \bigg\}$$ for some constant \(c_0\in (0,1)\) and some large constant \(m\), where \(S_i(m)\) is the sum of the sample autocorrelations of \(\hat{x}^{i}_{t}\) over lags 1 to \(m\), which is specified in Section 2.3 of Zhang, Robinson and Yao (2019).

When type = "urtest", Coint() estimates \(r\) by unit root tests. For \(i= 1,\ldots, p\), consider the null hypothesis $$H_{0,i}:\hat{x}_t^{p-i+1} \sim I(0)\,.$$ The estimation procedure for \(r\) can be implemented as follows:

Step 1. Start with \(i=1\). Perform the unit root test proposed in Chang, Cheng and Yao (2021) for \(H_{0,i}\).

Step 2. If the null hypothesis is not rejected at the significance level \(\alpha\), increment \(i\) by 1 and repeat Step 1. Otherwise, stop the procedure and denote the value of \(i\) at termination as \(i_0\). The cointegration rank is then estimated as \(\hat{r}=i_0-1\).

References

Chang, J., Cheng, G., & Yao, Q. (2022). Testing for unit roots based on sample autocovariances. Biometrika, 109, 543--550. tools:::Rd_expr_doi("doi:10.1093/biomet/asab034").

Zhang, R., Robinson, P., & Yao, Q. (2019). Identifying cointegration by eigenanalysis. Journal of the American Statistical Association, 114, 916--927. tools:::Rd_expr_doi("doi:10.1080/01621459.2018.1458620").

Examples

Run this code
# Example 1 (Example 1 in Zhang, Robinson and Yao (2019))
## Generate yt
p <- 10
n <- 1000
r <- 3
d <- 1
X <- mat.or.vec(p, n)
X[1,] <- arima.sim(n-d, model = list(order=c(0, d, 0)))
for(i in 2:3)X[i,] <- rnorm(n)
for(i in 4:(r+1)) X[i, ] <- arima.sim(model = list(ar = 0.5), n)
for(i in (r+2):p) X[i, ] <- arima.sim(n = (n-d), model = list(order=c(1, d, 1), ar=0.6, ma=0.8))
M1 <- matrix(c(1, 1, 0, 1/2, 0, 1, 0, 1, 0), ncol = 3, byrow = TRUE)
A <- matrix(runif(p*p, -3, 3), ncol = p)
A[1:3,1:3] <- M1
Y <- t(A%*%X)

Coint(Y, type = "both")

Run the code above in your browser using DataLab