说明灰色预测中的GM(1,1)模型预测流程步骤并使用python代码将csv文件中的时间序列数据建立GM(1,1)模型,对模型进行关联度检验,后验差检验以及残差检验之后修正模型,最终进行十期预测得到结果并绘图展示
时间: 2024-03-02 15:47:53 浏览: 171
灰色预测中的GM(1,1)模型预测流程步骤如下:
1. 建立灰色微分方程模型:对原始数据进行一次累加,得到1-AGO序列,再根据1-AGO序列建立灰色微分方程模型。
2. 求解模型参数:通过最小二乘法或常数项作为参数来求解模型。
3. 模型检验:进行关联度检验、后验差检验和残差检验,以确定模型的可靠性和精度。
4. 模型修正:如果模型检验结果不符合要求,需要对模型进行修正,比如增加数据量、改变模型形式等。
5. 预测:利用修正后的模型对未来的数据进行预测。
以下是使用Python代码将csv文件中的时间序列数据建立GM(1,1)模型,对模型进行关联度检验,后验差检验以及残差检验之后修正模型,最终进行十期预测得到结果并绘图展示的示例代码:
```python
import numpy as np
import pandas as pd
from scipy import stats
import matplotlib.pyplot as plt
# 读取csv文件中的时间序列数据
data = pd.read_csv('data.csv', header=None).values.flatten()
# 建立1-AGO序列
ago = np.cumsum(data)
n = len(data)
# 建立GM(1,1)模型
x0 = ago[0]
B = np.vstack((-ago[1:].reshape(n-1, 1), np.ones(n-1))).T
Yn = data[1:].reshape(n-1, 1)
a, b = np.linalg.inv(B.T.dot(B)).dot(B.T).dot(Yn).flatten()
# 进行关联度检验
xn = np.zeros(n)
xn[0] = x0
for i in range(1, n):
xn[i] = (x0 - b/a)*(1 - np.exp(a))*np.exp(-a*(i-1)) + b/a*np.exp(-a*(i-1))
r, _ = stats.pearsonr(data, xn)
# 进行后验差检验
e = np.abs(data - xn)
D = e.std()
C = D / data.mean()
P = stats.chi2.interval(0.95, n-1)
if C < P[0] or C > P[1]:
a = a*(1 + 0.5*(C-D)/D)
b = (data[0] - x0*(1-np.exp(a)))/(1-np.exp(a))
# 进行残差检验
xn = np.zeros(n)
xn[0] = x0
for i in range(1, n):
xn[i] = (x0 - b/a)*(1 - np.exp(a))*np.exp(-a*(i-1)) + b/a*np.exp(-a*(i-1))
e = np.abs(data - xn)
Q = e.max() / data.max()
if Q > 0.1:
a = a*(1 + 0.5*(Q-0.1)/0.1)
b = (data[0] - x0*(1-np.exp(a)))/(1-np.exp(a))
# 进行十期预测
xn = np.zeros(n+10)
xn[0] = data[0]
for i in range(1, n+10):
xn[i] = (data[0] - b/a)*(1 - np.exp(a))*np.exp(-a*i) + b/a*np.exp(-a*i)
pred = xn[n:]
# 绘图展示
plt.plot(data, label='Original')
plt.plot(xn[:n], label='Fitted')
plt.plot(range(n, n+10), pred, label='Predicted')
plt.legend()
plt.show()
```
其中,数据文件data.csv中存储了原始的时间序列数据,代码中读取后进行预处理得到1-AGO序列,然后根据GM(1,1)模型进行预测,并进行关联度检验、后验差检验和残差检验,如果检验结果不符合要求就对模型进行修正,最后进行十期预测并绘图展示。
阅读全文