问题描述
我在构建ARIMA时使用以下代码
componentDidMount() {
}
运行以上命令时出现以下错误:
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
。
我试图在没有频率参数的情况下运行ARIMA模型;但是,我收到以下警告消息:
NaN
我也收到此警告:
ValueWarning: No frequency @R_16_4045@ion was provided,so inferred frequency MS will be used.
我不确定在这里做什么。任何帮助将不胜感激。
解决方法
首先,您可以使用
df = df.resample("M").last()
在不引入df
值的情况下获得干净的月末NaN
。
第二,您应该使用SARIMAX
或statsmodels.tsa.arima.model.ARIMA
而不是
比statsmodels.tsa.arima_model.ARIMA
(请注意,后者中的_
是前者中的.
)。 statsmodels.tsa.arima.model.ARIMA
本质上是SARIMAX
的一种特例,通常表现更好。您将需要statsmodels 0.12.0rc0或master分支的构建才能使用新的ARIMA
。
在此新模型中,您将不会遇到MA可逆性的问题。
,“ MS”表示“月末”,而“ M”表示“月末”。
我的数据是每个月初的数据,因此我应该将'MS'传递给频率参数。
我用try / except解决了不可逆的错误。