大家好,又见面了,我是你们的朋友全栈君。
之前留的是自己的qq号 感觉好多资源都不能让大家自行选择
本着开源的精神,在公众号挂了百度云链接,这样晚上就不用被吵醒了
当人们对研究对象的内在特性和各因素间的关系有比较充分的认识时,一般用机理分析方法建立数学模型。如果由于客观事物内部规律的复杂性及人们认识程度的限制,无法分析实际对象内在的因果关系,建立合乎机理规律的数学模型,那么通常的办法是搜集大量数据,基于对数据的统计分析去建立模型。本章讨论其中用途非常广泛的一类模型——统计回归模型。回归模型常用来解决预测、控制、生产工艺优化等问题。
变量之间的关系可以分为两类:一类叫确定性关系,也叫函数关系,其特征是:一个变量随着其它变量的确定而确定。另一类关系叫相关关系,变量之间的关系很难用一种精确的方法表示出来。例如,通常人的年龄越大血压越高,但人的年龄和血压之间没有确定的数量关系,人的年龄和血压之间的关系就是相关关系。回归分析就是处理变量之间的相关关系的一种数学方法。其解决问题的大致方法、步骤如下:
(1)收集一组包含因变量和自变量的数据;
(2)选定因变量和自变量之间的模型,即一个数学式子,利用数据按照最小二乘准则计算模型中的系数;
(3)利用统计分析方法对不同的模型进行比较,找出与数据拟合得最好的模型;
(4)判断得到的模型是否适合于这组数据;
(5)利用模型对因变量作出预测或解释。
应用统计分析特别是多元统计分析方法一般都要处理大量数据,工作量非常大,所以在计算机普及以前,这些方法大都是停留在理论研究上。运用一般计算语言编程也要占用大量时间,而对于经济管理及社会学等对高级编程语言了解不深的人来说要应用这些统计方法更是不可能。MATLAB等软件的开发和普及大大减少了对计算机编程的要求,使数据分析方法的广泛应用成为可能。MATLAB统计工具箱几乎包括了数理统计方面主要的概念、理论、方法和算法。运用MATLAB统计工具箱,我们可以十分方便地在计算机上进行计算,从而进一步加深理解,同时,其强大的图形功能使得概念、过程和结果可以直观地展现在我们面前。本章内容通常先介绍有关回归分析的数学原理,主要说明建模过程中要做的工作及理由,如模型的假设检验、参数估计等,为了把主要精力集中在应用上,我们略去详细而繁杂的理论。在此基础上再介绍在建模过程中如何有效地使用MATLAB软件。没有学过这部分数学知识的读者可以不深究其数学原理,只要知道回归分析的目的,按照相应方法通过软件显示的图形或计算所得结果表示什么意思,那么,仍然可以学到用回归模型解决实际问题的基本方法。包括:一元线性回归、多元线性回归、非线性回归、逐步回归等方法以及如何利用MATLAB软件建立初步的数学模型,如何透过输出结果对模型进行分析和改进,回归模型的应用等。
8.1 一元线性回归分析
回归模型可分为线性回归模型和非线性回归模型。非线性回归模型是回归函数关于未知参数具有非线性结构的回归模型。某些非线性回归模型可以化为线性回归模型处理;如果知道函数形式只是要确定其中的参数则是拟合问题,可以使用MATLAB软件的curvefit命令或nlinfit命令拟合得到参数的估计并进行统计分析。本节主要考察线性回归模型。
8.1.1 一元线性回归模型的建立及其MATLAB实现
其中是待定系数,对于不同的是相互独立的随机变量。
假设对于的n个值,得到的n个相应的值,确定的方法是根据最小二乘准则,要使
取最小值。利用极值必要条件令,求的估计值,从而得到回归直线。只不过这个过程可以由软件通过直线拟合完成,而无须进行繁杂的运算。
(1)参数的区间估计
由于我们所计算出的仍然是随机变量,因此要对取值的区间进行估计,如果区间估计值是一个较短的区间表示模型精度较高。
(2)对误差方差的估计
设为回归函数的值,为测量值,残差平方和
剩余方差
(3)线性相关性的检验
由于我们采用的是一元线性回归,因此,如果模型可用的话,应该具有较好的线性关系。反映模型是否具有良好线性关系可通过相关系数R的值及F值观察(后面的例子说明)。
(4)一元线性回归的MATLAB实现
MATLAB工具箱中用命令regress实现,其用法是:
代码语言:javascript复制 b=regress(y,x)
[b ,bint , r ,rint , s]=regress(y , x , alpha)
输入y(因变量,列向量)、x(1与自变量组成的矩阵,见下例),alpha是显著性水平(缺省时默认0.05)。
输出,注意:b中元素顺序与拟合命令polyfit的输出不同,bint是的置信区间,r是残差(列向量),rint是残差的置信区间,s包含4个统计量:决定系数(相关系数为R);F值;F(1,n-2)分布大于F值的概率p;剩余方差的值(MATLAB7.0以后版本)。也可由程序sum(r.^2)/(n-2)计算。
其意义和用法如下:的值越接近1,变量的线性相关性越强,说明模型有效;如果满足,则认为变量与显著地有线性关系,其中的值可查F分布表,或直接用MATLAB命令finv(1-,1, n-2)计算得到;如果表示线性模型可用。这三个值可以相互印证。的值主要用来比较模型是否有改进,其值越小说明模型精度越高。
8.1.2身高与腿长
例1 测得16名成年女子身高与腿长所得数据如下:
表8-1 16名女子身高(cm)腿长(cm)数据
88 85 88 91 92 93 93 95 96 98 97 96 98 99 100 102 | |
---|---|
143 145 146 147 149 150 153 154 155 156 157 158 159 160 162 164 |
首先利用命令plot(x,y,'r*')画出散点图,从图形可以看出,这些点大致分布在一条直线的左右,因此,可以考虑一元线性回归。可编制程序如下:
y=[143 145 146 147 149 150 153 154 155 156 157 158 159 160 162 164];
x=[88 85 88 91 92 93 93 95 96 98 97 96 98 99 100 102];
n=16;
X=[ones(n,1),x'];
[b,bint,r,rint,s]=regress(y',X,0.05);
b,bint,s,
rcoplot(r,rint)
运行后得到
b = 31.7713 1.2903
bint = 12.3196 51.2229
1.0846 1.4960
s = 0.9282 180.9531 0.0000 3.1277
=0.9282,由finv(0.95,1,14)= 4.6001,即= 4.6001<F=180.9531,p<0.0001,
可以通过残差图发现,第二个数据为奇异数据,去掉该数据后运行后得到
b = 17.6549 1.4363
bint = -0.5986 35.9083
1.2445 1.6281
s = 0.9527 261.6389 0.0000 1.9313
=0.9527,由finv(0.95,1,13)= 4.6672,即= 4.6672<F=261.6389,p<0.0001,说明模型有效且有改进,因此我们得到身高与腿长的关系。
当然,也可以利用直线拟合得到同一方程。只不过不能得到参数置信区间和对模型进行检验。拟合程序如下:
代码语言:javascript复制y=[143 145 146 147 149 150 153 154 155 156 157 158 159 160 162 164];
x=[88 85 88 91 92 93 93 95 96 98 97 96 98 99 100 102];
a=polyfit(x,y,1)
temp=polyval(a,x);
plot(x,y,'r*',x,temp)
注意:函数相同,但输出一次函数参数顺序与回归分析(升幂排列)中不同。另一个差别是拟合不能发现奇异数据。
8.2 多元线性回归分析
8.2.1 多元线性回归模型的建模步骤及其MATLAB实现
如果根据经验和有关知识认为与因变量有关联的自变量不止一个,那么就应该考虑用最小二乘准则建立多元线性回归模型。
设影响因变量的主要因素(自变量)有m个,记,假设它们有如下的线性关系式:
,
如果对变量与自变量 同时作n次观察(n>m)得n组观察值,采用最小二乘估计求得回归方程
.
建立回归模型是一个相当复杂的过程,概括起来主要有以下几个方面工作(1)根据研究目的收集数据和预分析;(2)根据散点图是否具有线性关系建立基本回归模型;(3)模型的精细分析;(4)模型的确认与应用等。
收集数据的一个经验准则是收集的数据量(样本容量)至少应为可能的自变量数目的6~10倍。在建模过程中首先要根据所研究问题的目的设置因变量,然后再选取与该因变量有统计关系的一些变量作为自变量。我们当然希望选择与问题关系密切的变量,同时这些变量之间相关性不太强,这可以在得到初步的模型后利用MATLAB软件进行相关性检验。下面通过一个案例探讨MATLAB软件在回归分析建模各个环节中如何应用。
多元线性回归的MATLAB实现
仍然用命令regress(y , X),只是要注意矩阵X的形式,将通过如下例子说明其用法。
8.2.2 某类研究学者的年薪
1. 问题
例2 工薪阶层关心年薪与哪些因素有关,以此可制定出它们自己的奋斗目标。
某科学基金会希望估计从事某研究的学者的年薪Y与他们的研究成果(论文、著作等)的质量指标X1、从事研究工作的时间X2、能成功获得资助的指标X3之间的关系,为此按一定的实验设计方法调查了24位研究学者,得到如下数据(i为学者序号):
表8-2 从事某种研究的学者的相关指标数据
i | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
3.5 | 5.3 | 5.1 | 5.8 | 4.2 | 6.0 | 6.8 | 5.5 | 3.1 | 7.2 | 4.5 | 4.9 | |
9 | 20 | 18 | 33 | 31 | 13 | 25 | 30 | 5 | 47 | 25 | 11 | |
6.1 | 6.4 | 7.4 | 6.7 | 7.5 | 5.9 | 6.0 | 4.0 | 5.8 | 8.3 | 5.0 | 6.4 | |
33.2 | 40.3 | 38.7 | 46.8 | 41.4 | 37.5 | 39.0 | 40.7 | 30.1 | 52.9 | 38.2 | 31.8 | |
i | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 |
8.0 | 6.5 | 6.6 | 3.7 | 6.2 | 7.0 | 4.0 | 4.5 | 5.9 | 5.6 | 4.8 | 3.9 | |
23 | 35 | 39 | 21 | 7 | 40 | 35 | 23 | 33 | 27 | 34 | 15 | |
7.6 | 7.0 | 5.0 | 4.4 | 5.5 | 7.0 | 6.0 | 3.5 | 4.9 | 4.3 | 8.0 | 5.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与之间关系的数学模型,并得出有关结论和作统计分析。
2. 作出因变量Y与各自变量的样本散点图
作散点图的目的主要是观察因变量Y与各自变量间是否有比较好的线性关系,以便选择恰当的数学模型形式。下图分别为年薪Y与成果质量指标、研究工作时间、获得资助的指标之间的散点图,
代码语言:javascript复制subplot(1,3,1),plot(x1,Y,'g*'),
subplot(1,3,2),plot(x2,Y,'k '),
subplot(1,3,3),plot(x3,Y,'ro'),
从图可以看出这些点大致分布在一条直线旁边,因此,有比较好的线性关系,可以采用线性回归。
Y与x1的散点图 Y与x2的散点图 Y与x3的散点图
图8.1 因变量Y与各自变量的样本散点图
3. 利用MATLAB统计工具箱得到初步的回归方程
设回归方程为:.
建立m-文件输入如下程序数据:
代码语言:javascript复制x1=[3.5 5.3 5.1 5.8 4.2 6.0 6.8 5.5 3.1 7.24.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 3539 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.35.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.730.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.235.1];
n=24; m=3;
X=[ones(n,1),x1',x2',x3'];
[b,bint,r,rint,s]=regress(Y',X,0.05);
b,bint,r,rint,s,
运行后即得到结果如表8-3所示。
表8-3 对初步回归模型的计算结果
回归系数 | 回归系数的估计值 | 回归系数的置信区间 |
---|---|---|
18.0157 | [13.9052 22.1262] | |
1.0817 | [0.3900 1.7733] | |
0.3212 | [0.2440 0.3984] | |
1.2835 | [0.6691 1.8979] | |
=0.9106 F=67.9195 p<0.0001 = 3.0719 |
计算结果包括回归系数b=()=(18.0157, 1.0817 , 0.3212, 1.2835),且置信区间均不包含零点,;残差及其置信区间;统计变量stats ,它包含四个检验统计量:相关系数的平方,假设检验统计量F,与F对应的概率p,的值(7.0以前版本也可由程序sum(r.^2)/(n-m-1)计算)。因此我们得到初步的回归方程为:
由结果对模型的判断:
回归系数置信区间不包含零点表示模型较好,残差在零点附近也表示模型较好,接着就是利用检验统计量R,F,p 的值判断该模型是否可用。
(1)相关系数R的评价:一般地,相关系数绝对值在0.8~1范围内,可判断回归自变量与因变量具有较强的线性相关性。本例R的绝对值为0.9542,表明线性相关性较强。
(2)F检验法:当,即认为因变量与自变量之间显著地有线性相关关系;否则认为因变量与自变量之间线性相关关系不显著。本例 F=67.919>= 3.10 (查F分布表或输入命令finv(0.95,3,20)计算)。
(3)p值检验:若(为预定显著水平),则说明因变量与自变量之间显著地有线性相关关系。本例输出结果,p<0.0001,显然满足P<=0.05。
以上三种统计推断方法推断的结果是一致的,说明因变量与自变量之间显著地有线性相关关系,所得线性回归模型可用。当然越小越好,这主要在模型改进时作为参考。
4. 模型的精细分析和改进
(1) 残差分析
残差,是各观测值与回归方程所对应得到的拟合值之差,实际上,它是线性回归模型中误差的估计值。即有零均值和常值方差,利用残差的这种特性反过来考察原模型的合理性就是残差分析的基本思想。利用MATLAB进行残差分析则是通过残差图或时序残差图。残差图是指以残差为纵坐标,以其他指定的量为横坐标的散点图。主要包括:(1)横坐标为观测时间或观测值序号;(2)横坐标为某个自变量的观测值;(3)横坐标为因变量的拟合值。通过观察残差图,可以对奇异点进行分析,还可以对误差的等方差性以及对回归函数中是否包含其他自变量、自变量的高次项及交叉项等问题给出直观的检验。
以观测值序号为横坐标,残差为纵坐标所得到的散点图称为时序残差图,画出时序残差图的MATLAB语句为rcoplot(r,rint)(图8.2)。可以清楚看到残差大都分布在零的附近,因此还是比较好的 ,不过第4、12、19这三个样本点的残差偏离原点较远,如果作为奇异点看待,去掉后重新拟合,则得回归模型为:
且回归系数的置信区间更小均不包含原点,统计变量stats包含的三个检验统计量:相关系数的平方,假设检验统计量F,概率P ,分别为:0.9533 ; 115.5586 ; 0.0000 ,比较可知R,F均增加模型得到改进。
图8.2 时序残差图
(2) 变量间的交互作用讨论
变量间的交互作用包括:不同自变量之间的交互作用以及同一变量的自相关性。
不同自变量之间的交互作用:有时,在实验中不仅单因素对指标有影响,而且因素间还会联合起来对指标产生影响,常称这种联合作用为交互作用。处理两个因素间交互作用的一个简单办法是加入这两个自变量的乘积项。本文案例如果加入交互项则为:
用表8.2的数据,利用MATLAB统计工具箱得到回归系数分别为:27.0727 ,1.1147,-0.0215 ,-0.1843 ,0.0033 ,-0.0054 ,0.0511 。但它们的置信区间均包含原点,其他指标也不理想,因此,本例中其交互作用并不显著,该模型不如前面两个模型好。
自相关性的诊断和处理:若数据是以时间为序的,称为时间序列数据。在时间序列数据中,同一变量的顺序观测值之间出现的相关现象称为自相关。一旦数据中存在这种自相关序列,如果仍采用普通的回归模型直接处理,将产生不良后果,使预测失去意义。自相关的诊断主要有图示检验法、相关系数法和DW检验法。图示检验法是通过绘制残差散点图观察,如果散布点大部分点落在第Ⅰ,Ⅲ象限,表明存在着正的序列相关;如果大部分点落在第Ⅱ,Ⅳ象限,表明存在着负的序列相关。对DW检验法可以利用MATLAB软件编程计算统计量:
,
然后查阅DW检验上下界表,以决定模型的自相关状态。
当一个回归模型存在序列相关性时,首先要查明序列相关产生的原因。如果是回归模型选用不当,则应改用适当的回归模型;如果是缺少重要的自变量,则应增加自变量;如果以上方法都不能消除序列相关性,则需要采用差分法、迭代法等处理,更详细内容参见相关概率统计参考文献。
8.2.3 逐步回归方法建模
逐步回归就是一种从众多自变量中有效地选择重要变量的方法。逐步回归的基本思路是,先确定一个包含若干自变量的初始集合,然后每次从集合外的变量中引入一个对因变量影响最大的,再对集合中的变量进行检验,从变得不显著的变量中移出一个影响最小的,依此进行,直到不能引入和移出为止。引入和移出都以给定的显著性水平为标准。
MATLAB统计工具箱中逐步回归的命令是stepwise,它提供了一个人机交互式画面,通过此工具可以自由地选择变量进行统计分析。该命令的用法是:
stepwise(X , Y , inmodel , alpha)
其中X是自变量数据,排成矩阵(m为自变量个数,n为每个变量的数据量),Y是因变量数据,排成向量,inmodel 是自变量初始集合的指标,缺省时为全部自变量,alpha为显著水平,缺省时为0.05。
运行stepwise命令时产生图形窗口:Stepwise Plot , Stepwise Table , Stepwise History.当鼠标移到图形某个区域时,鼠标点击后产生交互作用。Stepwise Plot窗口中的虚线表示回归系数的置信区间包含零点,即该回归系数与零无显著差异,一般应将该变量移去;实线则表明该回归系数与零有显著差异,应保留在模型中(蓝色表示该变量已进入模型,红色表示该变量已移出模型)。引入和移出变量还可参考Stepwise History窗口中剩余标准差RMSE是否在下降,剩余标准差RMSE最小的就是最好的模型。Stepwise Table窗口中列出了一个统计表,包括回归系数及其置信区间,以及模型的统计量剩余标准差RMSE、相关系数R-square、F值、与F对应的概率。
关于本节案例2,如果引入新的自变量 . 也可以采用逐步回归法解决,源程序如下:
代码语言:javascript复制A=[3.5 5.3 5.1 5.8 4.2 6.0 6.8 5.5 3.1 7.24.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;9 20 18 33 31 13 25 305 47 25 11 23 35 39 21 7 40 35 23 33 27 34 15;6.1 6.4 7.4 6.7 7.5 5.9 6.0 4.05.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.730.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.235.1]';
x1=A(:,1);
x2=A(:,2);
x3=A(:,3);
x4=x1.*x2;
x5=x1.*x3;
x6=x2.*x3;
X=[A,x4,x5,x6];
stepwise(X,Y)
运行并按上述步骤操作后可以得到本文前面线性回归相同的结论,即不含交互项的模型是最好的。在此只介绍操作过程,其交互界面,只要在MATLAB软件上一试便知。
8.2.4 多项式回归
多项式回归仍然属于多元线性回归,可以是一元多项式回归或多元多项式回归。
一元多项式回归模型的一般形式为
用MATLAB求解一元多项式回归,除了使用命令polyfit(x,y,m)外,还可以使用如下命令:
代码语言:javascript复制 Polytool(x,y,m,alpha)
输入x,y,m同命令polyfit,alpha是显著性水平(默认0.05),则输出一个交互式画面,画面显示回归曲线及其置信区间,通过图左下方的export下拉式菜单,还可以输出回归系数估计值及其置信区间、残差等。
下面通过一个用多元多项式回归的实例说明什么时候用多项式回归以及如何通过MATLAB软件进行处理。
例3 为了了解人口平均预期寿命与人均国内生产总值和体质得分的关系,我们查阅了国家统计局资料,北京体育大学出版社出版的《2000国民体质监测报告》,表8-4是我国大陆31个省市的有关数据。我们希望通过这几组数据考察它们是否具有良好的相关关系,并通过它们的关系从人均国内生产总值(可以看作反映生活水平的一个指标)、体质得分预测其寿命可能的变化范围。体质是指人体的质量,是遗传性和获得性的基础上表现出来的人体形态结构,生理机能和心理因素综合的、相对稳定的特征。体质是人的生命活动和工作能力的物质基础。它在形成、发展和消亡过程中,具有明显的个体差异和阶段性。中国体育科学学会体质研究会研究表明,体质应包括身体形态发育水平、生理功能水平、身体素质和运动能力发展水平、心理发育水平和适应能力等五个方面。目前,体质的综合评价主要是形态、机能和身体素质三类指标按一定的权重进行换算而得。
表8-4 31个省市人口预期寿命与人均国内生产总值和体质得分数据
序号 | 预期寿命 | 体质得分 | 人均产值 | 序号 | 预期寿命 | 体质得分 | 人均产值 | 序号 | 预期寿命 | 体质得分 | 人均产值 |
---|---|---|---|---|---|---|---|---|---|---|---|
1 | 71.54 | 66.165 | 12857 | 12 | 65.49 | 56.775 | 8744 | 23 | 69.87 | 64.305 | 17717 |
2 | 73.92 | 71.25 | 24495 | 13 | 68.95 | 66.01 | 11494 | 24 | 67.41 | 60.485 | 15205 |
3 | 73.27 | 70.135 | 24250 | 14 | 73.34 | 67.97 | 20461 | 25 | 78.14 | 70.29 | 70622 |
4 | 71.20 | 65.125 | 10060 | 15 | 65.96 | 62.9 | 5382 | 26 | 76.10 | 69.345 | 47319 |
5 | 73.91 | 69.99 | 29931 | 16 | 72.37 | 66.1 | 19070 | 27 | 74.91 | 68.415 | 40643 |
6 | 72.54 | 65.765 | 18243 | 17 | 70.07 | 64.51 | 10935 | 28 | 72.91 | 66.495 | 11781 |
7 | 70.66 | 67.29 | 10763 | 18 | 72.55 | 68.385 | 22007 | 29 | 70.17 | 65.765 | 10658 |
8 | 71.85 | 67.71 | 9907 | 19 | 71.65 | 66.205 | 13594 | 30 | 66.03 | 63.28 | 11587 |
9 | 71.08 | 66.525 | 13255 | 20 | 71.73, | 65.77 | 11474 | 31 | 64.37 | 62.84 | 9725 |
10 | 71.29, | 67.13 | 9088 | 21 | 73.10 | 67.065 | 14335 | ||||
11 | 74.70 | 69 .505 | 33772 | 22 | 67.47 | 63.605 | 7898 |
模型的建立和求解 作表8-4数据的散点图如图8.3
图8.3 预期寿命与人均国内生产总值和体质得分的散点图
从图8.3可以看出人口预期寿命与体质得分有较好的线性关系,与人均国内生产总值的关系难以确定,我们建立二次函数的回归模型。
一般的多元二项式回归模型可表为
MATLAB统计工具箱提供了一个很方便的多元二项式回归命令:
代码语言:javascript复制Rstool(x,y, 'model',alpha)
输入x为自变量(n×m矩阵),y为因变量(n维向量),alpha为显著水平,model从下列4个模型中选择一个:
linear(只包含线性项)
purequadratic(包含线性项和纯二次项)
interaction(包含线性项和纯交互项)
quadratic(包含线性项和完全二次项)
输出一个交互式画面,对例3,编程如下:
代码语言:javascript复制y=[71.54 73.92 73.27 71.20 73.91 72.5470.66 71.85 71.08 71.29,74.70 65.49 68.95 73.34 65.96 72.37 70.07 72.55 71.6571.73,73.10 67.47 69.87 67.41 78.14 76.10 74.91 72.91 70.17 66.03 64.37];
x1=[12857 24495 24250 10060 29931 1824310763 9907 13255 9088 33772 8744 11494 20461 5382 19070 10935 22007 13594 1147414335 7898 17717 15205 70622 47319 40643 11781 10658 11587 9725];
x2=[66.165 71.25 70.135 65.125 69.99 65.76567.29 67.71 66.525 67.13,69.505 56.775 66.01 67.97 62.9 66.1 64.51 68.38566.205 65.77,67.065 63.605 64.305 60.485 70.29 69.345 68.415 66.495 65.76563.28 62.84];
x=[x1',x2'];
rstool(x,y','purequadratic')
得到一个如图8.4的交互式画面
图8.4 预期寿命与人均国内生产总值和体质得分的一个交互式画面
左边一幅图形是固定时的曲线及其置信区间,右边一幅图形是固定时的曲线及其置信区间。移动鼠标可改变,的值,同时图左边给出的预测值及其置信区间。如输入=128757,=66.165,则=70.6948,其置信区间70.6948±1.1079。
图的左下方有两个下拉式菜单,上面的菜单Export用于输出数据(包括:回归系数parameters,残差residuals,剩余标准差RMSE等), 在MATLAB工作空间中得到有关数据。通过下面的菜单在上述4个模型中变更选择,最后确定RMSE值较小的模型。例3则是包含线性项和完全二次项(quadratic)的模型最佳,即
剩余标准差为1.2622,因此,所得回归模型为:
利用此模型我们可以根据国内生产总值及体质得分,预测寿命。
8.3 非线性回归分析
8.3.1 非线性最小二乘拟合
线性最小二乘拟合与线性回归中的“线性”并非指与的关系,而是指是系数或的线性函数。拟合如的函数仍然是最小二乘拟合;如果拟合如的曲线,对是非线性的,但取对数后对系数是线性的,属于可化为线性回归的类型。下面讨论非线性拟合的情形。
非线性最小二乘拟合问题的提法是:已知模型
,
其中对是非线性的,为了估计参数,收集n个独立观测数据
。记拟合误差,求使误差的平方和
最小。
作为无约束非线性规划的特例,解非线性最小二乘拟合可用MATLAB优化工具箱命令lsqnonlin和lsqcurvefit。
8.3.2 非线性回归模型
非线性回归模型记作
其中对回归系数是非线性的,。求得回归系数的最小二乘估计。
MATLAB统计工具箱中非线性回归的命令是:
[b,R,J]=nlinfit(x,y, ‘model’,bo)
输入x是自变量数据矩阵,每列一个向量;y是因变量数据向量;model是模型的函数名(M文件),形式为,b为待估系数;b0是回归系数的初值。输出b是的估计值,R是残差,J是用于估计预测误差的Jacobi矩阵。这个命令是依据高斯—牛顿法求解的。
将上面的输出作为命令
Bi=nlparci(b,R,J)
的输入,得到的bi是回归系数的置信区间。用命令
nlintool(x,y, ‘model’,b)
可以得到一个交互式画面,其内容和用法与多项式回归的Polytool类似。
例4 酶促反应速度与底物浓度
酶促反应动力学简称酶动力学,主要研究酶促反应速度与底物(即反应物)浓度以及其它因素的关系。在底物浓度很低时酶促反应是一级反应;当底物浓度处于中间范围时,是混合级反应;当底物浓度增加时,向零级反应过渡。某生化系学生为了研究嘌呤霉素在某项酶促反应中对反应速度与底物浓度之间关系的影响,设计了两个实验,一个实验中所使用的酶是经过嘌呤霉素处理的,而另一个实验所用的酶是未经嘌呤霉素处理的。所得实验数据见表8-5。试根据问题的背景和这些数据建立一个合适的数学模型,来反映这项酶促反应的速度与底物浓度以及嘌呤霉素处理与否之间的关系。
表8-5 嘌呤霉素实验中的反应速度与底物浓度数据
底物浓度(ppm) | 0.02 | 0.06 | 0.11 | 0.22 | 0.56 | 1.10 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
反应 速度 | 未处理 | 67 | 51 | 84 | 86 | 98 | 115 | 131 | 124 | 144 | 158 | 160 | / | |
处理 | 76 | 47 | 97 | 107 | 123 | 139 | 159 | 152 | 191 | 201 | 207 | 200 |
分析与假设
记酶促反应的速度为,底物浓度为,二者之间的关系写作,其中β为参数(β可为一向量)。由酶促反应的基本性质可知,当底物浓度很低时酶促反应是一级反应,此时反应速度大致与底物浓度成正比;而当底物浓度很大,渐近饱和时,反应速度将趋于一个固定值(即零级反应)。下面的两个简单模型具有这种性质:
Michaelis-Menten 模型
指数增长模型
非线性模型的求解
首先作出给出的经过嘌呤霉素处理和未经处理的反应速度与底物浓度的散点图,可以看出,上述两个模型与实际数据得到的散点图是大致符合的。
我们将主要对前一模型即Michaelis-Menten模型进行详细的分析。首先对经过嘌呤酶素处理的实验数据进行分析,在此基础上,再来讨论是否有更一般的模型来统一刻画处理前后的数据,进而揭示其中的联系。
我们用非线性回归的方法直接估计模型的参数,模型的求解可利用MATLAB统计工具箱中的命令进行,使用格式为:
[beta,R,J]=nlinfit(x,y,’model’,beta0)
其中输入x为自变量数据矩阵,每列一个变量;y为因变量数据向量;model为模型的M文件名,M函数形式为y=f (beta,x),beta为待估计参数;beta0为给定的参数初值。输出beta为参数估计值,R为残差,J为用于估计预测误差的Jacobi矩阵。参数beta的置信区间用命令
nlparci(beta,R,J)得到。
首先建立函数M文件huaxue.m,非线性模型参数估计的源程序如下:
代码语言:javascript复制x=[0.02 0.02 0.06 0.06 0.11 0.11 0.22 0.220.56 0.56 1.10 1.10];
y=[76 47 97 107 123 139 159 152 191 201 207200];
beta0=[195.8027 0.04841];
[beta,R,J]=nlinfit(x,y,'huaxue',beta0);
betaci=nlparci(beta,R,J);
beta,betaci
yy=beta(1)*x./(beta(2) x);
plot(x,y,'o',x,yy,'m '),pause
nlintool(x,y,'huaxue',beta)
得到的数值结果见表8-6。
Nlintool用于给出一个交互式画面,可以得到因变量y的预测值和预测区间,左下方的Export可向工作区传送剩余标准差等数据。
表8-6 模型参数的估计结果
参 数 | 参 数 估 计 值 | 置 信 区 间 |
---|---|---|
212.6818 | [197.2028 228.1608] | |
0.0641 | [0.0457 0.0826] |
从上面的结果可以知道,对经过嘌呤霉素处理的实验数据,在用Michaelis-Menten模型进行回归分析时,最终反应速度为=212.6818,反应的半速度点(达到最终反应速度的一半时的底物浓度x值)恰为=0.06412。
混合反应模型
由酶动力学知识我们知道,酶促反应的浓度依赖于底物浓度,并且可以假定,嘌呤霉素的处理会影响最终反应速度参数,而基本上不影响半速度参数.表8-5的数据也印证了这种看法。Michaelis-Menten模型的形式可以分别描述经过嘌呤霉素处理和未处理的反应速度与底物浓度的关系(两个模型的参数会不同),为了在同一个模型中考虑嘌呤霉素处理的影响,我们采用对未经嘌呤霉素处理的模型附加增量的方法,考察如下的混合反应模型:
其中自变量为底物浓度, 为一示性变量(0-1变量), 用来表示是否经嘌呤霉素处理, =1表示经过处理, =0表示未经处理;参数是未处理的反应的最终反应速度,是经处理后最终反应速度的增长值, 是未经处理的反应的半速度点, 是经处理后反应的半速度点的增长值。
混合模型的求解和分析
为了给出初始迭代值,从实验数据我们注意到,未经处理的反应速度的最大实验值为160,经过处理的最大实验值为207,于是可取参数初值;又从数据可大致估计未经处理的半速度点约为0.05,经过处理的半速度点约为0.06,我们取。
建立函数M文件model.m
代码语言:javascript复制functionyhat=model(beta0,x)
a=beta0(1);
b=beta0(2);
c=beta0(3);
d=beta0(4);
x1=x(:,1);
x2=x(:,2);
yhat=((a c*x2).*x1)./(b d*x2 x1);
建立M文件meicu.m
)
代码语言:javascript复制x=[0.020.02 0.06 0.06 0.11 0.11 0.22 0.22 0.56 0.56 1.10 1.10 0.02 0.02 0.06 0.06 0.110.11 0.22 0.22 0.56 0.56 1.10 1.10; 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 00 0]';
y=[76 4797 107 123 139 159 152 191 201 207 200 67 51 84 86 98 115 131 124 144 158 160170]';
beta0=[1700.05 60 0.01];
[beta,R,J]=nlinfit(x,y,'model',beta0);
betaci=nlparci(beta,R,J);
beta,betaci
a=beta(1);
b=beta(2);
c=beta(3);
d=beta(4);
x1=x(:,1);
x2=x(:,2);
yy=((a c*x2).*x1)./(b d*x2 x1);
%yy=((beta(1,:) beta(3,:)*x(2)).*x(1))./(beta(2,:) beta(4,:)*x(2) x(1));
plot(x1,y,'o',x1,yy,' '),pause
nlintool(x,y,'model',beta
运行后即得如下表8-7结果
表8-7 混合模型参数的估计结果
参数 | 参数估计值 | 置信区间 |
---|---|---|
165.3259 | [152.1100 178.5418] | |
0.0524 | [0.0347 0.0700] | |
47.3574 | [28.510 66.6637] | |
0.0118 | [-0.0126 0.0361] |
从表8-7可以发现,的置信区间包含零点,这表明参数对因变量y的影响并不显著,即:嘌呤霉素的作用不影响半速度参数。因此,可以考虑下面的模型:
可以采用类似方法计算和分析,所得结果统计指标差不多,不过显然最后一个模型具有更为简洁的形式。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/213576.html原文链接:https://javaforall.cn