我正在尝试将长达一年的半小时数据集放入 Python statsmodels 的 SARIMAX 中。我绘制了相关图,它表明 AR 和 MA 项均远高于 5,周期性项(每天)约为 2。但即使在季节性或非季节性类型的 AR 或 MA 项中超过 2 阶也会产生 MLE 收敛错误.
C:\Users\<user>\AppData\Local\Continuum\miniconda3\lib\site-packages\statsmodels\base\
model.py:496: ConvergenceWarning: Maximum Likelihood optimization failed to converge.
Check mle_retvals
"Check mle_retvals", ConvergenceWarning)
我知道这是一个非线性模型并且无法收敛,但我不知道如何进行。的属性。拟合整个数据集需要一个多小时,这就是为什么我在迭代时只能使用一两个月的数据。我直觉地怀疑这减少了 SARIMAX 拟合可以容纳的术语的潜在顺序而不会出现收敛问题,尽管我对这里的概念没有深入的理解。mle_retvals
不是SARIMAXResults
对象
其他可能重要的细节是整个数据集中缺少许多值,我依靠状态空间形式来估算这些缺失值。
如何解决我在使用 SARIMAX 时遇到的收敛错误?我应该检查哪些方面可能导致问题?这些问题通常可以解决吗?谢谢。
更新:我不知道现在发生了什么,但我得到了一个 mle_retvals 对象
{'Hinv': array([[1, 0, 0, 0, 0, 0],
[0, 1, 0, 0, 0, 0],
[0, 0, 1, 0, 0, 0],
[0, 0, 0, 1, 0, 0],
[0, 0, 0, 0, 1, 0],
[0, 0, 0, 0, 0, 1]]),
'converged': False,
'fcalls': 44,
'fopt': 0.22864169058350794,
'gcalls': 33,
'gopt': array([ 0.33676031, -0.35390488, -0.01763243, -0.09141768, -0.12037386,
0.08537955]),
'warnflag': 2}
这是针对 order=(2,0,2) 和seasonal_order=(1,0,0,48) 的。而且我现在还注意到在 ConvergenceWarning 之前有一个警告
Warning: Desired error not necessarily achieved due to precision loss.
所以 Hessian 是单数的;这听起来不像是数据问题吗?可能这意味着数据的顺序低于模型?但这并没有反映在 (1,0,2),(1,0,0,48) 模型的插值残差系列的 ACF 和 PACF 中,其中有很多高于显着性水平的峰值(参见下面的 PACF )。我为此使用了BFGS算法。
插值数据以删除缺失值没有任何区别!
更改算法:Nelder-Mead 似乎需要大量迭代,但最终收敛于 (2,0,2),(1,0,0,48),参见下面的 PACF