数学建模

您所在的位置:网站首页 matlab误差分析怎么写 数学建模

数学建模

2024-06-02 09:24| 来源: 网络整理| 查看: 265

文章目录 一、最小二乘法是什么?二、非线性回归是什么?三、最小二乘法 和 回归分析 之间有什么关系?三、样例及做题过程第一步:问题的分析第二步:模型的建立第三步:模型的求解第四步:结果的分析及验证(额外) 四、总结:五、参考附录:

我尽量用通俗的语言来描述。

虽然这道题是 非线性回归 的问题,但其 做题步骤、做题思想 和 线性回归 是相似的,也可作参考。

数学建模系列文章——总结篇:《数模美一国一退役选手的经验分享[2021纪念版]》.

一、最小二乘法是什么?

  最小二乘法(又称最小平方法)是一种数学优化技术。它通过 最小化误差的平方 和寻找数据的最佳函数匹配。

  利用最小二乘法可以简便地求得 未知 的数据,并使得这些求得的 数据与实际数据 之间 误差的平方和 为最小 。

  曲线拟合 可用最小二乘法来进行进行 参数估计 (即用来估计斜率k和截距b)。最小二乘法也可用于其他 优化问题。

二、非线性回归是什么?

  非线性回归是回归函数关于未知回归系数具有 非线性结构 的回归。常用的处理方法有回归函数的线性迭代法、分段回归法、迭代最小二乘法等。非线性回归分析的主要内容与线性回归分析相似。

三、最小二乘法 和 回归分析 之间有什么关系?

   “ 最小二乘法 ” 只是 回归分析 中的一种方法,同样地,和最小二乘法相对应的还有:最小绝对值法 等。    更多概念区分详见链接:https://blog.csdn.net/Wang_Dou_Dou_/article/details/118739458?spm=1001.2014.3001.5501.

三、样例及做题过程 举一个简单的栗子:有个房地产投资商,给你一张表如下。然后让你来预测2010年该地区的房价。

在这里插入图片描述

第一步:问题的分析

  要预测2010年该地区的房价,首先必须要找到一个年份与房价之间的函数表达式,使其能够比较好的 “贴近” 这些样本数据点,并且达到误差最小。

  要实现这一点,我们首先要确定使用怎样的一个函数。

  为了找到这样一个函数,我们先用最简单的函数试一下,即线性函数或二次函数。利用MATLAB的数据拟合功能,分别对数据点进行线性和二次拟合,在这里我们只是想 直观地 看一看,用线性或者二次函数能不能较好第 “贴近” 这些数据点。

% x是年份,以1997年为第0年,y是房价 x = 0:2009 - 1997; y = [767 895 995 1117 1261 1437 1640 1957 2244 2489 2801 3096 3500]; fy1 = polyfit(x,y,1); % 线性拟合 fy2 = polyfit(x,y,2); % 二次拟合 t = 0:0.1:2009 - 1997 y1 = zeros( size(t) ); % 初始化 y2 = zeros( size(t) ); % 初始化 y1 = polyval(fy1,t); % 得到线性拟合的纵坐标值 y2 = polyval(fy2,t); % 得到二次拟合的纵坐标值 plot(x,y,'*',t,y1,'--',t,y2,'-'); xlabel('时间/年(记2007年为第0年)'); ylabel('房价/元'); legend('原始数据','一维拟合','二维拟合');

运行结果如下:

在这里插入图片描述

  从上图中可以直观地看出,房价和时间(年份)的关系更加接近于一个二次函数、由此分析,我们应该为此建立一个二次函数的回归模型。(注意!上图中的 “2007” 改成 “1997”)

第二步:模型的建立

  我们所要建立的二次函数的回归模型,应该能够使得函数能够 “最好的” 表现房价y 和 年份x 的关系。而什么才算 “最好的” 的呢? 这个时候,就用上 最小二乘法 了。其 核心思想 就是,让 函数上的值 与 实际值 之间的差别最小。

  在建立数学模型之前,首先要明确一下变量:y 是指房屋的价格, x 是指时间(年份),而 y ^ \hat y y^​ 是由函数 y ^ ( x ) \hat y(x) y^​(x) 所确定的房价y的 估计值 。

  即设: y ^ ( x ) \hat y(x) y^​(x) = a0 + a1x + a2x2

  并找到合适的参数 a0 、 a1 、 a2   使得 在这里插入图片描述

  达到最小值。

第三步:模型的求解

  这一步相当于要求我们找到三个参数来求 y ^ ( x ) \hat y(x) y^​(x) ,并要求使得 上面的(1)式 达到最小。由于 y ^ ( x ) \hat y(x) y^​(x) = a0 + a1x + a2x2 ,其中 x 和 y 的数据都已知。则具体步骤如下:

--------------------------分割线----------------------------   Step1:显然 该函数【说的是(1)式】的变量有三个【注:我没有展开(1)式的 y ^ ( x ) \hat y(x) y^​(x)】,即 a0 、 a1 、 a2 ,要求函数的最小值,则需分别对三个变量求偏导,并令其等于0,如下如所示:

在这里插入图片描述   如想知道为什么要这么做,知其具体原理,详见参考附录[6]。

  用matlab来求解这个方程组。

  写一个有助于理解的方程【配合代码看】: 在这里插入图片描述

clc,clear,close all; x = 0:2009 - 1997; y = [767 895 995 1117 1261 1437 1640 1957 2244 2489 2801 3096 3500]; x_new = zeros(length(x),3); % 因为用的是二维拟合,则 x_new 应该为 3*13 的矩阵,第一列为 1 ,第二列为 x ,第三列为 x^2 x_new(:,1) = 1; x_new(:,2) = x'; x_new(:,3) = (x.^2)'; [b,bint,r,rint,stats] = regress(y',x_new) % 调用回归函数regress plot(x,y,'bo'); hold on; y2 = b(3,1) * x.^2 + b(2,1) * x + b(1,1); % 非线性回归结果 plot(x,y2,'r*'); t = 0:0.01:12; xian_y = b(3,1) * t.^2 + b(2,1) * t + b(1,1); % 回归曲线 plot(t,xian_y,'-'); legend('原始数据','非线性回归结果','回归曲线'); xlabel('时间/年(记2007年为第0年)'); ylabel('房价/元');

运行结果如下:

  a0 = 779.2418   a1 = 75.4540   a2 = 12.5899

结果图为:

在这里插入图片描述 --------------------------分割线----------------------------   Step2:只是求出了这三个参数还不够。我们还要分析一下在 1 - α = 0.95 的置信水平下,参数 a0 、 a1 和 a2 的置信区间是多少。我们利用matlab提供的 “[b, bint, r, rint, stats] = regress(因变量y, 自变量x, 显著性水平α)” ,即可以得到如下数据:

在这里插入图片描述 说明:   ①regress()中的 α 为显著性水平(缺省时默认为0.05)

  ②b,bint 为 回归系数估计值 和 它们的置信区间

  ③r,rint 为 残差(向量) 及其 置信区间

  ④stats 是用于检验回归模型的统计量,有4个数值,第一个是拟合优度 R2,第二个是 对方程整体显著性检验 的 F检验 ,第三个是 p值,第四个是 误差方差的估计值 s 2 s^2 s2 。

整理运行结果后得到下面这张表:

在这里插入图片描述

  由上表可知,R2=0.9989 表示因变量y(房价)的99.89%可由模型确定,F值 远远超过 F检验的临界值,p 远小于 α,因而该回归模型从整体来看是可用的。

补充: F检验 、 p值 、误差方差s2 的原理详见文章最后的参考附录[2]、[3]、[4]。

--------------------------分割线----------------------------   Step3:   得到最终表达式如下: 在这里插入图片描述

  并将 y = 2010 - 2007 = 13 带入此方程,得到2010年估计的房价 y ^ ( 13 ) = 3887 ( 元 ) \hat y(13)=3887(元) y^​(13)=3887(元)。

注:如果这道题单纯的只是个 回归分析问题 ,那么做到这里就可以了。顶多再加一张 残差分析图 ,利用 matlab 的函数 rcoplot(r,rint) 即可。如下图所示,最后再加一点文字分析即可。

在这里插入图片描述

第四步:结果的分析及验证(额外)

注:因为这是 预测问题 ,所以还要继续做下去。

  为了分析该结果的 合理性 和 准确性 ,我们还应该考虑这样的问题:如果说房价与年份之间有这么一个不为人知的 但是具有 “确定性” 的函数关系 y = y ( x ) y= y(x) y=y(x) ,而得到的函数 y = y ^ ( x ) y=\hat y(x) y=y^​(x) 和它之间肯定具有一定的误差。我们不妨将此误差设为 ε ε ε ,则我么能得到一个关系式如下: y = y ^ ( x ) + ε y=\hat y(x) + ε y=y^​(x)+ε  而如果 ε ε ε 满足某个分布的话,我们就可以估计2010年房价的一个合适的范围,而不是 前面得到的 “3887” 这么一个 “光秃秃、干巴巴” 的值。

   经过整理后,我们得到下表:

在这里插入图片描述    假设 ε ε ε 服从正态分布,即 ε ~ N( μ, σ2 ) ,不妨使用 矩估计 的方法来确定参数 μ ^ \hat μ μ^​ 和 σ ^ \hat σ σ^ 的值,于是得到下面这个方程组: 在这里插入图片描述

   手算后解得: μ ^ ≈ 0 \hat μ≈0 μ^​≈0, σ ^ = 102 \hat σ=102 σ^=102。    由此可用matlab绘出 ε ε ε 的概率分布图 :

在这里插入图片描述   matlab的代码如下:

clc;clear;close all; x = -300:1:300; y = zeros(length(x)); miu = 0; sigma = 102; y = 1/(sqrt(2*pi)*sigma) * exp(-(x-miu).^2/(2*sigma.^2)) * 100; plot(x,y) ylabel('ε出现的概率(%)'); xlabel('房价(元)'); title('房价误差的正态分布图');

   对于 ε ε ε 的概率分布图,我们希望找到一个 ε ε ε 的阈值 ε ′ ε' ε′ ,使得当 ∣ ε ∣ ≤ ε ′ |ε|≤ε' ∣ε∣≤ε′ 时, P ( ∣ ε ∣ ≤ ε ′ ) ≥ 0.7 P(|ε|≤ε')≥0.7 P(∣ε∣≤ε′)≥0.7 。这样做的目的是,我们希望得到一个房价区间,使2010年的 真实房价 落在这个区间的内的概率比较大(这里的 “比较大” 就是指取的 0.7 )。

   由概率论可知,正态分布曲线是对称的。则由 P ( ε ≥ ε ′ ) = 1 2 × [ 1 − P ( ∣ ε ∣ ≤ ε ′ ) ] = 0.15 P(ε≥ε')=\frac {1}{2} \times [1-P(|ε|≤ε')]=0.15 P(ε≥ε′)=21​×[1−P(∣ε∣≤ε′)]=0.15 ,可得 P ( ε ≤ ε ′ ) = 1 − P ( ε ≥ ε ′ ) = 0.85 P(ε≤ε')=1-P(ε≥ε')=0.85 P(ε≤ε′)=1−P(ε≥ε′)=0.85 。而 P ( ε ≤ ε ′ ) = Φ ( ε ′ − 0 102 ) P(ε≤ε')=Φ( \frac {ε'-0}{102}) P(ε≤ε′)=Φ(102ε′−0​)。

  查表 得出 Φ ( 1.04 ) = 0.85 Φ( 1.04) =0.85 Φ(1.04)=0.85,所以我们得到 ε ε ε 的阈值 ε ′ ε' ε′ 约为 100 (元)。【注:100 是由 ε ′ − 0 102 = 1.04 \frac {ε'-0}{102}=1.04 102ε′−0​=1.04 解得到的】

  综上所述,我们用 最小二乘法 的出 y ^ ( x ) \hat y(x) y^​(x) 的表达式,并用此来预测了2010年的房价,同时分析了 y ^ ( x ) \hat y(x) y^​(x) 和 y ( x ) y(x) y(x) 的误差 ε ε ε ,并得出结论:

  在 70%的精确度 下,2010年的房价应该在 3887±100 元之内。

四、总结:

  第一步:问题的分析(画散点图)

  第二步:模型的建立(直观地找出适合的回归函数)

  第三步:模型的求解(最小二乘法回归+检验+分析)

  第四步:结果的分析及验证(额外内容,预测问题就要多做这一步)

  最后,我没有详细地阐述其原理,只阐述了有什么用、怎么用。如要了解详细的原理,可以看看文章最后的 参考附录 吧。

五、参考附录:

[1] 《数学建模——区分“拟合、插值、多元线性回归、逻辑回归、逐步回归、最小二乘法”等概念【概念篇】》 链接: https://blog.csdn.net/Wang_Dou_Dou_/article/details/118739458?spm=1001.2014.3001.5501.

[2] 《F检验》 链接: https://baike.baidu.com/item/F%E6%A3%80%E9%AA%8C/9910842?fr=aladdin.

[3] 《P值》 链接: https://baike.baidu.com/item/P%E5%80%BC.

[4] 《如何用stata求误差方差 s2 的估计值》 看追问的那条回复即可 链接: https://zhidao.baidu.com/question/397143810094044805.html.

[5] 《最小二乘法多元线性回归_使用Matlab解决多元线性回归问题》这里面有教如何清理异常数据 链接: https://blog.csdn.net/weixin_39636645/article/details/112712714.

[6] 《数学建模之数据拟合(3):最小二乘法》看完这个视频,你可以 更友好地理解 最小二乘法 链接: https://www.bilibili.com/video/BV1q741177US?from=search&seid=12421359005753840035.

数学建模系列文章——总结篇:《数模美一国一退役选手的经验分享[2021纪念版]》.

⭐️ ⭐️



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3