解决:ARIMA模型,用BIC矩阵确定p、q参数的时候BIC矩阵输出全是None

ARIMA模型,用BIC矩阵确定p、q参数的时候BIC矩阵输出全是None

最近学习时间序列,学习到ARIMA模型时,采用了前人的教程(在此感谢),但在新的版本上运行出现错误。
Python == 3.9
statsmodels == 0.13.2
具体代码如下:

# 定阶
df['销量'] = df['销量'].astype(float)  # 转换为float类型
pmax = int(len(d_data) / 10)
qmax = int(len(d_data) / 10)
bic_matrix = []  # bic矩阵
for p in range(pmax + 1):
    tmp = []
    for q in range(qmax + 1):
        try:
            tmp.append(ARIMA(df, (p, 1, q)).fit().bic)
        except:
            tmp.append(None)
    bic_matrix.append(tmp)
    
print('*'*20)    
print(bic_matrix)
bic_matrix = pd.DataFrame(bic_matrix)

# bic_matrix
print('-'*20)
print(bic_matrix)

p, q = bic_matrix.stack().astype('float64').idxmin()
print('BIC最小的p值和q值为:%s. %s' % (p, q))

其结果为None

********************
[[None, None, None, None], [None, None, None, None], [None, None, None, None], [None, None, None, None]]
--------------------
      0     1     2     3
0  None  None  None  None
1  None  None  None  None
2  None  None  None  None
3  None  None  None  None

问题的解决

引用方式

在寻找解决方案过程中,查询资料,发现问题如下:

NotImplementedError:statsmodels.tsa.arima_model.ARMA 和 statsmodels.tsa.arima_model.ARIMA 已被删除,
以支持 statsmodels.tsa.arima.model.ARIMA(注意 arima 和模型之间的 .)和 statsmodels.tsa.SARIMAX。
 statsmodels.tsa.arima.model.ARIMA 使用状态空间框架,并且经过良好测试和维护。 它还提供了替代的专用参数估计器。

因此第一步是修改引用

from statsmodels.tsa.arima.model import ARIMA

方法调用参数设置

查询官网

statsmodels.tsa.arima.model.ARIMA¶
class statsmodels.tsa.arima.model.ARIMA(endog, exog=None, order=(0, 0, 0), seasonal_order=(0, 0, 0, 0), trend=None, enforce_stationarity=True, enforce_invertibility=True, concentrate_scale=False, trend_offset=1, dates=None, freq=None, missing='none', validate_specification=True)[source]¶

因此在具体代码使用中,要调整参数表达方式,加上“order=”:

tmp.append(ARIMA(df, order=(p, 1, q)).fit().bic)

运行代码后,看到一堆警告,过了

......
tsa_model.py:471: ValueWarning: No frequency information was provided, so inferred frequency D will be used.
  self._init_dates(dates, freq)
********************
[[438.40889266001903, 424.35050659189903, 427.6535595828169, 426.41822085730945], [422.817414883257, 426.3013233712491, 428.1513898166602, 429.74690851750046], [426.3390714267073, 426.66022693563957, 429.95381925396936, 433.2141304102066], [429.54731418552717, 429.82566773256326, 433.28396726406226, 432.60892135741256]]
--------------------
            0           1           2           3
0  438.408893  424.350507  427.653560  426.418221
1  422.817415  426.301323  428.151390  429.746909
2  426.339071  426.660227  429.953819  433.214130
3  429.547314  429.825668  433.283967  432.608921
BIC最小的p值和q值为:1. 0

该部分完整代码

附上该部分的完整代码供各位参考:

from statsmodels.tsa.arima.model import ARIMA
# 定阶
df['销量'] = df['销量'].astype(float)  # 转换为float类型
pmax = int(len(d_data) / 10)
qmax = int(len(d_data) / 10)
bic_matrix = []  # bic矩阵
for p in range(pmax + 1):
    tmp = []
    for q in range(qmax + 1):
        try:
            tmp.append(ARIMA(df, order=(p, 1, q)).fit().bic)
        except:
            tmp.append(None)
    bic_matrix.append(tmp)
    
print('*'*20)    
print(bic_matrix)
bic_matrix = pd.DataFrame(bic_matrix)

# bic_matrix
print('-'*20)
print(bic_matrix)

p, q = bic_matrix.stack().astype('float64').idxmin()
print('BIC最小的p值和q值为:%s. %s' % (p, q))

在他人基础上修改的完整代码和数据文件可在GitHub获取。具体代码出处已记不清楚,在此感谢。
链接:https://github.com/flyhawksz/Time-Series-Study

  • 15
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
在 MATLAB 中,可以使用 `arima()` 函数来拟合 ARIMA 模型。要确定 ARIMA 模型参数,可以使用 BIC 准则。 BIC 准则是一种模型选择准则,它可以用来确定不同阶数的 ARIMA 模型中最优的一种。BIC 准则越小,说明模型的拟合效果越好。 下面是一个简单的 MATLAB 代码示例,用于确定 ARIMA 模型参数: ```matlab % 导入时间序列数据 data = readtable('data.csv'); y = data.Value; % 设置 ARIMA 模型的阶数范围 P = 3; D = 1; Q = 3; % 初始化 BIC 值和最优模型参数 min_bic = Inf; best_params = [0, 0, 0]; % 循环遍历所有可能的模型参数 for p = 0:P for d = 0:D for q = 0:Q try % 拟合 ARIMA 模型 model = arima(p, d, q); est = estimate(model, y); % 计算模型BICbic = est.BIC; if bic < min_bic min_bic = bic; best_params = [p, d, q]; end catch continue end end end end disp(['Best ARIMA model: AR(', num2str(best_params(1)), ') I(', num2str(best_params(2)), ') MA(', num2str(best_params(3)), ')']); ``` 在上述代码中,我们首先导入时间序列数据,然后设置了 ARIMA 模型的阶数范围(P、D 和 Q)。接下来,我们循环遍历所有可能的模型参数,并使用 `arima()` 函数拟合 ARIMA 模型。如果模型参数无效,则代码会跳过该次迭代。 在拟合 ARIMA 模型后,我们计算了模型BIC 值,并将其与之前的最小 BIC 值进行比较。如果当前的 BIC 值更小,则将其更新为最小值,并将当前模型参数保存为最优参数。最后,我们将输出最优模型参数

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值