鱼C论坛

 找回密码
 立即注册
查看: 3861|回复: 1

ARIMA模型中的BIC矩阵都是none

[复制链接]
发表于 2022-2-11 13:38:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
报错信息:ValueError: attempt to get argmin of an empty sequence
销量预测用的ARIMA模型,前面自相关偏相关都正常,最后BIC矩阵都是none,而且最后报错,直接用ARIMA模型也会出错
import pandas as pd
import pylab
import seaborn as sns
import matplotlib.pyplot as plt
from statsmodels.graphics.tsaplots import plot_acf
from statsmodels.tsa.stattools import adfuller as ADF
from statsmodels.graphics.tsaplots import plot_pacf
from statsmodels.stats.diagnostic import acorr_ljungbox
from statsmodels.tsa.arima_model import ARIMA
from statsmodels.tsa.stattools import acf

discfile = "E:/邮电器材/销管/销量预测/手机产业销量预测/销量数据.xlsx"  #参数初始化

#读取数据,指定日期列为指标,Pandas自动将“日期”列识别为Datetime格式

plt.rcParams['font.sans-serif'] = ['SimHei']    #显示中文标签
plt.rcParams['axes.unicode_minus'] = False    #正常显示负号
#pylab.rcParams['figure.figsize'] = (10,6)    #设置输出图片大小
#sns.set(color_codes=True)    #seaborn设置背景

data = pd.read_excel(discfile,index_col=u'日期')
data.plot()    #时序图
plt.show()
plot_acf(data).show()    #自相关图

#平稳性检测
print(u'原始序列的ADF检验结果为:', ADF(data[u'销量']))    #Pdf值大于三个水平值,p值显著大于0.05,该序列为非平稳序列。
#返回值依次为adf、pvalue、usedlag、nobs、critical values、icbest、regresults、resstore

#一阶差分
D_data = data.diff().dropna()
D_data.columns = [u'销量差分']
D_data.plot()    #时序图
plt.show()

plot_acf(D_data).show()    #自相关图
plt.show()

plot_pacf(D_data,lags=9).show()    #偏自相关图
#平稳性检测
print(u'差分序列的ADF检验结果为:', ADF(D_data[u'销量差分']))    #Pdf值小于两个水平值,p值显著小于0.05,一阶差分后序列为平稳序列。

#白噪声检验
#返回统计量和p值
print(u'差分序列的白噪声检验结果为:', acorr_ljungbox(D_data, lags=1))    #P值小于0.05,所以一阶差分后的序列为平稳非白噪声序列。

data[u'销量'] = data[u'销量'].astype(float)
#定阶
pmax = int(len(D_data)/10)    #一般阶数不超过length/10
qmax = int(len(D_data)/10)    #一般阶数不超过length/10
bic_matrix = []    #bic矩阵
for p in range(pmax+1):
    tmp = []
    for q in range(qmax+1):
        try:    # 存在部分报错,所以用try来跳过报错。
            tmp.append(ARIMA(data['销量'], order=(p,1,q)).fit().bic)
        except:
            tmp.append(None)
    bic_matrix.append(tmp)
    print(bic_matrix)

#输出BIC矩阵
bic_matrix = pd.DataFrame(bic_matrix)    #从中可以找出最小值
#先用stack展平,然后用idxmin找出最小值位置。
p,q = bic_matrix.stack().astype(float).idxmin()
print(u'BIC最小的p值和q值为:%s、%s' %(p,q))
#取BIC信息量达到最小的模型阶数,结果p为0,q为1,定阶完成。
#建立ARIMA(0, 1, 1)模型
model = ARIMA(data, order=(p,1,q)).fit(disp=0)
model.summary2()    #给出一份模型报告
model.forecast(5)    #作为期5天的预测,返回预测结果、标准误差、置信区间。
1644550949(1).jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-2-5 19:39:27 | 显示全部楼层
请问解决了吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-24 17:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表