时间序列分析:Yule-Walker 估计示例
Contents [show]
1. AR(2)
考虑 AR(2) 过程
Xt=ϕ1Xt−1+ϕ2Xt−2+et
其中 et∼N(0,σ2e),et 独立于 Xt−1,Xt−2,⋯,并假设序列具有零均值。
1.1. 估计 ϕ
首先计算样本的自相关 r1 和 r2,由方程
[r1r2]=[1r1r11][ˆϕ1ˆϕ2]
可以解得参数 ˆϕ1 和 ˆϕ2。
1.2. 估计方差
对式 (1) 等号两边计算方差,得
Var(Xt)=ϕ21Var(Xt−1)+ϕ22Var(Xt−2)+2ϕ1ϕ2Cov(Xt−1,Xt−2)+σ2e
可以解得
\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
,可见估计结果与实际值都很接近。