警告:未提供频率信息,因此将使用推断的频率MS

20

我尝试使用sm.tsa.statespace.SARIMAX进行自回归拟合。但是我遇到了一个警告,然后我想为这个模型设置频率信息。 曾经遇到过这种情况的人,你能帮助我吗?

fit1 = sm.tsa.statespace.SARIMAX(train.Demand, order=(1, 0, 0), 
                            enforce_stationarity=False,
                            enforce_invertibility=False).fit()
y_hat['AR'] = fit1.predict(start="1975-01-01", end="1975-12-01", dynamic=True)
plt.figure(figsize=(16,8))
plt.plot( train['Demand'], label='Train')
plt.plot(test['Demand'], label='Test')
plt.plot(y_hat_avg['AR'], label='AR')
plt.legend(loc='best')
plt.show()

C:\Users\thach.le\Anaconda3\lib\site-packages\statsmodels-0.8.0-py3.6-win- 
amd64.egg\statsmodels\tsa\base\tsa_model.py:165: ValueWarning: No frequency 
information was provided, so inferred frequency MS will be used.
% freq, ValueWarning)

谢谢


2
这个问题也可以打上[pandas]标签,因为只有在将一个日期时间索引的pandas DataFrame发送到statsmodels函数时才会出现错误。 - Corey
只需将其关闭from statsmodels.tools.sm_exceptions import ValueWarning warnings.simplefilter('ignore', ValueWarning) - ooolllooo
1个回答

20
如果您的数据确实是周期性的,并且时间序列中没有间隙,那么 pandas 可以推断出频率。
如果推断出的频率看起来正确,可以按照 Set pandas.tseries.index.DatetimeIndex.freq with inferred_freq 中的答案使用它。
例如:
train.index = pd.DatetimeIndex(train.index.values,
                               freq=train.index.inferred_freq)
fit1 = sm.tsa.statespace.SARIMAX(...)

请注意,如果您的数据不是真正的周期性,那么这仍然可能会给出一个频率为NoneDatetimeIndex

例如,如果您有每天的数据但缺少一天,那么inferred_freq将为None,尝试传递freq="D"将引发一个ValueError异常。在这种情况下,尝试构建您的DataFrame,使所有日期都存在,并且您要预测的列中的值在这些日期上为None。然后,您可以在您的ARIMA模型中使用missing="drop"(或其他任何选项)。


1
有没有不这样做的理由train.index.freq = train.index.inferred_freq?算了,我在链接的问题中找到了答案。 - Andreas Mueller

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接