matlab回归法建模详解 | 《matlab数学建模方法与实践(第三版)》学习笔记

目录

一元线性回归

一、采用最小二乘回归

二、采用LinearModel.fit函数进行线性回归

三、采用regress函数进行回归

 一元非线性回归

 一、对数形式

 二、指数形式

多元回归

逐步回归

 Logistic回归


根据回归方法中因变量个数和回归函数类型(线性和非线性)进行分类:

一元线性回归、一元非线性回归、多元回归

两种特殊的回归方式:

逐步回归:在回归过程中可以调整变量数量的回归方法。

Logistic回归:以指数结构函数作为回归模型的回归方法。

一元线性回归

首先从图形判断数据呈线性还是非线性。

代码如下:

%% 一元线性回归实例
%% 输入数据
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];	
% 绘制散点图,判断是否具有线性关系
figure
plot(x,y,'r*')                         %作散点图
xlabel('x(职工工资总额)','fontsize', 12)           %横坐标名
ylabel('y(商品零售总额)', 'fontsize',12)           %纵坐标名
set(gca,'linewidth',2);

运行结果:可以看出大近似呈线性。

matlab回归法建模详解 | 《matlab数学建模方法与实践(第三版)》学习笔记_第1张图片

一、采用最小二乘回归

最小二乘法原理:

matlab回归法建模详解 | 《matlab数学建模方法与实践(第三版)》学习笔记_第2张图片

最小二乘法的目的是通过将样本点拟合为一条直线,进而进行一定的分析和预测,假设这些样本点坐标为(xi,yi),红线的长度就是点到直线的距离di,由于距离有正有负,我们把计算对象变为距离的平方di^2(平方和最小即距离和最小),假设直线方程为y=bx+a,利用偏导数求极值,最后的计算公式为:

a=\bar{y}-b\bar{x}

 b=\frac{\sum_{i=1}^{n}(x_{i}-\bar{x})(y_{i}-\bar{y})))}{\sum_{i=1}^{n}(x_{i}-\bar{x})^{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);

运行结果:

matlab回归法建模详解 | 《matlab数学建模方法与实践(第三版)》学习笔记_第3张图片

二、采用LinearModel.fit函数进行线性回归

代码如下:

%% 采用LinearModel.fit函数进行回归
m2 = LinearModel.fit(x,y) % 创建线性回归模型,X、Y是对应数据

运行结果:

matlab回归法建模详解 | 《matlab数学建模方法与实践(第三版)》学习笔记_第4张图片

意义及用法:

  • Estimate -  模型中每个对应项的系数估计值
  • SE - 系数的标准误差
  • tStat - 每个系数的 t 统计量,用于基于对应系数不为零的备择假设来检验对应系数为零的原假设(给出了模型中的其他预测变量)。tStat = Estimate/SE
  • pValue - 假设检验的 t 统计量的 p 值,该假设检验验证对应系数是否等于零。例如,假设x2 的 t 统计量的 p 值大于 0.05,因此在给定模型中其他项的情况下,该项在 5% 显著性水平上不显著。
  • Error degrees of freedom n-p - 误差自由度其中 n 是观测值数目,p 是模型中系数的数目,包括截距。例如,该模型有四个预测变量,因此 Error degrees of freedom 为 93–4 = 89。
  • Root mean squared error - 均方根误差观测值与真值偏差的平方和观测次数n比值的平方根,在实际测量中,观测次数n总是有限的,真值只能用最可信赖(最佳)值来代替。方根误差对一组测量中的特大或特小误差反映非常敏感,所以,均方根误差能够很好地反映出测量的精密度
  • R^2 - 的值越接近1,变量的线性相关性越强,说明模型有效。
  • F统计量 - 如果满足F_{1-\alpha }(1,n-2)<F,则认为变量y与x显著的有线性关系,其中F_{1-\alpha }(1,n-2)的值可查F分布表,MATLAB命令为finv(1-alpha,1,n-2)
  • p值 - p(alpha为显著水平)表示模型可用,三个值可以相互印证。

 注:t统计量用来模型中关于参数的单个假设进行检验的一种统计量。一般的t统计量写成t=(估计值-假设值)/标准误,当假设值为0时,便得到通常的t统计量。我们一般用t统计量针对单侧或双侧对立假设做检验。例如:假设H0:a=1,H1:a>1,我们计算t统计量,如果t>c,我们就拒绝H0,接受H1,此时我们便说在适当的显著性水平上,a统计显著地大于1.

补充:模型的其他统计量如下:

  • Number of observations - 没有任何 NaN 值的行数。例如,Number of observations 为 93,因为 X 和 MPG 中的行数为 100,但 MPG 数据向量有六个 NaN 值,且 Horsepower 数据向量中有另一不同观测值(即不同的行)也为 NaN 值。
  • R-squared 和 Adjusted R-squared - 分别为决定系数和调整决定系数。例如,R-squared 值表明,该模型解释了响应变量 MPG 中大约 75% 的变异。

三、采用regress函数进行回归

代码如下:

%% 采用regress函数进行回归
Y=y';
X=[ones(size(x,2),1),x']; 
% size(x,2)获取x中第二维度的长度
% ones生成全部为1的数组

[b, bint, r, rint, s] = regress(Y, X)
% regress(Y, X,alpha)alpha为显著水平,默认0.05
% 多元线性回归
% [输出 置信区间 残差 残差的置信区间 stats]
% stats其中包含R^2统计量、F统计量及其p值(F(1,n-2)分布大于F的概率)以及剩余方差s^2。
% 矩阵X必须包含一个由 1 组成的列,以便软件正确计算模型统计量。
% 残差:实际观察值与估计值(拟合值)之间的差
% 置信区间:误差范围

运行结果:

 matlab回归法建模详解 | 《matlab数学建模方法与实践(第三版)》学习笔记_第5张图片

 意义及用法:

  • R^2的值越接近1,变量的线性相关性越强,说明模型有效。
  • 如果满足F_{1-\alpha }(1,n-2)<F,则认为变量y与x显著的有线性关系,其中F_{1-\alpha }(1,n-2)的值可查F分布表,MATLAB命令为finv(1-alpha,1,n-2)
  • p(alpha为显著水平)表示模型可用,三个值可以相互印证。
  • s^2的值用来比较模型是否有改进,其值越小说明模型精度越高

 一元非线性回归

首先从图形判断数据呈线性还是非线性。

代码如下:

%% 一元非线性回归实例
%% 输入数据
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)    

 运行结果:近似为对数关系或指数关系

matlab回归法建模详解 | 《matlab数学建模方法与实践(第三版)》学习笔记_第6张图片

 一、对数形式

代码如下:

%% 对数形式
m1 = @(b,x) b(1) + b(2)*log(x);
% @是定义句柄的运算符,如:f=@(x)acos(x) 相当于建立了一个函数文件
nonlinfit1 = fitnlm(x,y,m1,[0.01;0.01])
% 将m1指定的模型拟合到表或数据集数组中的变量,并返回非线性模型nonlinfit1
% 使用从[0.01;0.01]中的初始值开始的迭代过程估计模型系数

b=nonlinfit1.Coefficients.Estimate;
% 把非线性模型中估计的系数储存到b中
Y1=b(1,1)+b(2,1)*log(x);
hold on
plot(x,Y1,'--k','linewidth',2)

运行结果:

matlab回归法建模详解 | 《matlab数学建模方法与实践(第三版)》学习笔记_第7张图片

 二、指数形式

代码如下:

%% 指数形式拟合
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')

 运行结果:

matlab回归法建模详解 | 《matlab数学建模方法与实践(第三版)》学习笔记_第8张图片

 分析:对数形式的决定系数为0.973,指数形势的决定系数为0.993,优于前者。

多元回归

首先从图形判断数据呈线性还是非线性。

代码如下:

%% 作出因变量Y与各自变量的样本散点图
% x1,x2,x3,Y的数据
x1=[3.5 5.3 5.1 5.8 4.2 6.0 6.8 5.5 3.1 7.2 4.5 4.9 8.0 6.5 6.5 3.7 6.2 7.0 4.0 4.5 5.9 5.6 4.8 3.9];
x2=[9 20 18 33 31 13 25 30 5 47 25 11 23 35 39 21 7 40 35 23 33 27 34 15];
x3=[6.1 6.4 7.4 6.7 7.5 5.9 6.0 4.0 5.8 8.3 5.0 6.4 7.6 7.0 5.0 4.0 5.5 7.0 6.0 3.5 4.9 4.3 8.0 5.0];
Y=[33.2 40.3 38.7 46.8 41.4 37.5 39.0 40.7 30.1 52.9 38.2 31.8 43.3 44.1 42.5 33.6 34.2 48.0 38.0 35.9 40.4 36.8 45.2 35.1];
% 绘图,三幅图横向并排
subplot(1,3,1),plot(x1,Y,'g*')
subplot(1,3,2),plot(x2,Y,'k+')
subplot(1,3,3),plot(x3,Y,'ro')

运行结果:大致分布在一条直线旁边,可采用线性回归

matlab回归法建模详解 | 《matlab数学建模方法与实践(第三版)》学习笔记_第9张图片

 下面进行多元线性回归

代码如下:

%% 进行多元线性回归
n = 24; m = 3; % 每个变量均有24个数据,共有3个变量
X = [ones(n,1),x1',x2',x3'];
[b,bint,r,rint,s]=regress(Y',X,0.05) 
% 0.05为预定显著水平,判断因变量y与自变量之间是否具有显著的线性相关关系需要用到。

运行结果:

matlab回归法建模详解 | 《matlab数学建模方法与实践(第三版)》学习笔记_第10张图片

 分析:得到初步回归方程为 y=18.0157+1.0817x1+0.3212x2+1.2835x3

  • 回归置信区间不包含零点表示模型较好。
  • 残差在零点附近,表示模型较好。
  • R^2为0.9106,线性相关性较强。
  • F值——当F>F_{1- \alpha }(m,n-m-1)(m为自变量个数)时,则认为显著线性相关,本例F=67.9195,F_{1-0.05}(3,20)=3.0984
  • p(alpha为预定显著水平),说明显著线性相关,p<0.0001,alpha=0.05
  • s^2在模型改进时作参考

逐步回归

逐步回归是多元线性回归和多元多项式回归的结合,可以自动使方程的因子设置最合理。

代码如下 :

%% 逐步回归
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];   %自变量数据
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];  %因变量数据

stepwise(X,Y,[1,2,3,4],0.05,0.10)

% in=[1,2,3,4]表示X1、X2、X3、X4均保留在模型中
% stepwise(X,y,inmodel,penter,premove)还为F统计量的p值指定初始模型(inmodel)和入口(penter)和出口(premove)容差
% inmodel要么是长度等于X的列数的逻辑向量,要么是索引向量,取值范围从1到X的列数。penter的值必须小于或等于premove
% penter为引入变量时设定的最大p值,缺省时为0.05 premove为是移出变量时设定的p值,缺省时为0.10

运行结果:

matlab回归法建模详解 | 《matlab数学建模方法与实践(第三版)》学习笔记_第11张图片

分析:[1.476,0.6867,0,0]

蓝色行显示变量 X1、X2、X3、X4 均保留在模型中,窗口的右侧按钮上方提示:移除X4,单击下一步按钮,剔除的变量 X3 所对应的行用红色表示,同时又得到提示:移除X3,单击下一步按钮,这样一直重复操作,直到 “下一步” 按钮变灰,表明逐步回归结束,此时得到的模型即为逐步回归最终的结果。

 Logistic回归

以指数结构函数作为回归模型的回归方法

代码如下:

%% 导入数据
clc,clear,close all
X0 = xlsread('logistic_ex1.xlsx','A2:C21'); % 前20家企业的三项评价指标值,即回归模型的输入
Y0 = xlsread('logistic_ex1.xlsx','D2:D21'); % 前20家企业的评估结果,即回归模型的输出
X1 = xlsread('logistic_ex1.xlsx','A2:C26'); % 预测数据输入
 
%% 逻辑函数
GM = fitglm(X0,Y0,'Distribution','binomial');
% 创建广义线性回归模型,分布选择'binomial',连接函数为:f(μ) = log(μ/(1–μ))
Y1 = predict(GM,X1);
% 预测使用测量的输入输出数据计算已识别模型的K步提前输出

%% 模型的评估
N0 = 1:size(Y0,1); % N0 = [1,2,3,4,……,20]
N1 = 1:size(Y1,1); % N1 = [1,2,3,4,……,25]
plot(N0',Y0,'-kd'); 
% N0'指的是对N0'进行转置,N0'和Y0的形式相同,该行代码绘制的是前20家企业的评估结果
% plot()中的参数'-kd'的解析:-代表直线,k代表黑色,d代表菱形符号
hold on;
scatter(N1',Y1,'b');
% 绘制散点图
% N1'指的是对N1'进行转置,N1'和Y1的形式相同
xlabel('企业编号');
ylabel('输出值');

运行结果:

matlab回归法建模详解 | 《matlab数学建模方法与实践(第三版)》学习笔记_第12张图片

 

你可能感兴趣的:(回归,matlab,学习)