偏最小二乘回归方法(PLS),一般情况下指研究两组多重相关变量之间的相互依赖关系,并研究用一组变量取预测另外一组变量,采用的方法不包括最小二乘准则下的经典多元线性回归分析以及提取自变量组主成分的主成分回归分析等方法。
偏最小二乘回归方法指的是提供一种多对多线性回归建模的方法,特别当两组变量的个数很多且变量之间存在多重相关性时,而观测数据又比较少,则使用偏最小二乘回归方法具有传统的经典回归分析等方法所没有的优点。
偏最小二乘法是集主成分分析、典型相关分析和多元线性回归分析3种分析方法的优点于一身。它与主成分分析法都试图提取出反映数据变异的最大信息,但主成分分析法只考虑一个自变量矩阵,而偏最小二乘法还有一个“响应”矩阵,因此具有预测功能。
考虑
个因变量
与
个自变量
之间的建模问题。偏最小二乘回归的基本思想是首先同时提取自变量集和因变量集中的第一成分
,并要求使其相关程度达到最大。然后,建立因变量
与
的回归,若回归方程已达到满意的精度,则算法终止。否则,继续对第二对主成分进行提取,以此类推,直至达到满意的精度。
若最终对自变量集提取
个成分
,偏最小二乘回归将通过建立
与原自变量的回归方程式,即偏最小二乘回归方程式。
在探讨偏最小二乘回归方程式的过程中,不妨设
个因变量
与
个自变量
都是标准化变量。则自变量组和因变量组的
次标准化观测数据矩阵分别是:
偏最小二乘回归分析建模的具体步骤为:
由两组变量集的标准化观测数据矩阵A和B,计算出第一对成分的得分向量,分别为
和
上述两个要求转化为以下两个可求的条件极值问题:
利用拉格朗日乘数法,将问题转化为求单位向量
和
,使得
达到最大。将问题转化为计算
矩阵
的特征值和特征向量,且
的最大特征值为
,相应的单位特征向量就是求解
,而通过
可以求得
,即
其中:
,
分别为多对一的回归模型中的参数向量;
是残差阵。
回归系数向量
,
的最小二乘估计为:
则称回归系数向量
,
为模型效应负荷量。
而
,
,为第二对成分的得分向量,且
分别为
的第二对成分的负荷量。这时有
将
代入
,即得
个因变量得偏最小二乘回归方程式为
每次舍去第
个观测数据,对余下得
个观测数据使用最小二乘回归方法建模,并考虑抽取
个成分后拟合得回归式,然后把舍去得自变量组第
个观测点上的预测值
。对
重复以上的验证,即抽取
个成分时第
个因变量
得预测误差平方和为
得的预测误差平方和为
另外,再采用所有的样本点,拟合含
个成分的回归方程。记第
个样本点的预测值为
,则可定义
的误差平方和为
定义
的误差和为
当
达到最小值时,对应的
即为所求的成分的个数。一般来说,总存在
使得
,而
。所以在提取成分时,总希望比值
越小越好;一般可设定限制值为0.05,即当
时,增加成分
有利于提高模型精度。
定义交叉有效性为
,在建模的每一步计算结束之前,都需要进行交叉有效性检验,若在第
步时存在
,则模型达到精度要求,可停止提取成分。若
,则表示第
步提取的成分
的边际贡献显著,应当继续进行第
步计算。
MATLAB 工具箱中偏最小二乘回归命令PLSREGRESS的使用格式为
[XL,YL.XS.YS.BETA,PCTVAR,MSE,stats]=plsregress(X,Y,ncomp)
其中,X为
的自变量数据矩阵,每一行对应一个观测,每一列对应一个变量;Y为
的因变量数据矩阵,每一行对应一个观测,每一列对应一个变量;ncomp为成分的个数,默认值为
。返回值XL为对应于
的
矩阵,它的每一行对应于式的第一式的回归表达式;YL为对应于
的
矩阵,它的每一行为对应于式的第二式的回归表达式;XS是对应于
的得分矩阵,MATLAB 工具箱中对应于式的特征向量
不是取为单位向量,
趣味使得每个
对应的得分向量式单位向量,且不同的得分向量为正交的;YS是对应于
的得分矩阵,其中每一列不是单位向量且列于列之间不正交;BETA的每一列为对应于式的回归表达式;PCTVAR是一个两行的矩阵,其中的每一行的每一个元素对应着自变量提取成分的贡献两,第二行的每个元素对应着因变量提取出成分的二贡献两;MSE是一个两行的矩阵,第一行的第
个元素对应着自变量与它前
个提出成分之间回归方程的剩余标准差,第二行的第
个元素对应着因量与它前
个提出成分之间回归方程的剩余标准差;stats返回4个值,其中返回值stats。W的每一列对应着特征向量
,其中的特征向量不是单位向量。
考察的指标(因变量)
表示原辛烷值,自变量
表示直接蒸馏成分,
表示重整汽油,
表示原有热裂化油,
表示原油催化裂化油,
表示聚合物,
表示烷基化物,
表示天然香精。7个变量表示7个成分含量的比例。表1.1 中给出了12中混合物74种成分和
的数据。使用偏最小二乘方法建立出
与7个变量之间的回归方程,用于确定7种构成元素对
的影响。
表1.1 化工实验的原始数据
序号 |
||||||||
1 |
0.00 |
0.23 |
0.00 |
0.00 |
0.00 |
0.74 |
0.03 |
98.70 |
2 |
0.00 |
0.10 |
0.00 |
0.00 |
0.12 |
0.74 |
0.04 |
97.80 |
3 |
0.00 |
0.00 |
0.00 |
0.10 |
0.12 |
0.74 |
0.04 |
96.60 |
4 |
0.00 |
0.49 |
0.00 |
0.00 |
0.12 |
0.37 |
0.02 |
92.00 |
5 |
0.00 |
0.00 |
0.00 |
0.62 |
0.12 |
0.18 |
0.08 |
86.60 |
6 |
0.00 |
0.62 |
0.00 |
0.00 |
0.00 |
0.37 |
0.01 |
91.20 |
7 |
0.17 |
0.27 |
0.10 |
0.38 |
0.00 |
0.00 |
0.08 |
81.90 |
8 |
0.17 |
0.19 |
0.10 |
0.38 |
0.02 |
0.06 |
0.08 |
83.10 |
9 |
0.17 |
0.21 |
0.10 |
0.38 |
0.00 |
0.06 |
0.08 |
82.40 |
10 |
0.17 |
0.15 |
0.10 |
0.38 |
0.02 |
0.10 |
0.08 |
83.20 |
11 |
0.21 |
0.36 |
0.12 |
0.25 |
0.00 |
0.00 |
0.06 |
81.40 |
12 |
0.00 |
0.00 |
0.00 |
0.55 |
0.00 |
0.37 |
0.08 |
88.10 |
将各个指标
转化为
,即
则标准化指标变量为
将各个指标
转化为
,即
则对应的标准化指标变量为
解得七对成分中的第一对成分为
不难发现前三个成分所占比例在90%以上,则取前三个成分进行研究。
求得自变量组和因变量组与
之间的回归方程为
由(2)和(3)中的方程回代可得,标准化指标变量之间的回归方程为
再代回标准化变量,可得回归方程为
通过MATLAB 软件根据上述数据绘制回归系数图。
将表1.1中的数据另存为文本文件“data1101.txt”,导入MATLAB中。
在MATLAB中编写如下代码:
clc,clear
ab0=load('data1101.txt');
mu=mean(ab0);sig=std(ab0);
ab=zscore(ab0);
a=ab(:,[1:end-1]);b=ab(:,end);
[XL,YL,XS,YS,BETA,PCTVAR,MSE,stats]=plsregress(a,b);
xw=a\XS;
yw=b\YS;
ncomp=input('请根据PCTVAR的值确定提出成分对的个数ncomp=');
[XL2,YL2,XS2,YS2,BETA2,PCTVAR2,MSE2,stats2]=plsregress(a,b,ncomp);
n=size(a,2);
beta3(1)=mu(end)-mu(1:n)./sig(1:n)*BETA2([2:end]).*sig(end);
beta3([2:n+1])=(1./sig(1:n))'*sig(n+1:end).*BETA2([2:end]);
bar(BETA2','k')
yhat=repmat(beta3(1),[size(a,1),1])+ab0(:,[1:n])*beta3([2:end])';
ymax=max([yhat;ab0(:,end)]);
figure
plot(yhat(:,1),ab0(:,n+1),'*',[0:ymax],[0:ymax],'Color','k')
legend('原辛烷值预测图',2)
绘制出回归系数图可以看出原有催化裂化油和烷基化物变量在解释回归方程时起到了极为重要的作用。
考虑到整个回归方程的模型精度,图1.2中将
为坐标值,对所有的样本点绘制预测图。不难发现如果所以的点都能在图的对角线左右分布,则方程的拟合结果较为理想。
图1.1 回归系数的直方图
图1.2 原辛烷值预测图
试对表1.2 中的38名学生的体质和运动能力数据,使用偏最小二乘法建立5个运动能力指标与7个体质变量的回归方程。
序号 |
体 质 情 况 |
运 动 能 力 |
||||||||||
1 |
46 |
55 |
126 |
51 |
75.0 |
25 |
72 |
6.8 |
489 |
27 |
8 |
360 |
2 |
52 |
55 |
95 |
42 |
81.2 |
18 |
50 |
7.2 |
464 |
30 |
5 |
348 |
3 |
46 |
69 |
107 |
38 |
98.0 |
18 |
74 |
6.8 |
430 |
32 |
9 |
386 |
4 |
49 |
50 |
105 |
48 |
97.6 |
16 |
60 |
6.8 |
362 |
26 |
6 |
331 |
5 |
42 |
55 |
90 |
46 |
66.5 |
2 |
68 |
7.2 |
453 |
23 |
11 |
391 |
6 |
48 |
61 |
106 |
43 |
78.0 |
25 |
58 |
7.0 |
405 |
29 |
7 |
389 |
7 |
49 |
60 |
100 |
49 |
90.6 |
15 |
60 |
7.0 |
420 |
21 |
10 |
379 |
8 |
48 |
63 |
122 |
52 |
56.0 |
17 |
68 |
7.0 |
466 |
28 |
2 |
362 |
9 |
45 |
55 |
105 |
48 |
76.0 |
15 |
61 |
6.8 |
415 |
24 |
6 |
386 |
10 |
48 |
64 |
120 |
38 |
60.2 |
20 |
62 |
7.0 |
413 |
28 |
7 |
398 |
11 |
49 |
52 |
100 |
42 |
53.4 |
6 |
42 |
7.4 |
404 |
23 |
6 |
400 |
12 |
47 |
62 |
100 |
34 |
61.2 |
10 |
62 |
7.2 |
427 |
25 |
7 |
407 |
13 |
41 |
51 |
101 |
53 |
62.4 |
5 |
60 |
8.0 |
372 |
25 |
3 |
409 |
14 |
52 |
55 |
125 |
43 |
86.3 |
5 |
62 |
6.8 |
496 |
30 |
10 |
350 |
15 |
45 |
52 |
94 |
50 |
51.4 |
20 |
65 |
7.6 |
394 |
24 |
3 |
399 |
16 |
49 |
57 |
110 |
47 |
72.3 |
19 |
45 |
7.0 |
446 |
30 |
11 |
337 |
17 |
53 |
65 |
112 |
47 |
90.4 |
15 |
75 |
6.6 |
420 |
30 |
12 |
357 |
18 |
47 |
57 |
95 |
47 |
72.3 |
9 |
64 |
6.6 |
447 |
25 |
4 |
447 |
19 |
48 |
60 |
120 |
47 |
86.4 |
12 |
62 |
6.8 |
398 |
28 |
11 |
381 |
20 |
49 |
55 |
113 |
41 |
84.1 |
15 |
60 |
7.0 |
398 |
27 |
4 |
387 |
21 |
48 |
69 |
128 |
42 |
47.9 |
20 |
63 |
7.0 |
485 |
30 |
7 |
350 |
22 |
42 |
57 |
122 |
46 |
54.2 |
15 |
63 |
7.2 |
400 |
28 |
6 |
388 |
23 |
54 |
64 |
155 |
51 |
71.4 |
19 |
61 |
6.9 |
511 |
33 |
12 |
298 |
24 |
53 |
63 |
120 |
42 |
56.6 |
8 |
53 |
7.5 |
430 |
29 |
4 |
353 |
25 |
42 |
71 |
138 |
44 |
65.2 |
17 |
55 |
7.0 |
487 |
29 |
9 |
370 |
26 |
46 |
66 |
120 |
45 |
62.2 |
22 |
68 |
7.4 |
470 |
28 |
7 |
360 |
27 |
45 |
56 |
91 |
29 |
66.2 |
18 |
51 |
7.9 |
380 |
26 |
5 |
358 |
28 |
50 |
60 |
120 |
42 |
56.6 |
8 |
57 |
6.8 |
460 |
32 |
5 |
348 |
29 |
42 |
51 |
126 |
50 |
50.0 |
13 |
57 |
7.7 |
398 |
27 |
2 |
383 |
30 |
48 |
50 |
115 |
41 |
52.9 |
6 |
39 |
7.4 |
415 |
28 |
6 |
314 |
31 |
42 |
52 |
140 |
48 |
56.3 |
15 |
60 |
6.9 |
470 |
27 |
11 |
348 |
32 |
48 |
67 |
105 |
39 |
69.2 |
23 |
60 |
7.6 |
450 |
28 |
10 |
326 |
33 |
49 |
74 |
151 |
49 |
54.2 |
20 |
58 |
7.0 |
500 |
30 |
12 |
330 |
34 |
47 |
55 |
113 |
40 |
71.4 |
19 |
64 |
7.6 |
410 |
29 |
7 |
331 |
35 |
49 |
74 |
120 |
53 |
54.5 |
22 |
59 |
6.9 |
500 |
33 |
21 |
348 |
36 |
44 |
52 |
110 |
37 |
54.9 |
14 |
57 |
7.5 |
400 |
29 |
2 |
421 |
37 |
52 |
66 |
130 |
47 |
45.9 |
14 |
45 |
6.8 |
505 |
28 |
11 |
355 |
38 |
48 |
68 |
100 |
45 |
53.6 |
23 |
70 |
7.2 |
522 |
28 |
9 |
352 |
将各个指标
转化为
,即
则标准化指标变量为
将各个指标
转化为
,即
则对应的标准化指标变量为
回归方程为
求出上述回归方程通过编写的MATLAB代码所得,MATLAB代码如下所示:
clc,clear
ab0=load('data1102.txt');
mu=mean(ab0);sig=std(ab0);
ab=zscore(ab0);
a=ab(:,[1:7]);b=ab(:,[8:12]);
[XL,YL,XS,YS,BETA,PCTVAR,MSE,stats]=plsregress(a,b);
xw=a\XS;
yw=b\YS;
ncomp=input('¸ù¾ÝPCTVARµÄֵȷ¶¨Ìá³ö³É·Ö¶ÔµÄ¸öÊýncomp=');
[XL2,YL2,XS2,YS2,BETA2,PCRVAR2,MSE2,stats2]=plsregress(a,b,ncomp);
n=size(a,2);m=size(b,2);
beta3(1,:)=mu(n+1:end)-mu(1:n)./sig(1:n)*BETA2([2:end],:).*sig(n+1:end);
beta3([2:n+1],:)=(1./sig(1:n))'*sig(n+1:end).*BETA2([2:end],:);
bar(BETA2','k')
yhat=repmat(beta3(1,:),[size(a,1),1])+ab0(:,[1:n])*beta3([2:end],:);
ymax=max([yhat;ab0(:,[n+1:end])]);
figure
for i=1:5
subplot(2,3,i)
plot(yhat(:,i),ab0(:,n+i),'*',[0:ymax(i)],[0:ymax(i)],'Color','k')
legend('y',2)
hold on
end
运行完MATLAB 所得拟合图如下图1.3,1.4所示。
图1.3 回归系数预测图
图1.4 回归系数拟合图