时间序列分析:AIC
使用 ACF 和 PACF 图像可以在一定程度上帮助我们确定数据所符合的模型及其阶数,但面对实际的数据时,往往会发现多个模型都能较好地拟合数据。
假设有一个时间序列 ts.data
如图 1 所示,计算其 ACF 和 PACF 图像如图 2、图 3 所示。
可见 ACF 图像呈现连续衰减,PACF 图像在滞后为 $2$ 处截断,这看上去像是一个 $\mathrm{AR}(2)$ 过程,但比较特殊的是, 在滞后为 $6$ 处有一个显著的偏自相关值。
使用如下代码拟合 $p = 1 \; 到 \; 6$ 的 $6$ 个模型,输出其 $SSE$:
for(p in 1:6) { m <- arima(ts.data, order=c(p, 0, 0), include.mean=FALSE) cat("p =", p, "\tSSE:", sum(resid(m)^2), "\n") }
输出为
p = 1 SSE: 467.2218 p = 2 SSE: 461.862 p = 3 SSE: 461.8457 p = 4 SSE: 460.0376 p = 5 SSE: 459.8203 p = 6 SSE: 455.4693
可见,$p=6$ 的模型具有最小的 $SSE$,这是否意味着就应该选择 $\mathrm{AR}(6)$ 模型呢?
值得注意的是,模型的阶数越高,具有的参数就越多,模型就越容易过拟合。一个更好的评价标准,应该能够结合模型的拟合质量和复杂度,使得模型即能很好地拟合数据,又不至于过度复杂,导致过拟合的风险。
AIC(Akaike Information Criterion)就是这样的一个评价标准,它的一般定义为
\begin{equation}
AIC = -2 \log(最大似然) + 2 \times 模型参数 \tag{1}
\end{equation}
一个简化的版本可以写成
\begin{equation}
AIC = \log(\hat \sigma^2) + \frac{n + 2p}{n} \tag{1}
\end{equation}
其中 $\hat \sigma^2 = SSE / n$,$n$ 为样本长度,$p$ 为参数个数。可见 AIC 结合各模型误差和参数个数,误差越小、参数越少,则 AIC 越小,应该尽量选择 AIC 小的模型。
计算前面 $6$ 个模型的 AIC 如下:
for(p in 1:6) { m <- arima(ts.data, order=c(p, 0, 0), include.mean=FALSE) cat("p =", p, "\tSSE =", sum(resid(m)^2), "\tAIC =", m$aic, "\n") }
输出为
p = 1 SSE = 467.2218 AIC = 1389.388 p = 2 SSE = 461.862 AIC = 1385.643 p = 3 SSE = 461.8457 AIC = 1387.626 p = 4 SSE = 460.0376 AIC = 1387.68 p = 5 SSE = 459.8203 AIC = 1389.446 p = 6 SSE = 455.4693 AIC = 1386.751
可见 $p=2$ 的模型具有最小的 AIC,应该选择 $\mathrm{AR}(2)$ 模型。
其实前面用到的 ts.data
是使用如下代码生成的:
set.seed(42) ts.data <- arima.sim(list(order=c(2, 0, 0), ar=c(0.5, 0.15)), n=500)
增大样本数量到 1000,并绘制 PACF 如图 4:
set.seed(42) ts.data.long <- arima.sim(list(order=c(2, 0, 0), ar=c(0.5, 0.15)), n=1000) pacf(ts.data.long)
可见此时在滞后为 $6$ 处就不存在显著偏自相关了。