Statsmodels 说 ARIMA 不合适,因为系列不是静止的,它是如何测试的?

机器算法验证 时间序列 预测 有马 统计模型
2022-02-26 09:16:21

我有一个时间序列,我正在尝试使用 Python 的 statsmodels ARIMA api 进行建模。当我应用以下内容时:

from statsmodels.tsa.arima_model import ARIMA
model = ARIMA(data['Sales difference'].dropna(), order=(2, 1, 2))
results_AR = model.fit(disp=-1)

我收到以下错误:

ValueError: The computed initial AR coefficients are not stationary
You should induce stationarity, choose a different model order, or you can
pass your own start_params.

但我已经区分了数据:

data['Sales'] = data['Sales'] - data['Sales'].shift() 

我还能做些什么来诱导平稳性?

ARIMA api 运行什么测试来确定数据不是静止的?

我原来的时间序列看起来像: 在此处输入图像描述

不同的时间序列如下所示: 在此处输入图像描述

我的 ACF 图看起来像: 在此处输入图像描述

4个回答

你问“我还能做些什么来诱导平稳性?” 如果一个序列表现出水平偏移(症状),那么这是一个非平稳性的例子。正确的补救措施是“贬低”数据而不是区分它。此外,一个系列可能会表现出确定性趋势或季节性脉冲的变化,这可以通过干预检测方案进行纠正。如果该系列的参数随时间发生变化(症状),正确的补救措施是通过Chow 测试找到断点并使用最新设置或某种形式的阈值模型 (TAR)如果一个序列的误差方差随时间发生变化(症状),正确的补救措施可能是WLS 一种形式的 GLS或某种形式的幂变换或者未能通过某种形式的 GARCH 模型来解决这些相对简单的补救措施。

如果您发布原始数据,我可能会提供更多帮助。

仔细阅读:这并不是说时间序列不是静止的。它说初始系数不是固定的(我认为这意味着它们不描述固定过程)。

正如它所建议的那样,您可以尝试自己猜测起始值。但我怀疑它首先选择了错误的起始值,因为模型指定错误。如果您已经区分了时间序列,您可能也不想指定集成顺序 1。您的意思可能是 order=(2, 0, 2),而不是 order=(2, 1, 2)。

在时间序列信号中,可以使用加窗来引入平稳性。您可以使用具有重叠的良好窗口技术将单个时间序列信号分解为较小的信号。需要开窗以避免频域中的杂散峰值,并且需要重叠以节省信号能量。通常,语音信号(8KHz 采样频率)具有 30 毫秒帧,每帧提供 240 个样本。这是使用具有 50% 重叠的汉明窗进行卷积的。

差分时间序列不是平稳的,因为它没有恒定的方差。您可以尝试对数微分。