AR的估计(pp) R 中的“lm”与“arima”的模型:不同的结果

机器算法验证 r 回归 时间序列 有马 线性模型
2022-03-16 08:05:46

我正在阅读《预测:原则与实践》一书,同时尝试“手动”编写所有内容,以便更好地理解。

我发现了一些我无法解释的东西:

  1. 给定由 AR(2) 过程生成的时间序列,
  2. 我尝试将其建模为线性回归问题
  3. 从我到目前为止所读到的内容来看——应该完全有可能使用这两种方法找到匹配的系数。

不幸的是,我得到了不同的结果。问题是为什么?

AR(p) 模型由以下等式描述:

yt=ϵt+ϕ1yt1+ϕ2yt2+...+ϕpytp

我已经将时间序列滞后了 1 和 2,并创建了具有三列的经典数据框:

  • 当前 x
  • t-1 x
  • t-2 x 并执行回归。

R代码示例如下:

library(xts)
x <- arima.sim(model = list(order=c(2,0,0), ar=c(0.6,0.3)), n=100)
x.ts <- as.xts(x)

# Generate dataframe
x.lag1 <- lag(x.ts, 1)
x.lag2 <- lag(x.ts, 2)
x.df <- data.frame(
  x.curr=x.ts[-c(1:2)],
  x.lag1=x.lag1[-c(1:2)],
  x.lag2=x.lag2[-c(1:2)]

)

# Fit regression
fit.x <- lm(x.curr ~ ., data=x.df)
summary(fit.x)

# Fit ARIMA
arima(x = x.ts, order = c(2,0,0), include.mean = FALSE)

结果完全不同:

 #Regression results
 Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
 (Intercept)  0.08173    0.11102   0.736    0.463    
 x.lag1       0.54860    0.10082   5.441 4.11e-07 ***
 x.lag2       0.15724    0.09883   1.591    0.115    

# Arima results
      ar1     ar2        intercept
      0.5919  0.1645     0.5572
s.e.  0.0983  0.1009     0.4268

系数相似,但略有不同。问题:

  • 为什么会这样?AR(p)过程中的每个观察中都包含这个随机误差分量吗?
  • 如何使用回归对具有差分(非平稳)的 ARMA 过程进行建模?我应该像这样将回归模型拟合到差异和滞后的时间序列吗?
1个回答

有几个原因。一方面,您的 ARMA 模型不包括均值/截距。另一方面,ARMA 默认情况下仅使用平方和来查找迭代最大似然方案的起点。最小二乘回归(丢弃早期数据点)通常称为时间序列中的条件平方和 (CSS)。

这些应该匹配

summary(lm(x.curr ~ ., data=x.df))
arima(x = x.ts, order = c(2,0,0), include.mean = T, method="CSS") # note the mean and method arguments

好吧,您会注意到lm' 截距和arima' 均值之间存在差异。关系是截距等于平均时间(1ϕ1ϕ2). 您可以验证这是否有效。

此外,这使一切变得更加混乱,该arima函数将调用它的意思为截距。这是其他问题(例如此问题)中涉及的一个众所周知的问题,并且在此处也进行了说明

还有一件事:只有在查看均值零 AR 模型时,您对 AR(p) 模型的描述才是正确的。一般来说,你可以把它写成

(1ϕ1BϕpBp)(Xtμ)=ϵt
在哪里μ是平均值,或
(1ϕ1BϕpBp)Xt=c+ϵt
在哪里c是截距。这将帮助您解决上述截距/均值困境。

最后,关于你的最后一个问题:

如何使用回归对具有差分(非平稳)的 ARMA 过程进行建模?我应该像这样将回归模型拟合到差异和滞后的时间序列吗?

您可以区分您的非平稳序列,也许diff在 R 中,或者通过将order调用中的参数更改为arima. 例如,将 AR(3) 拟合到差异数据与 ARIMA(3,1,0) 相同,因此需要参数c(3,1,0)