xdata_pred = arima.predict(typ = 'levels') #预测 pred_error = (xdata_pred - xdata).dropna() #计算残差
时间: 2023-12-06 09:44:05 浏览: 65
这个代码片段看起来像是使用ARIMA模型进行时间序列预测,并计算预测误差。
首先,`arima.predict(typ='levels')`使用ARIMA模型对时间序列数据进行预测,并返回预测结果。参数`typ='levels'`表示返回的预测值将被转换为原始数据的水平值。
然后,`pred_error = (xdata_pred - xdata).dropna()`计算预测误差。其中,`xdata_pred`是ARIMA模型预测出的时间序列数据,`xdata`是原始数据。两者相减得到预测误差,并使用`dropna()`方法删除NaN值(如果存在的话)。最终,`pred_error`变量将包含预测误差序列。
相关问题
#-*- coding: utf-8 -*- #模型检验 import pandas as pd #参数初始化 discfile = 'C:\\Users\\Administrator\\Desktop\\chapter11\\demo\\data\\discdata_processed.xls' lagnum = 12 #滞后阶数 data = pd.read_excel(discfile, index_col = 'COLLECTTIME') data = data.iloc[: len(data)-5] #不使用最后5个数据 xdata = data['CWXT_DB:184:D:\\'] from statsmodels.tsa.arima.model import ARIMA #建立ARIMA(0,1,1)模型 arima = ARIMA(xdata, order=(0, 1, 1)).fit() #建立并训练模型 xdata_pred = arima.predict(typ = 'levels') #预测 pred_error = (xdata_pred - xdata).dropna() #计算残差 print("预测值",xdata_pred) print("计算残差:",pred_error) from statsmodels.stats.diagnostic import acorr_ljungbox #白噪声检验 p= acorr_ljungbox(pred_error, lags = lagnum) print("p的值为:",p) m = p.iloc[:,1].sum() print("m的值为:",m) h = (m < 0.05) #p值小于0.05,认为是非白噪声。 if h > 0: print(u'模型ARIMA(0,1,1)不符合白噪声检验') else: print(u'模型ARIMA(0,1,1)符合白噪声检验')程序解读
这段程序的功能是进行ARIMA模型检验,包括建立ARIMA模型、预测、计算残差、白噪声检验,判断模型是否符合白噪声检验。
程序的具体步骤如下:
1. 导入需要的库,包括pandas、ARIMA、acorr_ljungbox等。
2. 定义数据文件路径和滞后阶数。
3. 读取数据文件,并删除最后5个数据,保留前面的数据。
4. 选取需要分析的数据列,即'CWXT_DB:184:D:\\'。
5. 建立ARIMA(0,1,1)模型,并训练模型。
6. 利用训练好的模型进行预测,并计算预测值和残差。
7. 进行白噪声检验,计算p值。
8. 对p值进行求和,得到m值。
9. 判断m值是否小于0.05,若是,则模型不符合白噪声检验,否则符合。
10. 打印输出检验结果。
需要注意的是,程序中的数据文件路径和数据列名需要根据实际情况进行修改。另外,程序中的ARIMA模型阶数和白噪声检验的滞后阶数也可以根据实际需求进行修改。
def scatter(self): self.scatter_frame = Frame(self.init_window_name) # 创建一个竖直滚动条 scrollbar = Scrollbar(self.scatter_frame, orient=tk.VERTICAL) scrollbar.pack(side=tk.RIGHT, fill=tk.Y) self.scatter_frame.place(x=10, y=460, width=750, height=310) fig = plt.figure() ax = fig.add_subplot(111) pd.plotting.scatter_matrix(self.df,alpha = 0.3,figsize = (10,10),grid = True,ax = ax) self.scatter_view = FigureCanvasTkAgg(fig,master = self.scatter_frame) self.scatter_view.draw() self.scatter_view.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1) # 将滚动条绑定到FigureCanvasTkAgg上 self.scatter_view.configure(yscrollcommand=scrollbar.set) scrollbar.config(command=self.scatter_view.yview)我想在self.scatter_view画布上加一个滚轮,让图片不要被压缩显示,怎么改代码?
你可以在创建FigureCanvasTkAgg时,将其参数resize设置为True,这样就可以自动调整大小,避免图片被压缩显示。同时,你需要在scatter_frame上添加鼠标滚动事件的绑定,用来处理滚轮事件。
修改后的代码如下:
```python
def scatter(self):
self.scatter_frame = Frame(self.init_window_name)
# 创建一个竖直滚动条
scrollbar = Scrollbar(self.scatter_frame, orient=tk.VERTICAL)
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
self.scatter_frame.place(x=10, y=460, width=750, height=310)
fig = plt.figure()
ax = fig.add_subplot(111)
pd.plotting.scatter_matrix(self.df,alpha = 0.3,figsize = (10,10),grid = True,ax = ax)
# 将resize设置为True
self.scatter_view = FigureCanvasTkAgg(fig,master = self.scatter_frame, resize=True)
self.scatter_view.draw()
self.scatter_view.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1)
# 将滚动条绑定到FigureCanvasTkAgg上
self.scatter_view.configure(yscrollcommand=scrollbar.set)
scrollbar.config(command=self.scatter_view.yview)
# 添加鼠标滚动事件的绑定
self.scatter_view.mpl_connect('scroll_event', self.on_scroll)
def on_scroll(self, event):
# 获取当前滚轮的方向
if event.button == 'up':
direction = 1
elif event.button == 'down':
direction = -1
else:
direction = 0
# 根据滚轮方向调整缩放比例
scale = 1.1
if direction:
x, y = event.x, event.y
ax = self.scatter_view.figure.axes[0]
if direction > 0:
# 放大
ax.set_xlim(xdata - scale * (xdata - ax.get_xlim()[0]),
xdata + scale * (ax.get_xlim()[1] - xdata))
ax.set_ylim(ydata - scale * (ydata - ax.get_ylim()[0]),
ydata + scale * (ax.get_ylim()[1] - ydata))
else:
# 缩小
ax.set_xlim(xdata - scale * (xdata - ax.get_xlim()[0]),
xdata + scale * (ax.get_xlim()[1] - xdata))
ax.set_ylim(ydata - scale * (ydata - ax.get_ylim()[0]),
ydata + scale * (ax.get_ylim()[1] - ydata))
self.scatter_view.draw()
```
阅读全文