数学建模(MATLAB)| 第一篇:回归

数学建模(MATLAB)| 第一篇:基础回归模型

前言

数据型数学模型中,最常用的就是利用 回归模型去对大量数据进行统计分析。
一般步骤如下:

(1)收集一组包含因变量和自变量的数据;
(2)选定因变量和自变量之间的模型,即一个数学式子,利用数据按照最小二乘准则计算模型中的系数;
(3)利用统计分析方法对不同的模型进行比较,找出与数据拟合得最好的模型;
(4)判断得到的模型是否适合于这组数据;
(5)利用模型对因变量作出预测或解释。

具体情况一般有以下几种:

1 一元线性回归(Unary_linear_regression)

为最简单直观的回归模型,在现实生活中很常见,研究的对象只涉及一元变量。

[Example_1] 社会商品零售总额与职工工资总额数据的回归模型。

(1)数据输入和展示

拿到数据后我们一般会画出散点图去获得一个直观的、数据间关系的展示,方便我们选取合适的方法进行拟合等操作。

%% 数据输入和展示
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];   % 社会商品零售总额
plot(x,y,'g*')  % y关于x的颜色为g的散点图

数学建模(MATLAB)| 第一篇:回归
明显是很接近一个一元线性关系。
(2) 采用regress 函数进行回归
regress 是一个可以用来作多元一次(线性)回归的函数,当然也就可以用来作一元线性回归。

格式为:

%{
文档注释:
b = regress(y,X)包含线性回归的系数估计值。要计算常数项的系数估计值,X 中需要包含一个由1构成的列。(顺序为从低次项到高次项)
[b,bint] = regress(y,X) 还返回系数估计值的 95% 置信区间的矩阵 bint。
[b,bint,r] = regress(y,X) 还返回由残差组成的向量 r。
[b,bint,r,rint] = regress(y,X) 还返回矩阵 rint,其中包含可用于诊断离群值的区间。
[b,bint,r,rint,stats] = regress(y,X) 还返回向量 stats,其中包含 R2 统计量、F 统计量及其 p 值,以及误差方差的估计值。矩阵 X 必须包含一个由 1 组成的列,以便软件正确计算模型统计量。
[___] = regress(y,X,alpha) 使用 100*(1-alpha)% 置信水平来计算 bint 和 rint。您可以指定上述任一语法中的输出参数组合。
%}

调用实现:

%% regress回归
Y = y' % 构建 因变量矩阵
X=[ones(size(x,2),1),x'] % 构建 1 与 自变量 组成的矩阵
[b, bint, r, rint, s] = regress(Y, X)   %返回
b,bint,r,rint,s

% 作拟合后图像
b0 = b(1,1)
k = b(2,1)
y0 = k * x + b0  % 确定函数表达式
hold on  % 保持原有散点图像
plot(x, y0)

数学建模(MATLAB)| 第一篇:回归
具体的数据分析就不写了,本着为用而学的原则,要用到时知道有这些返回值的功能再去深入了解即可。

2 多元线性回归(Multiple_linear_regression)

将一元线性模型拓展为多元,方法类似。

[Example_2] 研究的学者的年薪 Y 与各个因素的关系。

(1)数据输入和展示

%% 数据输入和展示

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];  % 成果质量指标 X1
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];  % 从事研究工作的时间 X2
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];  % 能成功获得资助的指标 X3
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];  % 年薪 Y

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)| 第一篇:回归

(2) 采用regress 函数进行回归

%% regress回归
n=24;
X=[ones(n,1),x1',x2',x3'];
[b,bint,r,rint,s]=regress(Y',X,0.05);
b,bint,r,rint,s
%{
结果:
回归系数 b = (β0,β1,β2,β3) = (18.0157, 1.0817, 0.3212, 1.2835)
检验统计量 s =  0.9106   67.9195    0.0000    3.0719
1)相关系数 R 的评价:本例 R 的绝对值为 0.9542 ,表明线性相关性较强。
2)F 检验法:当 F > F1-α(m,n-m-1) ,即认为因变量 y 与自变量 x1,x2,...,xm 之间有显著的线性相关关系;否则认为因变量 y 与自变量 x1,x2,...,xm 之间线性相关关系不显著。本例 F=67.919 > F1-0.05( 3,20 ) = 3.10。
3)p 值检验:若 p < α(α 为预定显著水平),则说明因变量 y 与自变量 x1,x2,...,xm之间显著地有线性相关关系。本例输出结果,p<0.0001,显然满足 p<α=0.05。
以上三种统计推断方法推断的结果是一致的,说明因变量 y 与自变量之间显著地有线性相关关系,所得线性回归模型可用。s^2 当然越小越好,这主要在模型改进时作为参考。
%}

3 一元非线性回归(Unary_nonlinear_regression)

对于非线性回归,我们可以利用nlinfit来自定义函数进行回归

格式为:

%{
beta = nlinfit(X,Y,modelfun,beta0) 使用 modelfun 指定的模型,返回一个向量,其中包含 Y 中的响应对 X 中的预测变量的非线性回归的估计系数。它使用迭代最小二乘估计来估计系数,初始值由 beta0 指定。
beta = nlinfit(X,Y,modelfun,beta0,options) 使用结构体 options 中的算法控制参数来拟合非线性回归。您可以返回上述语法中的任何输出参数。
beta = nlinfit(___,Name,Value) 使用由一个或多个名称-值对组参数指定的附加选项。例如,您可以指定观测值权重或非常量误差模型。您可以使用上述语法中的任何输入参数。
[beta,R,J,CovB,MSE,ErrorModelInfo] = nlinfit(___) 还返回残差 R、modelfun 的 Jacobian 矩阵 J、估计系数的估计方差-协方差矩阵 CovB、误差项的方差估计 MSE 以及包含误差模型细节的结构体 ErrorModelInfo。
%}

要想利用nlinfit进行回归,我们需要先自定义一个model.m文件去定义我们的函数类型,这里采用的函数为 y = 1 a + b e − x y=\frac{1}{a+be^-x}y =a +b e −x 1 ​

%(model1.m)
function y = model1( beta, x )
y = 1 ./ (beta(1) + beta(2) * exp(-x));

如下为一个简单的数据输入和回归调用

%%输入数据
x=[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30];
y=[33815 33981 34004 34165 34212 34327 34344 34458 34498 34476 34483 34488 34513 34497 34511 34520 34507 34509 34521 34513 34515 34517 34519 34519 34521 34521 34523 34525 34525 34527];
b0=[0.0001 0.00001];

[ beta, r, j ] = nlinfit( x', y', 'model1', b0 )
plot(x,y,'r*')
hold on
plot( x, model1( beta, x ) )

这样就得到了一个最基本的拟合效果:

数学建模(MATLAB)| 第一篇:回归

不同的函数模型可见https://blog.csdn.net/m0_37149062/article/details/105247626

4 逐步回归(Stepwise_regression)

调用stepwise函数,暂时不了解。

参考博客:
https://blog.csdn.net/qq_41686130/article/details/81905220
https://blog.csdn.net/weixin_42079409/article/details/82285820
https://blog.csdn.net/sdwujk160507140150/article/details/80633201

Original: https://blog.csdn.net/weixin_46360993/article/details/119813002
Author: retrogogogo
Title: 数学建模(MATLAB)| 第一篇:回归

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/630861/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球