文章目录
- GM(1,1)模型
- 1 GM(1,1)模型概述
- 2 GM(1,1)数据处理方法
- 3 GM(1,1)模型方法的可行性检验
- 4 GM(1,1)预测模型的构建
- 5 GM(1,1) 模型的检验
- 6 GM(1,1) 模型的适用范围
- 7 GM(1,1) 残差模型
- R语言实现
- python
GM(1,1)模型
1 GM(1,1)模型概述
灰色预测经常用来解决数据量较少且不能直接发现规律的数据。对于包含不确定信息的序列,灰色预测方法通过对原始数据进行处理,使之转化为灰色序列,并建立微分方程模型模型
GM(1,1)模型是灰色预测理论的基本模型,也是灰色系统理论中运用最广泛的一种动态预测模型,模型由一个单变量的一阶微分方程构成。GM(1,1)模型适合对“少数据,贫信息”的对象进行中短期预测
2 GM(1,1)数据处理方法
在灰色系统中,能获得的信息非常有限,且不易发现内部规律,因此我们需要一些处理,减弱序列的随机性,使得一般规律可以显现。处理方式主要有以下三种:累加生成、累减生成和加权邻值生成
3 GM(1,1)模型方法的可行性检验
(1)级比检验
由原始序列
设 为序列
若满足:
其中 n 为原始序列的数据个数,则
否则,需对数据进行处理,使其落在有效范围内,如平移变换:
(2)光滑度检验
设数据序列 为非负数据序列,则该数据序列为光滑离散序列的充要条件为
是
的递减函数,即
只有原始数据序列满足了这一条件才可以用于建模预测。
4 GM(1,1)预测模型的构建
设原始序列满足上述条件,其中
(1)序列的累加处理
将原始序列进行一次累加生成后处理后,生成 的1-AGO 序列 (累加生成序列):
其中
(2)计算紧邻均值序列
其中
(3)建立相关模型
建立一阶微分线性方程,即灰色微分方程,得到 GM(1,1)模型的均值形式:
通过 GM(1,1) 模型相应的白化微分方程:
其中 a 表示发展系数,反映了 和
(4)计算 a、b
设 为待估参数向量,令
,利用最小二乘法求解,可得:
其中B、Y 分别为
GM(1,1)模型中的参数 为发展系数,
反应了
及原始序列
作用量在物理学中是一个比较抽象的概念,它表示一个动力系统内在的演化趋势。
对原始数据序列进行计算求出的GM(1,1)模型中的
(5)建立 GM(1,1) 的时间响应式,即预测模型
5 GM(1,1) 模型的检验
检验灰色预测模型效果主要包括三种方法:残差检验、关联度检验和后验差检验方法,以此来检验模型的准确性。
(1) 残差检验
按预测模型计算 ,并将
累减生成
,然后计算原始序列
与
的绝对误差序列即相对误差序列。
若对相应序列残差有 ,则代表用 GM(1,1) 模型的模拟精度较高,若
GM(1,1) 模型建模精度:
(2)关联度检验法
绝对误差:
得出最大值、最小值
计算关联系数
得出关联度
根据经验,当 p =0.5 时,关联度 r >0.6 时可认为模型的预测效果较好。
(3)后验差检验
原始序列的均值
计算的原始序列的标准差:
残差序列的均值:
计算绝对误差序列的标准差:
计算后验差比值为::
计算小误差概率:
GM(1,1) 通常用后验差检验方法来评价预测结果的好坏,主要根据其中的后验差比值(C)和小误差概率(P)这两个数值来检验模型。根据 C 和 P 的大小可以将灰色模型的预测精度分为以下几个等级,如下表
后验差比值 C | 小误差概率 P | 预测精度等级 |
<0.35 | >0.95 | 好(一级) |
<0.50 | >0.80 | 合格(二级) |
<0.65 | >0.70 | 勉强合格(三级) |
>=0.65 | <=0.65 | 不合格 (四级) |
6 GM(1,1) 模型的适用范围
建立于灰色理论基础上的GM(1,1)模型具有所需样本量小,无需考虑数据分布规律,模型预测精度较高,且易于计算检验,决定了GM(1,1)模型被广泛的应用于经济生活各个领域。但这并非说明GM(1,1)模型应用具有随意性与其他任何数学模型相同GM(1,1)模型也有其适用范围,若超出其适用范围使用GM(1,1)模型往往很难得到满意的的结果。
GM(1,1)模型的参数与GM(1,1)模型适用性之间的关系得到如下结论
(1)当 -a ≤ 0.3时,GM(1,1)模型可用于中长期预测;
(2)当 0.3 < -a ≤ 0.5时,GM(1,1)模型可用于短期预测,中长期预测需谨慎;
(3)当 0.5 < -a ≤ 0.8时,用GM(1,1)模型作短期预测慎用;
(4)当 0.8 < -a ≤ 1.0时,需采用残差修正GM(1,1)模型;
(5)当 1 < -a 时,不宜使用GM(1,1)模型。
也即
模型预测时长判断标准
7 GM(1,1) 残差模型
当原始数据序列建立的GM(1,1)模型检验不合格时,可以用GM(1,1)残差模型来修正。如果原始序列建立的GM(1,1)模型不够精确,也可以用GM(1,1)残差模型来提高精度。
若用原始序列
可获得生成序列的预测值,定义残差序列
。则对应的残差序列为:
计算其生成序列,并据此建立相应的GM(1,1)模型:
得修正模型
其中
为修正系数。
应用此模型时要考虑:
(1)一般不是使用全部残差数据来建立模型,而只是利用了部分残差。
(2)修正模型所代表的是差分微分方程,其修正作用与
R语言实现
灰色系统模型GM(1,1)的R语言实现
灰色预测GM11,R语言源程序
python
'''灰色预测函数'''
def GM11(x0): #自定义灰色预测函数
import numpy as np
x1 = x0.cumsum() # 生成累加序列
z1 = (x1[:len(x1)-1] + x1[1:])/2.0 # 生成紧邻均值(MEAN)序列,比直接使用累加序列好,共 n-1 个值
z1 = z1.reshape((len(z1),1))
B = np.append(-z1, np.ones_like(z1), axis = 1) # 生成 B 矩阵
Y = x0[1:].reshape((len(x0)-1, 1)) # Y 矩阵
[[a],[u]] = np.dot(np.dot(np.linalg.inv(np.dot(B.T, B)), B.T), Y) #计算参数
f = lambda k: (x0[0]-u/a)*np.exp(-a*(k-1))-(x0[0]-u/a)*np.exp(-a*(k-2)) #还原值
delta = np.abs(x0 - np.array([f(i) for i in range(1,len(x0)+1)])) # 计算残差
C = delta.std()/x0.std()
P = 1.0*(np.abs(delta - delta.mean()) < 0.6745*x0.std()).sum()/len(x0)
return f, a, u, x0[0], C, P #返回灰色预测函数、a、b、首项、方差比、小残差概率