灰色预测及其MATLAB实现(一)
灰色预测是一种常规的预测手段,具有操作简便,所需数据量少等优点,一般只需有4个数据就可以进行预测。
灰色预测是基于灰色系统理论的预测方法。灰色系统由我国著名学者邓聚龙教授在1982年提出,是相对于“白色模型”——完全信息透明的模型,和“黑色模型”——对信息一无所知的模型的模型概念。利用灰色系统解决的问题主要是具有不确定性的问题:
- 信息具有模糊性,无法用数学方程精确刻画。
- 机理具有不确定性。
- 信息贫瘠的不确定性。
灰色关联度矩阵
灰色关联度分析了向量与向量之间以及矩阵与矩阵之间的关联度,而向量与向量之间的关联度可以看作矩阵与矩阵之间的关联度的一种特殊形式。
计算关联度,一定是计算某个待比较的数列与参照物(亦即参考数列)之间的相关程度。
假设有一组参照数列如下:
x
j
=
(
x
j
(
1
)
,
x
j
(
2
)
,
x
j
(
3
)
,
⋯
,
x
j
(
k
)
,
⋯
,
x
j
(
n
)
)
j
=
1
,
2
,
3
,
⋯
,
s
x_j=(x_j(1),x_j(2),x_j(3),\cdots,x_j(k),\cdots,x_j(n))\ \ \ \ j=1,2,3,\cdots,s
xj=(xj(1),xj(2),xj(3),⋯,xj(k),⋯,xj(n)) j=1,2,3,⋯,s
假设有一组待比较数组如下:
x
i
=
(
x
i
(
1
)
,
x
i
(
2
)
,
x
i
(
3
)
,
⋯
,
x
i
(
k
)
,
⋯
,
x
i
(
n
)
)
i
=
1
,
2
,
3
,
⋯
,
t
x_i=(x_i(1),x_i(2),x_i(3),\cdots,x_i(k),\cdots,x_i(n))\ \ \ \ i=1,2,3,\cdots,t
xi=(xi(1),xi(2),xi(3),⋯,xi(k),⋯,xi(n)) i=1,2,3,⋯,t
则定义关联系数如下:
ξ
j
i
(
k
)
=
m
i
n
i
m
i
n
k
∣
x
j
(
k
)
−
x
i
(
k
)
∣
+
ρ
⋅
m
a
x
i
m
a
x
k
∣
x
j
(
k
)
−
x
i
(
k
)
∣
∣
x
j
(
k
)
−
x
i
(
k
)
∣
+
ρ
⋅
m
a
x
i
m
a
x
k
∣
x
j
(
k
)
−
x
i
(
k
)
∣
\xi_{ji}(k)=\frac{\underset{i}{min}\ \underset{k}{min}|x_j(k)-x_i(k)|+\rho \cdot\underset{i}{max}\ \underset{k}{max}|x_j(k)-x_i(k)|}{|x_j(k)-x_i(k)|+\rho \cdot\underset{i}{max}\ \underset{k}{max}|x_j(k)-x_i(k)|}
ξji(k)=∣xj(k)−xi(k)∣+ρ⋅imax kmax∣xj(k)−xi(k)∣imin kmin∣xj(k)−xi(k)∣+ρ⋅imax kmax∣xj(k)−xi(k)∣
关于该式的说明如下:
- 变量 ξ j i ( k ) \xi_{ji}(k) ξji(k)表示的是第 i i i个数列与第 j j j个参考数列第 k k k个样本之间的关联系数。
- m i n i m i n k ∣ x j ( k ) − x i ( k ) ∣ \underset{i}{min}\ \underset{k}{min}|x_j(k)-x_i(k)| imin kmin∣xj(k)−xi(k)∣ 和 m a x i m a x k ∣ x j ( k ) − x i ( k ) ∣ \underset{i}{max}\ \underset{k}{max}|x_j(k)-x_i(k)| imax kmax∣xj(k)−xi(k)∣表示参考数列矩阵与比较数列矩阵作差后的最小值和最大值,目的是为了保证 ξ j i ( k ) \xi_{ji}(k) ξji(k)的值在[0,1]区间内,同时上下对称的结构可以消除量纲不同和数量级悬殊的问题。
- ∣ x j ( k ) − x i ( k ) ∣ |x_j(k)-x_i(k)| ∣xj(k)−xi(k)∣即为汉明距离(“Hamming distance”),汉明距离的倒数被称为反倒数距离,灰色关联度的本质就是通过反倒数距离的大小来判定关联程度,倒数越大,表示两条曲线之间距离越小,其曲线程度越相似。
- ρ \rho ρ的取值约定俗成为[0,1],但实际上 ρ \rho ρ的取值范围为 ( 0 , + ∞ ) (0,+\infin) (0,+∞)。但不管 ρ \rho ρ如何取值,其只改变 ξ j i ( k ) \xi_{ji}(k) ξji(k)的绝对大小,而不改变关联度的相对强弱。
由于
ξ
j
i
(
k
)
\xi_{ji}(k)
ξji(k)只能反映处点与点之间的相关性,相关性信息分散,不方便刻画数列之间的相关性,需要把
ξ
j
i
(
k
)
\xi_{ji}(k)
ξji(k)整合起来,定义:
r
j
i
=
Σ
k
=
1
n
ξ
j
i
(
k
)
n
r_{ji}=\frac{\overset{n}{\underset{k=1}{\Sigma}}\xi_{ji}(k)}{n}
rji=nk=1Σnξji(k)
变量
r
j
i
r_{ji}
rji即为相关度,结合实际背景,有正面作用的即为正相关,反之则为负相关;
r
j
i
r_{ji}
rji大于0.7称为强相关,小于0.3称为弱相关。
将
x
i
x_i
xi与
x
j
x_j
xj之间的相关度写为矩阵形式:
R
=
[
r
11
r
12
⋯
r
1
t
r
21
r
22
⋯
r
2
t
⋮
⋮
⋱
⋮
r
s
1
r
s
2
⋯
r
s
t
]
R= \begin{bmatrix} r_{11}&r_{12}&\cdots&r_{1t}\\ r_{21}&r_{22}&\cdots&r_{2t}\\ \vdots&\vdots&\ddots&\vdots\\ r_{s1}&r_{s2}&\cdots&r_{st}\\ \end{bmatrix}
R=⎣
⎡r11r21⋮rs1r12r22⋮rs2⋯⋯⋱⋯r1tr2t⋮rst⎦
⎤
则通过观察某一列数值明显大于其他列数值,则称该列为优势子因素;假如某一行数值明显大于其他行数值,则称该行为优势母因素,优势母因素易受子因素的驱动影响。
灰色关联度矩阵的程序设计
1979 | 1980 | 1981 | 1982 | 1983 | |
---|---|---|---|---|---|
固定资产投资 | 308.58 | 310 | 295 | 346 | 367 |
工业投资 | 195.4 | 189.9 | 187.2 | 205 | 222.7 |
农业投资 | 24.6 | 21 | 12.2 | 15.1 | 14.57 |
科技投资 | 20 | 25.6 | 23.3 | 29.2 | 30 |
交通投资 | 18.98 | 19 | 22.3 | 23.5 | 27.655 |
国民收入 | 170 | 174 | 197 | 216.4 | 235.8 |
工业收入 | 57.55 | 70.74 | 76.8 | 80.7 | 89.85 |
农业收入 | 88.56 | 70 | 85.38 | 99.83 | 103.4 |
商业收入 | 11.19 | 13.28 | 16.82 | 18.9 | 22.8 |
交通收入 | 4.03 | 4.26 | 4.34 | 5.06 | 5.78 |
建筑业收入 | 13.7 | 15.6 | 13.77 | 11.98 | 13.95 |
function [R]=GrayConnect(X,Y)
[xa,xb]=size(X);
[ya,yb]=size(Y);
if (xb==yb)
else
return ;
end
R=zeros(ya,xa);
q=0.5;
for i = 1:ya
k=zeros(xa,xb);
for j=1:xa
k(j,:)=abs(X(j,:)-Y(i,:));
end
temp1=min(min(k));
temp2=q*max(max(k));
for j=1:xa
sum=0;
for t=1:xb
sum=sum+(temp1+temp2)/(abs(X(j,t)-Y(i,t))+temp2);
end
R(i,j)=sum/xb;
end
end
end
将数据导入MATLAB,
A=xlsread('Grey.xlsx','B1:F11');
将数据标准化,
for i=1:11
A(i,:)=A(i,:)/A(i,1);
end
将母因素和子因素分割为X和Y,并使用函数GrayConnect,
X=A(1:5,:);
Y=A(6:11,:);
[R]=GrayConnect(X,Y)
得到结果如下:
R
=
[
0.8016
0.7611
0.5570
0.8102
0.9355
0.6887
0.6658
0.5287
0.8854
0.8004
0.8910
0.8581
0.5786
0.5773
0.6749
0.6776
0.6634
0.5675
0.7800
0.7307
0.8113
0.7742
0.5648
0.8038
0.9205
0.7432
0.7663
0.5616
0.6065
0.6319
]
R= \begin{bmatrix} 0.8016&0.7611&0.5570&0.8102&0.9355\\ 0.6887&0.6658&0.5287&0.8854&0.8004\\ 0.8910&0.8581&0.5786&0.5773&0.6749\\ 0.6776&0.6634&0.5675&0.7800&0.7307\\ 0.8113&0.7742&0.5648&0.8038&0.9205\\ 0.7432&0.7663&0.5616&0.6065&0.6319\\ \end{bmatrix}
R=⎣
⎡0.80160.68870.89100.67760.81130.74320.76110.66580.85810.66340.77420.76630.55700.52870.57860.56750.56480.56160.81020.88540.57730.78000.80380.60650.93550.80040.67490.73070.92050.6319⎦
⎤