如何去除时间序列的趋势?

机器算法验证 回归 时间序列 状态 平稳性
2022-02-12 12:12:43

如何去除时间序列的趋势?是否可以只取第一个差异并运行 Dickey Fuller 测试,如果它是静止的,我们就很好?

我还在网上发现,我可以通过在 Stata 中执行此操作来消除时间序列的趋势:

reg lncredit time
predict u_lncredit, residuals
twoway line u_lncredit time
dfuller u_lncredit, drift regress lags(0)

去趋势时间序列的最佳方法是什么?

4个回答

如果趋势是确定性的(例如线性趋势),您可以对确定性趋势(例如常数加时间指数)进行数据回归,以估计趋势并将其从数据中删除。如果趋势是随机的,您应该通过对其进行第一次差异来消除该系列的趋势。

ADF 测试KPSS 测试可以为您提供一些信息来确定趋势是确定性的还是随机性的。

由于 KPSS 检验的原假设与 ADF 检验中的原假设相反,因此可以预先确定以下方法:

  1. 应用 KPSS 来测试序列在趋势周围是平稳的或平稳的零点。如果空值被拒绝(在预先确定的显着性水平),则断定趋势是随机的,否则转到步骤 2。
  2. 应用 ADF 检验来检验是否存在单位根。如果原假设被拒绝,则得出没有单位根(平稳性)的结论,否则该过程的结果没有提供信息,因为没有一个测试拒绝相应的原假设。在这种情况下,考虑单位根的存在并通过采用一阶差分来消除序列的趋势可能会更加谨慎。

在结构化时间序列模型的上下文中,您可以将本地级别模型或本地趋势模型拟合到数据中,以估计趋势并将其从序列中删除。局部趋势模型定义如下(局部级模型由σζ2=0):

observed series:yt=μt+γt+ϵt,ϵtNID(0,σϵ2);latent level:μt=μt1+βt1+ξt,ξtNID(0,σξ2);latent drift:βt=βt1+ζt,ζtNID(0,σζ2);

或许不止一种趋势。也许有一个层次的转变。也许误差方差随时间而变化。无论如何,简单的去趋势可能是不合适的。应该使用沿着http://www.unc.edu/~jbhill/tsay.pdf的良好探索性分析来发现数据/模型的性质。

您有几种方法可以消除时间序列的趋势,以使其静止:

  • 线性去趋势是你复制的。当您任意修复确定性线性趋势时,它可能无法满足您的需求。

  • 二次去趋势在某些方面类似于线性去趋势,除了您添加“时间^ 2”并假设指数型行为。

  • Hodrick 和 Prescott (1980) 的 HP 滤波器允许您提取序列的非确定性长期分量。因此,剩余序列是周期性成分。请注意,由于它是最佳加权平均值,因此存在端点偏差(第一个和最后 4 个观察值被错误地估计。)

  • Baxter and King (1995) 的带通滤波器本质上是一个移动平均滤波器,您可以在其中排除高频和低频。

  • Christiano-Fitzgerald 过滤器。

总而言之,这取决于您的意图,并且某些过滤器可能比其他过滤器更适合您的需求。

我建议看一下奇异谱分析。这是一种非参数技术,可以非常粗略地视为时间序列的 PCA。有用的特性之一是它可以有效地去趋势系列。