Matlab实现多元回归实例.docx
《Matlab实现多元回归实例.docx》由会员分享,可在线阅读,更多相关《Matlab实现多元回归实例.docx(14页珍藏版)》请在冰豆网上搜索。
Matlab实现多元回归实例
Matlab实现多元回归实例
(一)一般多元回归
一般在生产实践和科学研究中,人们得到了参数xXi,,Xn和因变量y的数据,需要求出关系式yfX,这时就可以用到回归分析的方法。
如果只考虑f是线性函数的情形,当自变量只有一个时,即,XXi,,Xn中n1时,称
为一元线性回归,当自变量有多个时,即,X%,,Xn中n2时,称为多元
线性回归。
进行线性回归时,有4个基本假定:
1因变量与自变量之间存在线性关系;
2残差是独立的;
3残差满足方差奇性;
4残差满足正态分布。
在Matlab软件包中有一个做一般多元回归分析的命令regeress调用格式如
下:
[b,bint,r,rint,stats]=regress(y,X,alpha)或者
[b,bint,r,rint,stats]=regress(y,X)此时,默认alpha=0.05.
这里,y是一个n1的列向量,X是一个nm1的矩阵,其中第一列是全1向量(这一点对于回归来说很重要,这一个全1列向量对应回归方程的常数项),一般情况下,需要人工造一个全1列向量。
回归方程具有如下形式:
y01X1mXm
其中,是残差。
在返回项[b,bint,r,rint,stats]中,
1b01m是回归方程的系数;
2bint是一个m2矩阵,它的第i行表示i的(1-alpha)置信区间;
3r是n1的残差列向量;
4rint是n2矩阵,它的第i行表示第i个残差匚的(1-alpha)置信区间;
注释:
残差与残差区间杠杆图,最好在0点线附近比较均匀的分布,而不呈现一定的规律性,如果是这样,就说明回归分析做得比较理想。
5一般的,stast返回4个值:
R2值、F_检验值、阈值f,与显著性概率相关
的p值(如果这个p值不存在,贝U,只输出前3项)。
注释:
(1)一般说来,R2值越大越好。
(2)人们一般用以下统计量对回归方程做显著性检验:
F_检验、t_检验、以及相关系数检验法。
Matlab软件包输出F_检验值和阈值f。
一般说来,F_检验值越大越好,特别的,应该有F_检验值f。
(3)与显著性概率相关的p值应该满足palpha。
如果palpha,则说明回归方程中有多余的自变量,可以将这些多余的自变量从回归方程中剔除(见下面逐步回归的内容)。
这几个技术指标说明拟合程度的好坏。
这几个指标都好,就说明回归方程是有意义的。
例1(Hamilton,1987)数据如下:
序号
Y
X1
X2
1
12.37
2.23
9.66
2
12.66
2.57
8.94
3
12.00
3.87
4.40
4
11.93
3.10
6.64
5
11.06
3.39
4.91
6
13.03
2.83
8.52
7
13.13
3.02
8.04
8
11.44
2.14
9.05
9
12.86
3.04
7.71
10
10.84
3.26
5.11
11
11.20
3.39
5.05
12
11.56
2.35
8.51
13
10.83
2.76
6.59
14
12.63
3.90
4.90
15
12.46
3.16
6.96
第一步分析数据
在Matlab软件包中分析是否具有线性关系,并作图观察,M—文件
opt_hanmilton_1987:
x1=[2.23,2.57,3.87,3.10,3.39,2.83,3.02,2.14,3.04,3.26,3.39,2.35,2.76,3.90,3.16];
x2=[9.66,8.94,4.40,6.64,4.91,8.52,8.04,9.05,7.71,5.11,5.05,8.51,6.59,4.90,6.96];y=[12.37,12.66,12.00,11.93,11.06,13.03,13.13,11.44,12.86,10.84,11.20,11.56,10.83,12.63,12.46];
corrcoef(x1,y)
corrcoef(x2,y)
plot3(x1,x2,y,'*')
得到结果:
ans=
1.00000.0025
0.00251.0000
ans=
1.00000.4341
0.43411.0000
即,corrcoef(x1,y)=0.0025,corrcoef(x2,y)=0.4341,说明没有非常明显的单变量线性关系。
图形如下:
这说明,y,x1,x2在一个平面上,满足线性关系:
a1x1a2x2bya
或者,换成一个常见的形式ya0a1x1a2x2
其中,是残差。
于是,在Matlab软件包中做线性多元回归,写一个M—文件opt_regress_hamilton
x1=[2.23,2.57,3.87,3.10,3.39,2.83,3.02,2.14,3.04,3.26,3.39,2.35,2.76,3.90,3.16]';
x2=[9.66,8.94,4.40,6.64,4.91,8.52,8.04,9.05,7.71,5.11,5.05,8.51,6.59,4.90,6.96]';
y=[12.37,12.66,12.00,11.93,11.06,13.03,13.13,11.44,12.86,10.84,11.20,11.56,10.83,12
.63,12.46]';
e=ones(15,1);
x=[e,x1,x2];
[b,bint,r,rint,stats]=regress(y,x,0.05)
rcoplot(r,rint)
其中,rcoplot(Residualcaseorderplo)表示画出残差与残差区间的杠杆图。
执
行后得到:
b=
-4.5154
3.0970
1.0319
bint=
-4.6486-4.3822
3.07033.1238
1.02381.0399r=
0.0113
-0.0087
-0.0102
-0.0069
0.0101
-0.0106
-0.0037
-0.0105
0.0049
-0.0136
0.0057
0.0163
-0.0023
0.0110
0.0071
rint=
-0.00870.0314
-0.03030.0128
-0.03010.0098
-0.02990.0162
-0.01060.0308
-0.03130.0102
-0.02520.0178
-0.02990.0089
-0.01740.0272
-0.03310.0058
-0.01610.0275
-0.00270.0354
-0.02360.0190
-0.00790.0299
-0.01560.0298
stats=
1.0e+004*
00.0000
0.00013.9222
即,y4.5153.097X,1.0319x2。
置信度95%,且R21.0,F_检验值392220,与显著性概率0.05相关的
p0.00000.05,这说明,回归方程中的每个自变量的选取,都是有意义的。
残差杠杆图:
C3EDIO0102
D.D.aD-D.
从杠杆图看出,所有的残差都在0点附近均匀分布,区间几乎都位于0.03,0.03之间,即,没有发现高杠杆点,也就是说,数据中没有强影响点、异常观测点。
综合起来看,以上回归结果(回归函数、拟合曲线或曲面)近乎完美。
(二)逐步回归
假设已有数据X和丫,在Matlab软件包中,使用stepwise命令进行逐步回命令的使用格式如下:
stepwise(X,Y)
注意:
应用stepwise命令做逐步回归,数据矩阵X的第一列不需要人工加一个全1向量,程序会自动求出回归方程的常数项(intercept)。
在应用stepwise命令进行运算时,程序不断提醒将某个变量加入(Movein)回归方程,或者提醒将某个变量从回归方程中剔除(Moveout)。
注释:
①使用stepwise命令进行逐步回归,既有剔除变量的运算,也有引入变量的运算,它是目前应用较为广泛的一种多元回归方法。
②在运行stepwise(X,Y)
命令时,默认显著性概率0.05。
例2(Hald,1960)Hald数据是关于水泥生产的数据。
某种水泥在凝固时放出的热量丫(单位:
卡/克)与水泥中4种化学成分所占的百分比有关:
x1:
3CaoAI2O3
X2:
3CaoSio2
X3:
4CaoAI2O3Fe2Q
X4:
2CaoSiQ
在生产中测得13组数据:
序号
X1
X2
X3
X4
Y
1
7
26
6
P60
78.5
2
1
29
15
52
74.3
3
11
56
8
20
104.3
4
11
31
8
47
87.6
5
7
52
6
33
95.9
6
11
55
9
「22
109.2
7
3
71
17
6
102.7
8
1
31
22
44
72.5
9
2
54
18
「22
93.1
10
21
47
4
26
115.9
11
1
40
23
34
83.8
12
11
66
9
12
113.3
13
10
68
8
12
109.4
求出关系式丫fX。
解:
(1)本问题涉及的数据是5维的,不能画图观察。
先做异常值分析。
X=[7,26,6,60;1,29,15,52;11,56,8,20;11,31,8,47;7,52,6,33;11,55,9,22;3,71,17,6;1,31,2
2,44;2,54,18,22;21,47,4,26;1,40,23,34;11,66,9,12;10,68,8,12];
丫=[78.5,74.3,104.3,87.6,95.9,109.2,102.7,72.5,93.1,115.9,83.8,113.3,109.4]';
A=[X,Y];
mahal(A,A)
程序执行后得到结果:
ans=
5.6803
3.6484
6.7002
3.3676
3.3839
4.4300
4.0080
6.5067
3.0849
7.5016
5.1768
2.4701
可以认为数据都是正常的。
(2)一般多元回归。
在Matlab软件包中写一个M—文件opt_cement_1:
X=[7,26,6,60;1,29,15,52;11,56,8,20;11,31,8,47;
7,52,6,33;11,55,9,22;3,71,17,6;1,31,22,44;
2,54,18,22;21,47,4,26;1,40,23,34;11,66,9,12;
10,68,8,12];
Y=[78.5,74.3,104.3,87.6,95.9,109.2,102.7,72.5,
93.1,115.9,83.8,113.3,109.4]';
a1=ones(13,1);
A=[a1,X];
[b,bint,r,rint,stat]=regress(Y,A)
rcoplot(r,rint)
程序执行后