当前位置:文档之家› Matlab实现多元回归实例

Matlab实现多元回归实例

Matlab 实现多元回归实例(一)一般多元回归一般在生产实践和科学研究中,人们得到了参数(),,n x x x =⋅⋅⋅1和因变量y 的数据,需要求出关系式()y f x =,这时就可以用到回归分析的方法。

如果只考虑f 是线性函数的情形,当自变量只有一个时,即,(),,n x x x =⋅⋅⋅1中n =1时,称为一元线性回归,当自变量有多个时,即,(),,n x x x =⋅⋅⋅1中n ≥2时,称为多元线性回归。

进行线性回归时,有4个基本假定: ① 因变量与自变量之间存在线性关系; ② 残差是独立的; ③ 残差满足方差奇性; ④ 残差满足正态分布。

在Matlab 软件包中有一个做一般多元回归分析的命令regeress ,调用格式如下:[b, bint, r, rint, stats] = regress(y,X,alpha) 或者[b, bint, r, rint, stats] = regress(y,X) 此时,默认alpha = 0.05. 这里,y 是一个1n ⨯的列向量,X 是一个()1n m ⨯+的矩阵,其中第一列是全1向量(这一点对于回归来说很重要,这一个全1列向量对应回归方程的常数项),一般情况下,需要人工造一个全1列向量。

回归方程具有如下形式:011m m y x x λλλε=++⋅⋅⋅++其中,ε是残差。

在返回项[b,bint,r,rint,stats]中, ①01m b λλλ=⋅⋅⋅是回归方程的系数;②int b 是一个2m ⨯矩阵,它的第i 行表示i λ的(1-alpha)置信区间; ③r 是1n ⨯的残差列向量;④int r 是2n ⨯矩阵,它的第i 行表示第i 个残差i r 的(1-alpha)置信区间; 注释:残差与残差区间杠杆图,最好在0点线附近比较均匀的分布,而不呈现一定的规律性,如果是这样,就说明回归分析做得比较理想。

⑤ 一般的,stast 返回4个值:2R 值、F_检验值、阈值f ,与显著性概率相关的p 值(如果这个p 值不存在,则,只输出前3项)。

注释:(1)一般说来,2R值越大越好。

(2)人们一般用以下统计量对回归方程做显著性检验:F_检验、t_检验、以及相关系数检验法。

Matlab软件包输出F_检验值和阈值f。

一般说来,F_检验值越大越好,特别的,应该有F_检验值f>。

(3)与显著性概率相关的p值应该满足p alpha>,则说明回归<。

如果p alpha方程中有多余的自变量,可以将这些多余的自变量从回归方程中剔除(见下面逐步回归的内容)。

这几个技术指标说明拟合程度的好坏。

这几个指标都好,就说明回归方程是有意义的。

在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.0000 0.00250.0025 1.0000 ans =1.0000 0.4341 0.4341 1.0000即,corrcoef(x1,y)=0.0025,corrcoef(x2,y)=0.4341,说明没有非常明显的单变量线性关系。

图形如下:也看不出有线性关系,但是,旋转图形,可以看出所有点几乎在一个平面上。

这说明,,1,2y x x 在一个平面上,满足线性关系:1122a x a x b y a ε⋅+⋅+⋅=+或者,换成一个常见的形式 01122y a a x a x ε=+⋅+⋅+其中,ε是残差。

于是,在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 (Residual case order plot )表示画出残差与残差区间的杠杆图。

执行后得到:b =-4.51543.09701.0319bint =-4.6486 -4.38223.0703 3.12381.0238 1.0399r =0.0113-0.0087-0.0102-0.00690.0101-0.0106-0.0037-0.01050.0049-0.01360.00570.0163-0.00230.01100.0071rint =-0.0087 0.0314-0.0303 0.0128-0.0301 0.0098-0.0299 0.0162-0.0106 0.0308-0.0313 0.0102-0.0252 0.0178-0.0299 0.0089-0.0174 0.0272-0.0331 0.0058-0.0161 0.0275-0.0027 0.0354-0.0236 0.0190-0.0079 0.0299-0.0156 0.0298stats =1.0e+004 *0.0001 3.9222 0 0.0000即,124.515 3.097 1.0319y x x =-++。

置信度95%,且2 1.0,_R F ==检验值392220>,与显著性概率.α=005相关的0.00000.05p =<,这说明,回归方程中的每个自变量的选取,都是有意义的。

残差杠杆图:从杠杆图看出,所有的残差都在0点附近均匀分布,区间几乎都位于[]0.03,0.03-之间,即,没有发现高杠杆点,也就是说,数据中没有强影响点、异常观测点。

综合起来看,以上回归结果(回归函数、拟合曲线或曲面)近乎完美。

(二)逐步回归假设已有数据X 和Y ,在Matlab 软件包中,使用stepwise 命令进行逐步回归,得到回归方程n n Y a X a X a X ε=++⋅⋅⋅++1122,其中ε是随机误差。

stepwise 命令的使用格式如下:stepwise(X,Y)注意:应用stepwise 命令做逐步回归,数据矩阵X 的第一列不需要人工加一个全1向量,程序会自动求出回归方程的常数项(intercept )。

在应用stepwise 命令进行运算时,程序不断提醒将某个变量加入(Move in )回归方程,或者提醒将某个变量从回归方程中剔除(Move out )。

注释:①使用stepwise 命令进行逐步回归,既有剔除变量的运算,也有引入变量的运算,它是目前应用较为广泛的一种多元回归方法。

②在运行stepwise(X,Y)命令时,默认显著性概率.α=005。

例2(Hald,1960)Hald 数据是关于水泥生产的数据。

某种水泥在凝固时放出的热量Y (单位:卡/克)与水泥中4种化学成分所占的百分比有关:::::x Cao Al o x Cao Sio x Cao Al o Fe o x Cao Sio ⋅⋅⋅⋅⋅1232232323423342求出关系式()Y f X =。

解:(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,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]'; A=[X,Y]; mahal(A,A)程序执行后得到结果: ans =5.6803 3.64846.7002 3.3676 3.3839 4.4300 4.0080 6.5067 3.08497.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)程序执行后得到:b =62.40541.55110.51020.1019-0.1441bint =-99.1786 223.9893-0.1663 3.2685-1.1589 2.1792-1.6385 1.8423-1.7791 1.4910r =0.00481.5112-1.6709-1.72710.25083.9254-1.4487-3.17501.37830.28151.99100.9730-2.2943rint =-4.0390 4.0485-3.2331 6.2555-5.3126 1.9707-6.5603 3.1061-4.5773 5.0788-0.5623 8.4132-6.0767 3.1794-6.8963 0.5463-3.5426 6.2993-3.0098 3.5729-2.2372 6.2191-4.1338 6.0797-6.9115 2.3228stat =0.9824 111.4792 0.0000 5.9830以及残差杠杆图:于是,我们得到:62405415511051020101901441=+++-Y x x x x.....1234并且,残差杠杆图显示,残差均匀分布在0点线附近,在stat返回的4个值中,R2=0.9824,说明模型拟合的很好。

相关主题