python代码实现GM(1,1)模型后验差检验
时间: 2024-01-17 10:02:35 浏览: 257
GM(1,1)模型代码
4星 · 用户满意度95%
GM(1,1)模型是一种基于灰色系统理论的预测模型,它适用于数据量较小、发展趋势较明显的序列预测。其后验差检验可以用来检验模型的预测精度。
以下是Python代码实现GM(1,1)模型后验差检验的步骤:
1. 导入需要的库
```python
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import t
```
2. 定义函数
```python
def GM11(x0):
x1 = np.cumsum(x0) # 累加生成序列
z1 = (x1[:-1] + x1[1:]) / 2.0 # 紧邻均值
z1 = z1.reshape((len(z1), 1))
B = np.append(-z1, np.ones_like(z1), axis=1)
Y = x0[1:].reshape((len(x0) - 1, 1))
[[a], [b]] = np.dot(np.dot(np.linalg.inv(np.dot(B.T, B)), B.T), Y) # 求解参数
# 还原值
f = lambda k: (x0[0] - b / a) * np.exp(-a * k) + b / a
delta = np.abs(x0 - np.array([f(i) for i in range(len(x0))]))
C = delta.std() / x0.std()
P = 1.0 * (len(x0) - 1) / len(x0)
return f, a, b, delta, C, P
```
3. 输入数据
```python
x0 = np.array([10.78, 11.28, 12.25, 13.54, 14.44, 15.87, 16.98, 18.31, 19.98, 21.21, 22.90, 24.89, 27.13, 29.44, 32.34])
```
4. 调用函数
```python
f, a, b, delta, C, P = GM11(x0)
```
5. 计算后验差比值
```python
if C < 0.35:
tn = t.ppf(0.95, len(x0) - 2)
W = tn * delta.std()
print("后验差比值为:%.2f,小于0.35,模型精度较高" % C)
print("置信度为:0.95,%d个预测值的置信区间为:[%.2f, %.2f]" % (len(x0) + 1, f(len(x0)) - W, f(len(x0)) + W))
else:
print("后验差比值为:%.2f,大于0.35,模型精度较低" % C)
```
6. 绘制预测结果图
```python
x1 = np.array([f(i) for i in range(len(x0))] + [f(len(x0)) + W, f(len(x0)) - W])
t = np.array([i + 1 for i in range(len(x1))])
plt.plot(t, x0, 'bo-', label='原始数据')
plt.plot(t, x1, 'ro-', label='预测数据')
plt.fill_between([t[-len(x0)], t[-1]], [f(len(x0)) - W, f(len(x0)) - W], [f(len(x0)) + W, f(len(x0)) + W], alpha=0.3)
plt.legend(loc='upper left')
plt.xticks(range(1, len(x1) + 1))
plt.grid(True)
plt.show()
```
运行以上代码,即可得到GM(1,1)模型的后验差检验结果和预测结果图。
阅读全文