在构建ARIMA时,我使用以下代码
arima = ARIMA(ts.astype(float), freq = 'M',order=(4, d, 3)).fit()
当我运行上面的代码时,我得到了以下错误:
ValueError: The given frequency argument could not be matched to the given index.
我的数据框如下所示:
Date A B C D E F
2020-04-01 118 10932.54 203.617 1 0.296610 0.382666
2020-05-01 144 11645.20 167.575 1 0.361111 0.401953
2020-06-01 89 8545.86 196.084 1 0.449438 0.524768
2020-07-01 117 10512.30 194.442 1 0.384615 0.472443
2020-08-01 75 6613.11 189.289 1 0.280000 0.332995
Date
列是我的索引。它没有频率标签。
我尝试给它一个频率标签,如下所示
df.asfreq('M')
但是,这会将除Date
列之外的每一列中的值转换为NaN
。
我试图在没有频率参数的情况下运行ARIMA模型;但是,我收到了以下警告消息:
ValueWarning: No frequency information was provided, so inferred frequency MS will be used.
同样,我也收到了这样的警告:
ValueError: The computed initial MA coefficients are not invertible
You should induce invertibility, choose a different model order, or you can pass your own start_params.
我不知道在这里该做什么。任何帮助都将不胜感激。
发布于 2020-08-20 17:33:09
首先,您可以使用
df = df.resample("M").last()
在不引入NaN
值的情况下获得干净的月末df
。
其次,您应该使用SARIMAX
或statsmodels.tsa.arima.model.ARIMA
,而不是statsmodels.tsa.arima_model.ARIMA
(注意,后者中的_
是前者中的.
)。statsmodels.tsa.arima.model.ARIMA
本质上是SARIMAX
的一个特例,它的性能通常更好。要使用新的ARIMA
,您需要statsModels0.12.0rc0或主分支的构建。
在这个新模型中,你将不会有MA可逆性的问题。
发布于 2020-08-19 04:49:27
“is”表示“月份开始”,而“M”表示“月份结束”。
我的数据是每个月的开始,所以我应该把'MS‘传递给频率参数。
我用try/except解决了不可撤销的错误。
https://stackoverflow.com/questions/63471170
复制相似问题