灰色预测R语言_灰色预测R语言

今天图图整理了一下有关灰度预测模型的介绍:

灰色预测模型可针对数量非常少(比如仅4个),数据完整性和可靠性较低的数据序列进行有效预测,其利用微分方程来充分挖掘数据的本质,建模所需信息少,精度较高,运算简便,易于检验,也不用考虑分布规律或变化趋势等。但灰色预测模型一般只适用于 短期预测,只适合 指数增长的预测,比如人口数量,航班数量,用水量预测,工业产值预测等。

将按照以下顺序介绍:

  • 灰度(色)系统
  • 灰色生成数列
  • 灰色预测模型的分类
  • GM(1,1)模型
  • MATLAB算例


灰色预测R语言_灰度_02


1 灰度(色)系统

灰色预测法

灰度系统恰好位于白色系统和黑色系统之间,灰度系统内部一部分是已知的,但是另一部分却是未知的。

白色系统

白色系统指的是一个系统内部的特征是完全已知的,使用者不仅知道系统的输入-输出关系,还知道实现输入-输出的具体方式,譬如函数表达式,微分方程的变化公式,或者物理学的基本定律。比方说牛顿第二定律F=ma, 使用者只需要知道物体的质量和加速度,就可以通过牛顿第二定律求出所使用的力F的具体值。或者说当物体的质量固定之后,已知不同的加速度,就可以求出不同的力的值,力和加速度之间有明确的关系表达式。这种系统就称为白色系统。

黑色系统

黑色系统和白色系统就有鲜明的对比,使用者完全不清楚黑色系统的内部特征,只是知道一些输入和相应的输出。使用者需要通过这一系列的输入和输出的对应关系来判断这个黑色系统的内部特征,对于没有办法打开的黑箱,使用者需要通过输入和输出来建立模型来了解这个黑箱。比方说:高校在进行招生的时候,其实对考生是几乎不了解的,这个时候就需要通过高考或者自主招生考试来判断学生的知识掌握程度和运用知识解决问题的能力。通过测试的结果来判断学生的综合能力的大小,进而判断是不是符合高校的专业需求。

灰度系统

灰度系统恰好位于白色系统和黑色系统之间,灰度系统内部一部分是已知的,但是另一部分却是未知的。比方说:经济学中的模型,通过数学或者统计学的方法,可以判断某些因素之间确实有关系,但是却不能够完全的判断整个系统的情况,对于很多未知的情况,这些模型就有一定的局限性。于是,灰度系统就需要通过判断系统各个因素之间的发展规律,进行相应的关联分析。通过原始的数列来生成规律性更强的数列,通过生成的数列来建立相应的微分方程模型,从而预测数列的未来发展趋势。灰度模型使用等时间距观测到的数据值来构造灰色预测模型,从而达到能够预测未来某一时刻的数值的目的。

尽管灰度系统的现象不够清楚,内部的结构并不为人所知,数据是杂乱的,但是却是互相关联的,有整体功效的,因而可以对它的变化过程进行预测。其中灰度模型是灰度系统理论的重要组成部分,将杂乱的原始数据整理成规律性较强的数据,然后再利用离散的灰度方程建立连续的微分模型,从而对系统的发展做出全面的观察分析,并做出长期预测。


2 灰色预测法

灰色预测法是一种预测灰色系统的方法。

灰色预测通过鉴别系统因素之间发展趋势的相异程度,即进行关联分析,并对原始数据进行生成处理来寻找系统变动的规律,生成有较强规律性的数据序列,然后建立相应的微分方程模型,从而预测事物未来发展趋势的状况。其核心体系是灰色模型Grey Model,GM),即对原始数据做累加生成(或者累减、均值等方法)生成近似的指数规律再进行建模的方法。

3 灰色生成数列

灰色系统理论认为,尽管客观表象复杂,但总是有整体功能的,因此必然蕴含某种内在规律。关键在于如何选择适当的方式去挖掘和利用它。灰色系统时通过对原始数据的整理来寻求其变化规律的,这是一种就数据寻求数据的现实规律的途径,也就是灰色序列的生产。一切灰色序列都能通过某种生成弱化其随机性,显现其规律性。数据生成的常用方式有累加生成累减生成加权邻值生成

累加生成

累加生成是使灰色过程由灰变白的一种方法


灰色预测R语言_灰度_03


称此式所表示的数据列为原始数据列的一次累加生成,简称为一次累加生成。

加权邻值生成


灰色预测R语言_灰色预测R语言_04


由此得到的数列称为邻值生成数,权α也称为生成系数。 特别地,当生成系数α=0.5时,则称该数列为均值生成数,也称为等权邻值生成数。

4 灰色预测模型的分类

  • GM(1,1)模型
  • 与GM(2,1)模型
  • DGM模型
  • Verhulst模型


灰色预测R语言_灰色预测R语言_05


5 GM(1,1)模型

建立灰色模型的一般步骤

  • 第一步:级比检验,建模可行性分析。 
  • 第二步:数据变换处理。 
  • 第三步:用GM(1,1)建模。 
  • 第四步:模型检验。

计算式


灰色预测R语言_灰度强度分布matlab_06


灰色预测R语言_灰色预测R语言_07


灰色预测R语言_灰度_08


MATLAB算例


clc,clear;  
syms a b;  
c=[a b]';  
A=[17995.04 19574.69 23379.09 25852.56 30533.90];%输入你的原始数据值
B=cumsum(A);  %对原始数据进行累加
n=length(A);  
for  i=1:(n-1)  
    C(i)=(B(i)+B(i+1))/2; %生成累加矩阵
end  
%计算待定参数的值
D=A;D(1)=[];  
D=D';  
E=[-C;ones(1,n-1)];  
c=inv(E*E')*E*D;  
c=c';  
a=c(1);b=c(2); 

%对后续数据进行预测 
F=[];F(1)=A(1);  
for  i=2:(n+4) 
    F(i)=(A(1)-b/a)/exp(a*(i-1))+b/a;  
end  
G=[];G(1)=A(1);  
for  i=2:(n+3)
    G(i)=F(i)-F(i-1); %n加的数是指预测的数据个数,可以修改,我这里预测了五个数据
end  
t1=2015:2019; %假设数据按年份的时间轴变化,一开始用了七个数据,所以这里从2011-2017,共七年
t2=[t1 2020 2025 2030]; %原始的七个数据加上预测的五个数据共12个,故从2011-2022
disp('分别为2020,2025,2030预测值')
RESULT=G(6:8)  
plot(t1,A,'o',t2(6:8),G(6:8) ,'*'); %这是绘图函数

grid on
xlabel('年份') %横轴名称
ylabel('预测值') %纵轴名称
title('基于2015-2019年的数据对未来某三年的预测图') %预测图名称


%==================检验


% 计算残差
epsilon = A - G(1:5);
% 计算相对误差
delta = abs(epsilon./A);

% 检验模型的误差
% 检验方法一:相对误差Q检验法
disp('相对残差检验法')
Q = mean(delta)
% 检验方法二:方差比C检验法
% 计算标准差函数为std(x,a)
% 如果后面一个参数a取0表示的是除以n-1,如果是1就是最后除以n
disp('方差比C检验法')
C = std(epsilon,1)/std(A,1)
% 检验方法三:小误差概率P检验法
disp('小误差概率P检验法')
S1 = std(A,1);
S1_new = S1*0.6745;
temp_P = find(abs(epsilon-mean(epsilon)) < S1_new);
P = length(temp_P)/n



参考文章:

SPSS在线_SPSSAU_SPSS_灰色预测GM(1,1)模型分析spssau.com

灰色预测R语言_数据_09