首页 新闻 会员 周边 捐助

时间序列定阶出来全是空值!!

0
悬赏园豆:100 [已关闭问题] 关闭于 2019-05-23 08:18

Python3: ARIMA模型定阶出来的全是空值

导致后面这个错误,企图从一个空的序列得到最小值

原始数据预览:
我觉得数据没得问题。因为前面检验那些都没问题

全部代码如下

-- coding:gbk --

arima时序模型

import string
import warnings
warnings.filterwarnings("ignore")
import pandas as pd

参数初始化

discfile = 'arima_data.xls'

inputfile = 'file16.csv'
forecastnum = 5

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

data = pd.read_csv(inputfile,index_col = u'时间',encoding='gbk')

时序图

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
data.plot()
plt.show()

自相关图

from statsmodels.graphics.tsaplots import plot_acf
plot_acf(data)
plt.show()

平稳性检测

from statsmodels.tsa.stattools import adfuller as ADF

返回值依次为adf、pvalue、usedlag、nobs、critical values、icbest、regresults、resstore

print(u'原始序列的ADF检验结果为:', ADF(data[u'出口额']))
print(u'原始序列的ADF检验P值为:',ADF(data[u'出口额'])[1] )

差分后的结果

D_data = data.diff().dropna()
D_data.columns = [u'出口额差分']
D_data.plot() #时序图
plt.title('差分后的时序图')
plt.show()

plot_acf(D_data) #自相关图
plt.show()
from statsmodels.graphics.tsaplots import plot_pacf
plot_pacf(D_data) #偏自相关图
plt.show()
print(u'差分序列的ADF检验结果为:', ADF(D_data[u'出口额差分'])) #平稳性检测

白噪声检验

from statsmodels.stats.diagnostic import acorr_ljungbox
print(u'差分序列的白噪声检验结果为:', acorr_ljungbox(D_data, lags=1)) #返回统计量和p值

from statsmodels.tsa.arima_model import ARIMA

data[u'出口额'] = data[u'出口额'].astype(float)

data=np.array(data,dtype=np.float)

print(type(data))
print(data)

定阶

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, (p,1,q),req=None).fit().bic)
print(tmp)
except:
tmp.append(None)
bic_matrix.append(tmp)

bic_matrix = pd.DataFrame(bic_matrix) #从中可以找出最小值
print('二维矩阵:',bic_matrix)

p,q = bic_matrix.stack().idxmin() #先用stack展平,然后用idxmin找出最小值位置。
print(u'BIC最小的p值和q值为:%s、%s' %(p,q))
model = ARIMA(data, (p,1,q)).fit() #建立ARIMA(0, 1, 1)模型
model.summary2()
model.forecast(5) #作为期5天的预测,返回预测结果、标准误差、置信区间。

问题补充:

大魔王阿黎的主页 大魔王阿黎 | 菜鸟二级 | 园豆:202
提问于:2019-05-22 12:05
< >
分享
所有回答(2)
0

请问楼主问题解决了吗?我也遇到了同样的问题

Moody丶 | 园豆:202 (菜鸟二级) | 2020-08-13 11:21

请问问题解决了吗?求解决方法谢谢

支持(0) 反对(0) 成蔚 | 园豆:202 (菜鸟二级) | 2022-05-19 11:39
0

请问问题解决了吗

成蔚 | 园豆:202 (菜鸟二级) | 2022-05-19 11:38
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册