新疆汽车数学建模专栏第三篇:MATLAB数据建模⽅法(上)—常⽤⽅
以数据为基础⽽建⽴数学模型的⽅法称为数据建模⽅法, 包括回归、统计、机器学习、深度学习、灰⾊预测、主成分分析、神经⽹络、时间序列分析等⽅法,其中最常⽤的⽅法还是回归⽅法。 本讲主要介绍在数学建模中常⽤⼏种回归⽅法的 MATLAB 实现过程。
根据回归⽅法中因变量的个数和回归函数的类型(线性或⾮线性)可将回归⽅法分为:⼀元线性、⼀元⾮线性、多元回归。另外还有两种特殊的回归⽅式,⼀种在回归过程中可以调整变量数的回归⽅法,称为逐步回归,另⼀种是以指数结构函数作为回归模型的回归⽅法,称为 Logistic 回归。本讲将逐⼀介绍这⼏个回归⽅法。
1. ⼀元回归
1.1 ⼀元线性回归
[ 例1 ] 近 10 年来,某市社会商品零售总额与职⼯⼯资总额(单位:亿元)的数据见表3-1,请建⽴社会商品零售总额与职⼯⼯资总额数据的回归模型。
表1 商品零售总额与职⼯⼯资总额
航天圆通该问题是典型的⼀元回归问题,但先要确定是线性还是⾮线性,然后就可以利⽤对应的回归⽅法建⽴他们之间的回归模型了,具体实现的 MATLAB 代码如下:
(1)输⼊数据
clc, clear all, close all
x=[23.80,27.60,31.60,32.40,33.70,34.90,43.20,52.80,63.80,73.40];
y=[41.4,51.8,61.70,67.90,68.70,77.50,95.90,137.40,155.0,175.0];
(2)采⽤最⼩⼆乘回归
Figure
plot(x,y,'r*')                        %作散点图
xlabel('x(职⼯⼯资总额)','fontsize', 12)          %横坐标名
ylabel('y(商品零售总额)', 'fontsize',12)          %纵坐标名
set(gca,'linewidth',2);
% 采⽤最⼩⼆乘拟合
Lxx=sum((x-mean(x)).^2);
Lxy=sum((x-mean(x)).*(y-mean(y)));
b1=Lxy/Lxx;
b0=mean(y)-b1*mean(x);
y1=b1*x+b0;
hold on
plot(x, y1,'linewidth',2);
运⾏本节程序,会得到如图 1 所⽰的回归图形。在⽤最⼩⼆乘回归之前,先绘制了数据的散点图,这样就可以从图形上判断这些数据是否近似成线性关系。当发现它们的确近似在⼀条线上后,再⽤线性回归的⽅法进⾏回归,这样也更符合我们分析数据的⼀般思路。
图1 职⼯⼯资总额和商品零售总额关系趋势图
本田crv报价(3)采⽤ LinearModel.fit 函数进⾏线性回归
m2 = LinearModel.fit(x,y)
二手jeep
运⾏结果如下:
m2 =
蝰蛇Linear regression model:
y ~ 1 + x1
Estimated Coefficients:
Estimate      SE      tStat      pValue
(Intercept)    -23.549      5.1028    -4.615    0.0017215
x1          2.7991    0.11456    24.435    8.4014e-09
R-squared: 0.987,  Adjusted R-Squared 0.985
F-statistic vs. constant model: 597, p-value = 8.4e-09
(4)采⽤ regress 函数进⾏回归
Y=y';
X=[ones(size(x,2),1),x'];
[b, bint, r, rint, s] = regress(Y, X)
运⾏结果如下:
b =
-23.5493
2.7991
在以上回归程序中,使⽤了两个回归函数 LinearModel.fit 和 regress。在实际使⽤中,只要根据⾃⼰的需要选⽤⼀种就可以了。函数 LinearModel.fit 输出的内容为典型的线性回归的参数。关于 regress,其⽤法多样,MATLAB 帮助中关于 regress 的⽤法,有以下⼏种:
b = regress(y,X)
[b,bint] = regress(y,X)
[b,bint,r] = regress(y,X)
[b,bint,r,rint] = regress(y,X)
[b,bint,r,rint,stats] = regress(y,X)
[...] = regress(y,X,alpha)
输⼊ y(因变量,列向量),X(1与⾃变量组成的矩阵)和(alpha,是显著性⽔平, 缺省时默认0.05)。
输出
思域雨刷
bint 是β0,β1 的置信区间,r 是残差(列向量),rint是残差的置信区间,s包含4个统计量:决定系数 R^2(相关系数为R),F 值,F(1,n-2) 分布⼤于 F 值的概率 p,剩余⽅差 s^2 的值。也可由程序 sum(r^2)/(n-2) 计算。其意义和⽤法如下:R^2 的值越接近 1,变量的线性相关性越强,说明模型有效;如果满⾜
则认为变量y与x显著地有线性关系,其中 F1-α(1,n-2) 的值可查F分布表,或直接⽤ MATLAB 命令 finv(1-α,1, n-2) 计算得到;如果 p<α表⽰线性模型可⽤。这三个值可以相互印证。s^2 的值主要⽤来⽐较模型是否有改进,其值越⼩说明模型精度越⾼。
1.2 ⼀元⾮线性回归
在⼀些实际问题中,变量间的关系并不都是线性的,此时就应该⽤⾮线性回归。⽤⾮线性回归⾸先要解决的问题是回归⽅程中的参数如何估计。下⾯通过⼀个实例来说明如何利⽤⾮线性回归技术解决实例的问题。
[ 例2 ] 为了解百货商店销售额 x 与流通率(这是反映商业活动的⼀个质量指标,指每元商品流转额所分摊的流通费⽤)y 之间的关系,收集了九个商店的有关数据(见表2)。请建⽴它们关系的数学模型。
表2 销售额与流通费率数据
图2 销售额与流通费率之间的关系图
为了得到 x 与 y 之间的关系,先绘制出它们之间的散点图,如图 2 所⽰的“雪花”点图。由该图可以判断它们之间的关系近似为对数关系或指数关系,为此可以利⽤这两种函数形式进⾏⾮线性拟合,具体实现步骤及每个步骤的结果如下:
(1)输⼊数据
clc, clear all, close all
x=[1.5, 4.5, 7.5,10.5,13.5,16.5,19.5,22.5,25.5];
y=[7.0,4.8,3.6,3.1,2.7,2.5,2.4,2.3,2.2];
plot(x,y,'*','linewidth',2);
set(gca,'linewidth',2);
xlabel('销售额x/万元','fontsize', 12)
ylabel('流通费率y/%', 'fontsize',12)
(2)对数形式⾮线性回归
m1 = @(b,x) b(1) + b(2)*log(x);
nonlinfit1 = fitnlm(x,y,m1,[0.01;0.01])
b=nonlinfit1.Coefficients.Estimate;
Y1=b(1,1)+b(2,1)*log(x);
hold on
plot(x,Y1,'--k','linewidth',2)
运⾏结果如下:
nonlinfit1 =
Nonlinear regression model:
y ~ b1 + b2*log(x)
Estimated Coefficients:
Estimate      SE        tStat      pValue
b1    7.3979      0.26667    27.742    2.0303e-08
b2    -1.713      0.10724    -15.974    9.1465e-07
R-Squared: 0.973,  Adjusted R-Squared 0.969
F-statistic vs. constant model: 255, p-value = 9.15e-07
(3)指数形式⾮线性回归
m2 = 'y ~ b1*x^b2';
nonlinfit2 = fitnlm(x,y,m2,[1;1])
b1=nonlinfit2.Coefficients.Estimate(1,1);
b2=nonlinfit2.Coefficients.Estimate(2,1);
Y2=b1*x.^b2;
hold on
plot(x,Y2,'r','linewidth',2)
legend('原始数据','a+b*lnx','a*x^b')
运⾏结果如下:
nonlinfit2 =
Nonlinear regression model:
y ~ b1*x^b2
Estimated Coefficients:
Estimate      SE        tStat      pValue
b1      8.4112    0.19176    43.862    8.3606e-10
b2    -0.41893    0.012382    -33.834    5.1061e-09
R-Squared: 0.993,  Adjusted R-Squared 0.992
F-statistic vs. zero model: 3.05e+03, p-value = 5.1e-11
在该案例中,选择两种函数形式进⾏⾮线性回归,从回归结果来看,对数形式的决定系数为 0.973 ,⽽指数形式的为 0.993 ,优于前者,所以可以认为指数形式的函数形式更符合 y 与 x 之间的关系,这样就可以确定他们之间的函数关系形式了。
2. 多元回归
[ 例3 ] 某科学基⾦会希望估计从事某研究的学者的年薪 Y 与他们的研究成果(论⽂、著作等)的质量指标 X1、从事研究⼯作的时间 X2、能成功获得资助的指标 X3 之间的关系,为此按⼀定的实验设计⽅法调查了 24 位研究学者,得到如表3 所⽰的数据( i 为学者序号),试建⽴ Y 与 X1 , X2 , X3 之间关系的数学模型,并得出有关结论和作统计分析。
表3 从事某种研究的学者的相关指标数据
该问题是典型的多元回归问题,但能否应⽤多元线性回归,最好先通过数据可视化判断他们之间的变化趋势,如果近似满⾜线性关系,则可以执⾏利⽤多元线性回归⽅法对该问题进⾏回归。具体步骤如下:
(1)作出因变量 Y 与各⾃变量的样本散点图
作散点图的⽬的主要是观察因变量 Y 与各⾃变量间是否有⽐较好的线性关系,以便选择恰当的数学模型形式。图3 分别为年薪 Y 与成果质量指标 X1、研究⼯作时间 X2、获得资助的指标 X3 之间的散点图。从图中可以看出这些点⼤致分布在⼀条直线旁边,因此,有⽐较好的线性关系,可以采⽤线性回归。绘制图3的代码如下:
subplot(1,3,1),plot(x1,Y,'g*'),
subplot(1,3,2),plot(x2,Y,'k+'),
subplot(1,3,3),plot(x3,Y,'ro'),
图3 因变量Y与各⾃变量的样本散点图
(2)进⾏多元线性回归
这⾥可以直接使⽤ regress 函数执⾏多元线性回归,具体代码如下: