内生变量的长度必须大于使用的滞后数

Posted

技术标签:

【中文标题】内生变量的长度必须大于使用的滞后数【英文标题】:Length of endogenous variable must be larger the the number of lags used 【发布时间】:2021-01-28 22:07:54 【问题描述】:

我最近在关注 Susan Li 的 Python 时间序列分析教程。我正在以下系列中拟合时间序列 SARIMAX 模型:

y['2017':]

OUT: 
Order Date
2017-01-01     397.602133
2017-02-01     528.179800
2017-03-01     544.672240
2017-04-01     453.297905
2017-05-01     678.302328
2017-06-01     826.460291
2017-07-01     562.524857
2017-08-01     857.881889
2017-09-01    1209.508583
2017-10-01     875.362728
2017-11-01    1277.817759
2017-12-01    1256.298672
Freq: MS, Name: Sales, dtype: float64

使用以下内容:

mod = sm.tsa.statespace.SARIMAX(y,
                                order=(1, 1, 1),
                                seasonal_order=(1, 1, 0, 12),
                                enforce_stationarity=False,
                                enforce_invertibility=False)

results = mod.fit()

print(results.summary().tables[1])

现在,这在此处运行良好,但是当我尝试可视化结果时,我收到以下错误:

results.plot_diagnostics(figsize=(16, 8))
OUT: 
ValueError                                Traceback (most recent call last)
<ipython-input-16-6cfeaa52b7c1> in <module>
----> 1 results.plot_diagnostics(figsize=(16, 8))
      2 plt.show()

~/opt/anaconda3/lib/python3.8/site-packages/statsmodels/tsa/statespace/mlemodel.py in plot_diagnostics(self, variable, lags, fig, figsize, truncate_endog_names)
   4282 
   4283         if resid.shape[0] < max(d, lags):
-> 4284             raise ValueError(
   4285                 "Length of endogenous variable must be larger the the number "
   4286                 "of lags used in the model and the number of observations "

ValueError: Length of endogenous variable must be larger the the number of lags used in the model and the number of observations burned in the log-likelihood calculation.

<Figure size 1152x576 with 0 Axes>

有没有人知道如何解决这个问题,如果是某种库错误,如果不能直接修复,那么我怎样才能获得所有的诊断图?

【问题讨论】:

错误消息告诉您没有足够的数据来计算诊断测试统计信息。 y的长度是多少? y 有 48 个观测值,因此长度为 48。尝试复制相同的分析,得到相同的错误,卡在同一点 【参考方案1】:

对于新人来说,Shantanu 的意思是—— 而不是这个-

mod = sm.tsa.statespace.SARIMAX(y,
                            enter code hereorder=(1, 1, 1),
                            seasonal_order=(1, 1, 0, 12),
                            enforce_stationarity=False,
                            enforce_invertibility=False)

您可以写 - enforce_stationarity=False, - 这已被删除,您也可以评论它 - #enforce_stationarity=False,

mod = sm.tsa.statespace.SARIMAX(y, order=(1, 1, 1),
                            seasonal_order=(1, 1, 0, 12),
                            enforce_invertibility=False)

【讨论】:

【参考方案2】:

在定义模型时,删除参数(enforce_stationarity = False),它应该可以正常工作!

【讨论】:

【参考方案3】:

要解决 ARIMA 模型中的此错误,出于某种原因更改图形大小将解决您的问题。就像我在下面所做的那样:

results.plot_diagnostics(figsize=(15, 12)) plt.show()

【讨论】:

你在training_X有什么东西吗?如果那是空的,这可能会发生。

以上是关于内生变量的长度必须大于使用的滞后数的主要内容,如果未能解决你的问题,请参考以下文章

发包长度大于1518的发包工具

时间序列VAR模型知识汇总

怎样用sql语句获取某个字段的长度

干货分享 | 一文读懂时间序列VAR等知识汇总

which命令详解

which命令