时间序列分析: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.hat
为 4.02255420924941
,可见估计结果与实际值都很接近。