灰色预测,为什么是灰色呢,灰色就是介于黑色和白色之间。所以说灰色预测是一种对含有不确定因素的系统进行预测的方法。灰色预测通过鉴别系统因素之间发展趋势的相异程度,即进行关联分析,并对原始数据进行生成处理来寻找系统变动的规律,生成有较强规律性的数据序列,然后建立相应的微分方程模型,从而预测事物未来发展趋势的状况。其用等时距观测到的反应预测对象特征的一系列数量值构造灰色预测模型,预测未来某一时刻的特征量,或达到某一特征量的时间。

       应用领域:气象预报、地震预报、病虫害预报等

       其核心体系是灰色模型(Grey Model,简称GM),即对原始数据作累加生成(或其它方法生成)得到近似的指数规律再进行建模的方法。

R语言中深灰的颜色 r语言灰色预测模型_灰色预测模型代码

我们先来说一说GM(1,1)模型

GM(1,1)模型表示模型是1阶微分方程,且只含1个变量的灰色模型。

第一步:数据的检验与处理

首先,为了保证建模方法的可行性,需要对已知数据列作必要的检验处理。设参考数据为

R语言中深灰的颜色 r语言灰色预测模型_数据_02

计算序列的级比:

R语言中深灰的颜色 r语言灰色预测模型_数据_03

如果所有的级比都落在可容覆盖

R语言中深灰的颜色 r语言灰色预测模型_原始数据_04

则序列可以作为模型GM(1,1)的数据进行灰色预测。否则,需要对序列做必要的变换处理,使其落入可容覆盖内。即取适当的常数,作平移变换

R语言中深灰的颜色 r语言灰色预测模型_灰色预测模型代码_05

使序列

R语言中深灰的颜色 r语言灰色预测模型_建模_06

的级比达到要求:

R语言中深灰的颜色 r语言灰色预测模型_建模_07

第二步:建立模型

生成X(0)的累加数列:

R语言中深灰的颜色 r语言灰色预测模型_灰色预测模型代码_08

X(1)的均值生成数列Z(1):

R语言中深灰的颜色 r语言灰色预测模型_建模_09

先建立白化方程(影子方程):

R语言中深灰的颜色 r语言灰色预测模型_R语言中深灰的颜色_10

将上式离散化,微分变差分,得到灰微分方程如下:

R语言中深灰的颜色 r语言灰色预测模型_灰色预测模型代码_11

求解参数a,u 用最小二乘法,可以解得上式中的参数,其中a称为发展系数,其大小反映了序列X(0)的增长速度,u称为灰作用量(内生变量)

最终我们就可以得到X(1)的预测公式:

R语言中深灰的颜色 r语言灰色预测模型_R语言中深灰的颜色_12

上面讲到的仅是一种最简单最基础的GM(1,1)模型,其适用于具有较强指数规律的序列,只能描述单调的变化过程,对于非单调的摆动发展序列或有饱和的S形序列,可以考虑建立GM(2,1),DGM和Verhulst模型。

   总体来说,灰色预测的优点是不需要很多的数据,一般只需要4个数据就够,能解决历史数据少、序列的完整性及可靠性低的问题;能利用微分方程来充分挖掘系统的本质,精度高;能将无规律的原始数据进行生成得到规律性较强的生成序列,运算简便,易于检验,具有不考虑分布规律,不考虑变化趋势。缺点是只适用于中短期的预测,只适合指数增长的预测。

话不多说,上GM(1,1)代码:

%建立符号变量a(发展系数)和b(灰作用量)syms a b;c = [a b]';%原始数列 AA = [0.025, 0.023, 0.029, 0.044, 0.084, 0.164, 0.332, 0.521, 0.97, 1.6, 2.45, 3.11, 3.57, 3.76, 3.96, 4, 4.46, 4.4, 4.49, 4.76, 5.01];n = length(A);%对原始数列 A 做累减得到数列 Bfor i = 2:n    H(i) = A(i) - A(i - 1);endH(1) = [];%对原始数列 A 做紧邻均值生成for i = 2:n    C(i) = (A(i) + A(i-1))/2;endC(1) = [];%构造数据矩阵 D = [-C; C.^2];Y = H; Y = Y';%使用最小二乘法计算参数 a(发展系数)和b(灰作用量)c = inv(D*D')*D*Y;c = c';a = c(1); b = c(2);%得到预测出的数据F = []; F(1) = A(1);for i = 2:(n+n)    F(i) = (a*A(1))/(b*A(1)+(a - b*A(1))*exp(a*(i-1)));enddisp('预测数据为:');F%绘制曲线图t1 = 0:n-1; t2 = 0:2*n-1;plot(t1, A, 'ro'); hold on;plot(t2, F);xlabel('时间点均匀采样/5h'); ylabel('细菌培养液吸光度/OD600');legend('实际数量','预测数量');title('大肠杆菌培养S形增长曲线');grid on;

然后就可轻松得到:

R语言中深灰的颜色 r语言灰色预测模型_数据_13

如果有小伙伴需要利用,仅需改变其中数据,和表格的设置,就可以使用啦!

你学会了嘛?