【问题标题】:python - how to input results of the arima test to a data framepython - 如何将 arima 测试的结果输入到数据框中
【发布时间】:2023-03-09 09:56:01
【问题描述】:

我是 python 新手,一直在编写将 ARIMA 测试结果输入数据帧的过程。所以,我通过以下编码得到了 ARIMA 结果:

for param in pdq:
    for param_seasonal in seasonal_pdq:
        try:
            mod = sm.tsa.statespace.SARIMAX(df_month.Weighted_Price_box,
                                            order=param,
                                            seasonal_order=param_seasonal,
                                            enforce_stationarity=False,
                                            enforce_invertibility=False)

            results = mod.fit()

            print('ARIMA{}x{}12 - AIC:{}'.format(param, param_seasonal, results.aic))

            data = {'parameters' : [param], 'aic' : [results.aic]}
        except:

            continue

rt=pd.DataFrame(data)
rt

输出是:

ARIMA(0, 0, 0)x(0, 0, 1, 12)12 - AIC:407.22578000041864
ARIMA(0, 0, 0)x(0, 1, 1, 12)12 - AIC:238.18574141909036
ARIMA(0, 0, 0)x(1, 0, 0, 12)12 - AIC:294.4619377438503
ARIMA(0, 0, 0)x(1, 0, 1, 12)12 - AIC:293.02415782731146
ARIMA(0, 0, 0)x(1, 1, 0, 12)12 - AIC:247.3954939335222
ARIMA(0, 0, 0)x(1, 1, 1, 12)12 - AIC:240.81509476560723
ARIMA(0, 0, 1)x(0, 0, 0, 12)12 - AIC:424.3477569952406
ARIMA(0, 0, 1)x(0, 0, 1, 12)12 - AIC:322.92052137636273
ARIMA(0, 0, 1)x(0, 1, 0, 12)12 - AIC:230.11538217516411
ARIMA(0, 0, 1)x(0, 1, 1, 12)12 - AIC:168.44268972392362
ARIMA(0, 0, 1)x(1, 0, 0, 12)12 - AIC:221.44384124449488
ARIMA(0, 0, 1)x(1, 0, 1, 12)12 - AIC:201.34872206655223
ARIMA(0, 0, 1)x(1, 1, 0, 12)12 - AIC:189.5734656288126
......
        aic parameters
0  57.95076  (1, 1, 1)

如您所见,我的名为 rt 的数据框只包含一行而不是 13 行。

【问题讨论】:

  • 您在for param_seasonal in seasonal_pdq: 的每个循环中重新定义data。虽然我不能确定这是问题所在,但我想您需要在 for 循环之前定义一个列表
  • 欢迎来到 Stack Overflow!不要抱歉,不好的问题和简单的问题是有区别的:)

标签: python dataframe arima


【解决方案1】:

使用列表附加内容并使用它来创建 DF。

例如:

data = []
for param in pdq:
    for param_seasonal in seasonal_pdq:
        try:
            mod = sm.tsa.statespace.SARIMAX(df_month.Weighted_Price_box,
                                            order=param,
                                            seasonal_order=param_seasonal,
                                            enforce_stationarity=False,
                                            enforce_invertibility=False)

            results = mod.fit()

            print('ARIMA{}x{}12 - AIC:{}'.format(param, param_seasonal, results.aic))

            data.append({'parameters' : [param], 'aic' : [results.aic]})
        except:

            continue

rt=pd.DataFrame(data)
rt

【讨论】:

  • 感谢各位及时明确的解释!
猜你喜欢
  • 2021-03-01
  • 2018-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-25
  • 2021-07-21
相关资源
最近更新 更多