时间序列分析:AIC

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

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

图 1

图 2

图 3

可见 ACF 图像呈现连续衰减,PACF 图像在滞后为 2 处截断,这看上去像是一个 AR(2) 过程,但比较特殊的是, 在滞后为 6 处有一个显著的偏自相关值。

  使用如下代码拟合 p=166 个模型,输出其 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")
}
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") }
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 = 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 = 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,这是否意味着就应该选择 AR(6) 模型呢?

  值得注意的是,模型的阶数越高,具有的参数就越多,模型就越容易过拟合。一个更好的评价标准,应该能够结合模型的拟合质量和复杂度,使得模型即能很好地拟合数据,又不至于过度复杂,导致过拟合的风险。

  AIC(Akaike Information Criterion)就是这样的一个评价标准,它的一般定义为

AIC=2log()+2×

一个简化的版本可以写成

AIC=log(ˆσ2)+n+2pn

其中 ˆσ2=SSE/nn 为样本长度,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")
}
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") }
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 = 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 = 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,应该选择 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)
set.seed(42) ts.data <- arima.sim(list(order=c(2, 0, 0), ar=c(0.5, 0.15)), n=500)
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)
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)
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 处就不存在显著偏自相关了。