9.2 ARIMA 误差回归在 R 中的实现

当指定Arima()函数中的参数xreg时,可利用Arima()拟合存在 ARIMA 误差项的回归模型。如果指定差分,则模型中所有变量都会进行差分。例如,以下 R 代码

fit <- Arima(y, xreg=x, order=c(1,1,0))

将会拟合模型 \(y_t' = \beta_1 x'_t + \eta'_t\)。其中 \(\eta'_t = \phi_1 \eta'_{t-1} + \varepsilon_t\) 为满足 AR(1) 过程的误差。它等价于如下模型 \[ y_t = \beta_0 + \beta_1 x_t + \eta_t, \] 其中 \(\eta_t\) 为满足 ARIMA(1,1,0) 的误差。请注意,差分之后模型中将不存在常数项,若想要差分模型中包含常数项,则需指定include.drift=TRUE

auto.arima()函数可以通过xxreg参数处理回归项。用户必须指定模型中的预测变量,auto.arima()将会选择出误差项的最佳 ARIMA 模型。

AICc 值用来确定最终模型,它可以确定模型中包含的预测变量。也就是说,需要对预测变量的所有子集重复计算 AICc 值,并选择 AICc 值最小的模型。

示例:美国个人消费及收入

9.1 为1970年至2016年第三季度美国个人消费支出和个人可支配收入的季度变化情况。我们希望根据收入的变化情况预测支出的变化,但是收入的变化并不一定导致支出的同步变化(例如,当个人失去工作后,它可能会需要几个月的时间来适应新的经济状况)。在本例中,我们忽略这种变化的复杂性,仅衡量收入平均变化对消费支出平均变化的即时影响。

cbind("消费变化" = uschange[, 1],
      "收入变化" = uschange[, 2]) %>%
  autoplot(facets=TRUE) +
    xlab("年份") + ylab("") + 
    ggtitle("美国个人消费和收入的季度变化")+
    theme(text = element_text(family = "STHeiti"))+
    theme(plot.title = element_text(hjust = 0.5))
1970年至2016年第三季度美国季度个人消费支出和个人可支配收入的百分比变化。

图 9.1: 1970年至2016年第三季度美国季度个人消费支出和个人可支配收入的百分比变化。

(fit <- auto.arima(uschange[,"Consumption"], xreg=uschange[,"Income"]))
#> Series: uschange[, "Consumption"] 
#> Regression with ARIMA(1,0,2) errors 
#> 
#> Coefficients:
#>         ar1     ma1    ma2  intercept   xreg
#>       0.692  -0.576  0.198      0.599  0.203
#> s.e.  0.116   0.130  0.076      0.088  0.046
#> 
#> sigma^2 estimated as 0.322:  log likelihood=-156.9
#> AIC=325.9   AICc=326.4   BIC=345.3

所有变量数据都是平稳的(因为我们考虑的是个人消费和收入的变化率),因此不需要再对数据进行差分。拟合模型为: \[\begin{align*} y_t &= 0.60 + 0.20 x_t + \eta_t, \\ \eta_t &= 0.69 n_{t-1} + \varepsilon_t -0.58 \varepsilon_{t-1} + 0.20 \varepsilon_{t-2},\\ \varepsilon_t &\sim \text{NID}(0,0.322). \end{align*}\]

我们可以利用residuals()函数同时画出 \(\eta_t\)\(\varepsilon_t\) 的序列图。

cbind("回归误差" = residuals(fit, type="regression"),
      "ARIMA误差" = residuals(fit, type="innovation")) %>%
  autoplot(facets=TRUE)+
  xlab('年份')+
  theme(text = element_text(family = "STHeiti"))+
  theme(plot.title = element_text(hjust = 0.5))
拟合模型的回归误差($\eta_t$)和ARIMA误差($\varepsilon_t$)。

图 9.2: 拟合模型的回归误差(\(\eta_t\))和ARIMA误差(\(\varepsilon_t\))。

ARIMA 误差应当类似于一个白噪声。

checkresiduals(fit)
误差(即ARIMA模型误差)与白噪声没有明显差异。

图 9.3: 误差(即ARIMA模型误差)与白噪声没有明显差异。

#> 
#>  Ljung-Box test
#> 
#> data:  Residuals from Regression with ARIMA(1,0,2) errors
#> Q* = 5.9, df = 3, p-value = 0.1
#> 
#> Model df: 5.   Total lags used: 8