时间序列分析:Yule-Walker 估计示例

1. $\mathrm{AR}(2)$

  考虑 $\mathrm{AR}(2)$ 过程

\begin{equation}
X_t = \phi_1 X_{t-1} + \phi_2 X_{t-2} + e_t \tag{1}
\end{equation}

其中 $e_t \sim N(0, \sigma_e^2)$,$e_t$ 独立于 $X_{t-1}, X_{t-2}, \cdots$,并假设序列具有零均值。

1.1. 估计 $\phi$

  首先计算样本的自相关 $r_1$ 和 $r_2$,由方程

\begin{equation}
\begin{bmatrix}
r_1 \\
r_2
\end{bmatrix} =
\begin{bmatrix}
1 & r_1 \\
r_1 & 1
\end{bmatrix}
\begin{bmatrix}
\hat \phi_1 \\
\hat \phi_2
\end{bmatrix}
\end{equation}

可以解得参数 $\hat \phi_1$ 和 $\hat \phi_2$。

1.2. 估计方差

  对式 $(1)$ 等号两边计算方差,得

\begin{equation}
\mathrm{Var}(X_t) = \phi_1^2 \mathrm{Var}(X_{t-1}) + \phi_2^2 \mathrm{Var}(X_{t-2}) + 2\phi_1\phi_2 \mathrm{Cov}(X_{t-1}, X_{t-2}) + \sigma_e^2 \tag{2}
\end{equation}

可以解得

\begin{equation}
\sigma_e^2 = \gamma_0 – \phi_1^2\gamma_1 + \phi_2^2\gamma_2 – 2\phi_1\phi_2\gamma_1 = \gamma_0(1 – \phi_1^2 – \phi_2^2 – 2\phi_1\phi_2\rho_1) \tag{3}
\end{equation}

  由 Yule-Walker 方程组

\begin{equation}
\begin{bmatrix}
\rho_1 \\
\rho_2
\end{bmatrix} =
\begin{bmatrix}
1 & \rho_1 \\
\rho_1 & 1
\end{bmatrix}
\begin{bmatrix}
\phi_1 \\
\phi_2
\end{bmatrix}
\end{equation}

\begin{align}
\rho_1 = \phi_1 + \rho_1 \phi_2 \\
\rho_2 = \rho_1 \phi_1 + \phi_2
\end{align}

于是

\begin{align}
1 – \phi_1^2 – \phi_2^2 – 2\phi_1\phi_2\rho_1 &= 1 – \phi_1^2 – \phi_1\phi_2\rho_1 – \phi_2^2 – \phi_1\phi_2\rho_1 \\
&= 1 – \phi_1(\phi_1 + \rho_1\phi_2) – \phi_2(\phi_2 + \rho_1\phi_1) \\
&= 1 – \phi_1\rho_1 – \phi_2\rho_2
\end{align}

将上式带入式 $(3)$,得

\begin{equation}
\sigma_e^2 = \gamma_0(1 – \phi_1\rho_1 – \phi_2\rho_2) \tag{4}
\end{equation}

故 $\sigma_e^2$ 的 Yule-Walker 估计是

\begin{equation}
\hat \sigma_e^2 = c_0(1 – \hat\phi_1 r_1 – \hat\phi_2 r_2) \tag{5}
\end{equation}

其中 $c_0$ 是样本协方差系数,$r_1, r_2$ 是样本自相关系数,$\hat\phi_1, \hat\phi_2$ 是估计的参数。

  更一般地,对 $\mathrm{AR}(2)$ 过程 $\sigma_e^2$ 的 Yule-Walker 估计是

\begin{equation}
\hat \sigma_e^2 = c_0(1 – \sum_{i=1}^p \hat\phi_i r_i) \tag{6}
\end{equation}

1.3. 代码示例

  首先模拟 $\mathrm{AR}(2)$ 过程

set.seed(42)
ar.process=arima.sim(10000, model=list(ar=c(1/3, 1/2)), sd=4)

使用的参数为 $\phi_1 = 1/3$,$\phi_1 = 1/2$,$\sigma_e^2 = 4^2 = 16$。

  计算样本自相关系数

r <- acf(ar.process, plot=F)$acf[2:3]

这里 r 的值为 0.6701659498254 0.731929559010564

  构造 Yule-Walker 方程组并求解

R <- matrix(1, 2, 2)
R[1, 2] <- r[1]
R[2, 1] <- r[1]

b <- matrix(r, nrow=2, ncol=1)

phi.hat <- solve(R, b)

这里 R 的值为

1.0000000 0.6701659
0.6701659   1.0000000

b 的值为

0.6701659
0.7319296

解得 phi.hat 的值为

0.3261191
0.5133757

可见 phi.hat 的结果与实际参数($1/3, 1/2$)很接近。

  接着估计 $\hat\sigma_e^2$

c0 <- acf(ar.process, type='covariance', plot=F)$acf[1]
var.hat <- c0 * (1 - sum(phi.hat * r))
sd.hat <- sqrt(var.hat)

解得 sd.hat 的值为 4.02197762014053,与实际值 $\sigma_e^2 = 4$ 也很接近。

2. $\mathrm{AR}(3)$

  $\mathrm{AR}(3)$ 过程的 Yule-Walker 估计方法与前面类似。首先模拟 $\mathrm{AR}(3)$ 过程如下

set.seed(42)
ar.process=arima.sim(10000, model=list(ar=c(1/3, 1/2, 7/100)), sd=4)

然后进行估计

r <- acf(ar.process, plot=F)$acf[2:4]

R <- matrix(1, 3, 3)
R[1, 2] <- r[1]
R[2, 1] <- r[1]
R[1, 3] <- r[2]
R[3, 1] <- r[2]
R[2, 3] <- r[1]
R[3, 2] <- r[1]

b <- matrix(r, nrow=3, ncol=1)

phi.hat <- solve(R, b)

c0 <- acf(ar.process, type='covariance', plot=F)$acf[1]
var.hat <- c0 * (1 - sum(phi.hat * r))
sd.hat <- sqrt(var.hat)

得到的 phi.hat

0.3259706
0.5124173
0.0689914

sd.hat4.02255420924941,可见估计结果与实际值都很接近。