可以使用 ARIMA 对趋势平稳序列进行建模吗?

机器算法验证 时间序列 计量经济学 有马 推理
2022-03-08 01:42:53

我对使用 ARIMA(X) 建模所需的固定序列有疑问/困惑。我更多地在推理(干预的效果)方面考虑这一点,但想知道预测与推理是否会对响应产生任何影响。

问题:

我读过的所有介绍性资源都表明该系列需要静止,这对我来说很有意义,这就是 arima 中的“我”出现的地方(差异)。

让我感到困惑的是 ARIMA(X) 中趋势和漂移的使用以及对固定要求的影响(如果有的话)。

使用常数/漂移项和/或趋势变量作为外生变量(即添加“t”作为回归量)是否否定了序列平稳的要求?答案是否取决于系列是否具有单位根(例如 adf 测试)或具有确定性趋势但没有单位根?

或者

在使用 ARIMA(X) 之前,一个系列是否总是必须是静止的,通过差分和/或去趋势来实现?

4个回答

查看评论,我们似乎没有解决关于如何在确定性趋势或随机趋势之间进行选择的问题。也就是说,如何在实践中进行而不是每个案例的后果或性质。

一种方法如下:首先应用 ADF 测试。

  • 如果拒绝单位根的空值,我们就完成了。趋势(如果有的话)可以用确定性的线性趋势来表示。
  • 如果 ADF 检验的零值未被拒绝,那么我们应用 KPSS 检验(零假设是相反的,平稳性或围绕线性趋势的平稳性)。

    o 如果 KPSS 检验的零值被拒绝,那么我们得出结论,存在单位根并使用数据的一阶差分。根据系列的第一个差异,我们可以测试其他回归量的显着性或选择 ARMA 模型。

    o 如果 KPSS 检验的零值没有被拒绝,那么我们将不得不说数据没有太多信息,因为我们无法拒绝任何零假设。在这种情况下,使用系列的第一个差异可能更安全。

如前一个答案中所述,请记住,这些测试可能会受到异常值存在的影响(例如,由于记录数据时的错误或由于例如影响从给定时间点开始的系列)。因此,建议检查这些问题,并在包含一些潜在异常值的回归变量后重复之前的分析。

请记住,有不同种类的非平稳性以及如何处理它们的不同方法。常见的有四种:

1) 确定性趋势或趋势平稳性。如果您的系列属于这种类型,请取消趋势或在回归/模型中包含时间趋势。你可能想看看这个的 Frisch-Waugh-Lovell 定理。

2) 水平转变和结构性中断。如果是这种情况,您应该为每个中断包含一个虚拟变量,或者如果您的样本足够长,则分别对每个政权进行建模。

3) 改变方差。分别对样本进行建模或使用 ARCH 或 GARCH 建模类对变化的方差进行建模。

4)如果您的系列包含单位根。一般来说,您应该检查变量之间的协整关系,但由于您关心单变量预测,您应该根据积分顺序将其差异一次或两次。

为了使用 ARIMA 建模类对时间序列进行建模,以下步骤应该是适当的:

1)查看 ACF 和 PACF 以及时间序列图,看看该序列是平稳的还是非平稳的。

2) 测试系列的单位根。这可以通过多种测试来完成,其中最常见的是 ADF 测试、Phillips-Perron (PP) 测试、具有零平稳性的 KPSS 测试或最有效的 DF-GLS 测试上述测试中。笔记!如果您的系列包含结构性中断,这些测试偏向于不拒绝单位根的空值。如果您想测试这些测试的稳健性,并且如果您怀疑一个或多个结构断裂,您应该使用内生结构断裂测试。两种常见的测试是允许一次内生结构中断的 Zivot-Andrews 测试和允许两次结构中断的 Clemente-Montañés-Reyes。后者允许两种不同的模型。

3)如果系列中有单位根,那么你应该区分系列。之后,您应该运行查看 ACF、PACF 和时间序列图,并可能检查第二个单位根以确保安全。ACF 和 PACF 将帮助您决定应该包含多少个 AR 和 MA 术语。

4) 如果序列不包含单位根,但时间序列图和 ACF 表明序列具有确定性趋势,则应在拟合模型时添加趋势。有些人认为,当序列包含确定性趋势时,仅对序列进行差分是完全有效的,尽管在此过程中可能会丢失信息。无论如何,区分它以查看您需要包含的许多 AR 和/或 MA 术语是一个好主意。但时间趋势是有效的。

5) 拟合不同的模型并进行通常的诊断检查,您可能需要使用信息标准或 MSE,以便根据您拟合的样本选择最佳模型。

6)在最佳拟合模型上进行样本预测并计算损失函数,例如 MSE、MAPE、MAD,看看它们中的哪一个在使用它们进行预测时实际上表现最好,因为这就是我们想要做的!

7) 像老板一样进行样本外预测,并对结果感到满意!

确定趋势(或其他成分,如季节性)是确定性还是随机性是时间序列分析难题的一部分。我将对已经说过的内容添加几点。

1) 确定性趋势和随机趋势之间的区别很重要,因为如果数据中存在单位根(例如随机游走),则用于推理的测试统计量不遵循传统分布。有关一些详细信息和参考资料,请参阅这篇文章

我们可以模拟随机游走(应采用一阶差分的随机趋势),测试确定性趋势的显着性,并查看拒绝确定性趋势零的情况的百分比。在 R 中,我们可以这样做:

require(lmtest)
iter <- 10000
cval <- 0.05
n <- 120
rejections <- 0
set.seed(123)
for (i in seq.int(iter))
{
  x <- cumsum(rnorm(n)) # random walk
  fit <- lm(x ~ seq(n))
  if (coeftest(fit)[2,"Pr(>|t|)"] < cval)
    rejections <- rejections + 1
}
100 * rejections / iter
#[1] 88.67

在 5% 的显着性水平上,我们希望在 95% 的情况下拒绝 null,然而,在这个实验中,它仅在 10,000 次模拟随机游走中的约 89% 的情况下被拒绝。

我们可以应用单位根测试来测试是否存在单位根。但我们必须意识到,线性趋势可能反过来导致无法拒绝单位根的零值。为了解决这个问题,KPSS 检验考虑了围绕线性趋势的平稳性为零。

2)另一个问题是过程中确定性组件的解释水平或一阶差异。在具有线性趋势的模型中,截距的效果与在随机游走中的效果不同。请参阅此帖子以获取说明。

分析一下,让我们随机游走一次:

yt=μ+yt1+ϵt,ϵtNID(0,σ2).

如果我们反复替换yti通过滞后版本yt

yt=μ+yt1μ+yt2+ϵt1+ϵt=2μ+yt2μ+yt3+ϵt2+ϵt1+ϵt=3μ+yt3+ϵt2+ϵt1+ϵt...

我们到达:

yt=y0+μt+i=1tϵi

在哪里y0是一些任意的初始值。因此,我们看到冲击的积累和随机游走的长记忆使得截距μ具有斜率的线性趋势的效果μ(在这种情况下,常数项μ称为漂移)。

如果一个序列的图形表示显示出相对清晰的线性趋势,我们无法确定是由于确定性线性趋势的存在还是随机游走过程中的漂移。应应用补充图形和测试统计数据。

由于基于单位根和其他测试统计的分析并非万无一失,因此需要牢记一些注意事项。其中一些测试可能会受到异常观察或水平偏移的影响,并且需要选择滞后顺序,这并不总是直截了当的。

作为这个难题的解决方法,我认为通常的做法是获取数据的差异,直到序列看起来平稳(例如查看自相关函数,它应该快速变为零),然后选择 ARMA 模型。

正如下面的经验所示,在 ARIMAX 中使用趋势变量消除了差分的需要,并使序列趋势平稳。这是我用来验证的逻辑。

  1. 模拟 AR 流程
  2. 添加了确定性趋势
  3. 使用以趋势建模的 ARIMAX 作为外生变量,对上述序列进行无差分。
  4. 检查了白噪声的残差,它是纯随机的

以下是 R 代码和绘图:

    set.seed(3215)
    
    ##Simulate an AR process
    x <- arima.sim(n = 63, list(ar = c(0.7)));
    plot(x)

    ## Add Deterministic Trend to AR
    t <- seq(1, 63)
    beta <- 0.8
    t_beta <- ts(t*beta, frequency=1)
    ar_det <- x+t_beta
    plot(ar_det)
    
    ## Check with arima
    
    ar_model <- arima(ar_det, order=c(1, 0, 0), xreg=t, include.mean=FALSE)
    
    ## Check whether residuals of fitted model is random

    pacf(ar_model$residuals)

AR(1) 模拟图

在此处输入图像描述

具有确定性趋势的 AR(1)

在此处输入图像描述

趋势为外生的 ARIMAX Residual PACF。残差是随机的,没有留下任何图案

在此处输入图像描述

如上所示,在 ARIMAX 模型中将确定性趋势建模为外生变量否定了差分的需要。至少在确定性情况下它起作用了。我想知道这对于很难预测或建模的随机趋势会如何表现。

要回答您的第二个问题,是的,包括 ARIMAX 在内的所有 ARIMA 都必须固定。至少教科书是这么说的。

此外,如评论,请参阅这篇文章关于确定性趋势与随机趋势的非常清晰的解释以及如何删除它们以使其趋势平稳,以及关于该主题的非常好的文献调查。他们在神经网络上下文中使用它,但它对一般时间序列问题很有用。他们的最终建议是,当它被明确识别为确定性趋势时,进行线性去趋势,否则应用差分使时间序列平稳。陪审团仍然存在,但本文中引用的大多数研究人员建议使用差分而不是线性去趋势。

编辑:

下面是带有漂移随机过程的随机游走,使用外生变量和差分 arima。两者似乎都给出了相同的答案,本质上它们是相同的。

    library(Hmisc)
    
    set.seed(3215)
    
    ## ADD Stochastic Trend to simulated Arima this is AR(1) with unit root with non zero mean
    
    y = rep(NA, 63)
    y[[1]] <- 2
        
    for (i in 2:63)  {
    y[i] <- 3+1*y[i-1] + rnorm(1, mean = 0, sd = 1)
    } 
    
    plot(y, type="l")
    
    y_ts <- ts(y, frequency=1)
    
    ## Lag to create Xreg
    
    y_1 <- Lag(y, shift=1)
    
    ## Start from 2 value to avoid NA and make it equal length with xreg
    
    y <- window(y_ts, start =2, end=63)
    xreg1 <- y_1[-1]
    
    ## Check the values with ARIMA and xreg
    
    g <- arima(y, order=c(0, 0, 0), xreg=xreg1)
    
    pacf(g$residuals)
    
    ## Check the values with ARIM
    
    g1 <- arima(y, order=c(0, 1, 0))
    
    pacf(g1$residuals)
    
    ## 

    ARIMA(0, 0, 0) with non-zero mean 
    
    Coefficients:
          intercept   xreg1
             3.1304  0.9976
    s.e.     0.2664  0.0025