时间序列分析:AIC

  使用 ACF 和 PACF 图像可以在一定程度上帮助我们确定数据所符合的模型及其阶数,但面对实际的数据时,往往会发现多个模型都能较好地拟合数据。

  假设有一个时间序列 ts.data 如图 1 所示,计算其 ACF 和 PACF 图像如图 2、图 3 所示。

图 1

图 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)

图 4

可见此时在滞后为 $6$ 处就不存在显著偏自相关了。