1、1数据回归分析和拟合的 Matlab 实现本次将教程的主要内容包含:一、多元线性回归 2#多元线性回归:regress二、多项式回归 3#一元多项式:polyfit 或者 polytool多元二项式:rstool 或者 rsmdemo三、非线性回归 4#非线性回归:nlinfit四、逐步回归 5#逐步回归:stepwise一、多元线性回归多元线性回归:1、b=regress(Y, X ) 确定回归系数的点估计值2、b, bint,r,rint,stats=regress(Y,X,alpha) 求回归系数的点估计和区间估计、并检验回归模型bint 表示回归系数的区间估计.r 表示残差rint 表
2、示置信区间stats 表示用于检验回归模型的统计量,有三个数值:相关系数 r2、F 值、与 F 对应的概率 p说明:相关系数 r2越接近 1,说明回归方程越显著; 时拒绝 H0,F 越大,说明回归方程越显著;与 F 对应的概率 px=143 145 146 147 149 150 153 154 155 156 157 158 159 160 162 164;X=ones(16,1) x;Y=88 85 88 91 92 93 93 95 96 98 97 96 98 99 100 102;回归分析及检验 复制内容到剪贴板 代码: b,bint,r,rint,stats=regress(Y,X
3、)b =-16.07300.7194bint =-33.7071 1.56120.6047 0.8340r =1.2056-3.2331-0.95241.32820.889531.1702-0.98790.29270.57341.85400.1347-1.5847-0.3040-0.0234-0.46210.0992rint =-1.2407 3.6520-5.0622 -1.4040-3.5894 1.6845-1.2895 3.9459-1.8519 3.6309-1.5552 3.8955-3.7713 1.7955-2.5473 3.1328-2.2471 3.3939-0.7540
4、4.4621-2.6814 2.9508-4.2188 1.0494-3.0710 2.4630-2.7661 2.7193-3.1133 2.1892-2.4640 2.6624stats =0.9282 180.9531 0.0000 1.74374运行结果解读如下参数回归结果为,对应的置信区间分别为-33.7017,1.5612和0.6047,0.834r2=0.9282(越接近于 1,回归效果越显著),F=180.9531 , p=0.0000,由 pt=1/30:1/30:14/30;s=11.86 15.67 20.60 26.69 33.71 41.93 51.13 61.49
5、72.90 85.44 99.08 113.77 129.54 146.48;p,S=polyfit(t,s,2)p =6489.2946 65.8896 9.1329S = R: 3x3 doubledf: 11normr: 0.1157故回归模型为 解法二:化为多元线性回t=1/30:1/30:14/30;s=11.86 15.67 20.60 26.69 33.71 41.93 51.13 61.49 72.90 85.44 99.08 113.77 129.54 146.48;T=ones(14,1) t (t.2);b,bint,r,rint,stats=regress(s,T)b
6、=9.132965.8896489.2946bint =9.0614 9.204465.2316 66.5476488.0146 490.5747r =-0.0129-0.0302-0.01480.07320.00400.0474-0.0165-0.0078-0.0363-0.02220.00467-0.0059-0.02370.0411rint =-0.0697 0.0439-0.0956 0.0352-0.0876 0.05800.0182 0.1283-0.0709 0.0789-0.0192 0.1139-0.0894 0.0563-0.0813 0.0658-0.1062 0.033
7、5-0.0955 0.0511-0.0704 0.0796-0.0793 0.0675-0.0904 0.0429-0.0088 0.0910stats =1.0e+007 *0.0000 1.0378 0 0.0000故回归模型为:预测及作图Y=polyconf(p,t,S);plot(t,s,k+,t,Y,r)多元二项式回归1、多元二项式回归 Matlab 命令rstool(x,y,model,alpha) 输入参数说明:x:n*m 矩阵;8Y:n 维列向量;alpha:显著性水平(缺省时为 0.05);mode:由下列 4 个模型中选择 1 个(用字符串输入,缺省时为线性模型)2、实例演
8、示说明设某商品的需求量与消费者的平均收入、商品价格的统计数据如下,建立回归模型,预测平均收入为 1000、价格为 6时的商品需求量需求量 100 75 80 70 50 65 90 100 110 60收入 1000 600 1200 500 300 400 1300 1100 1300 300价格 5 7 6 6 8 7 5 4 3 9解法一:选择纯二次模型 复制内容到剪贴板 代码:%直接用多元二项式回归如下x1=1000 600 1200 500 300 400 1300 1100 1300 300;x2=5 7 6 6 8 7 5 4 3 9;y=100 75 80 70 50 65 9
9、0 100 110 60;x=x1 x2;rstool(x,y,purequadratic)在 x1 对应的文本框中输入 1000,X2 中输入 6,敲回车键,此时图形和相关数据会自动更新此时在 GUI 左边的“Predicted Y1”下方的数据变为 88.47981,表示平均收入为 1000、价格为 6 时商品需求量为88.4791点击左下角的 Export 按钮,将会导出回归的相关参数 beta、rmse 和 residuals 到工作空间(workspace)在 Export 按钮下面可以选择回归类型在 Matlab 命令窗口中输入 复制内容到剪贴板 代码:beta, rmse将得到如
10、下结果 复制内容到剪贴板 9代码:beta =110.53130.1464-26.5709-0.00011.8475rmse =4.5362故回归模型为解法二:将上面饿模型转换为多元线性回归 复制内容到剪贴板 代码:X=ones(10,1) x1 x2 (x1.2) (x2.2);b,bint,r,rint,stats=regress(y,X);b,statsb =110.53130.1464-26.5709-0.00011.8475stats =0.9702 40.6656 0.0005 20.5771三、非线性回归1、非线性回归beta,r,J=nlinfit(x,y,modelfun,
11、beta0) 非线性回归系数的命令10nlintool(x,y,modelfun, beta0,alpha) 非线性回归 GUI 界面参数说明beta:估计出的回归系数;r:残差;J:Jacobian 矩阵;x,y:输入数据 x、y 分别为矩阵和 n 维列向量,对一元非线性回归,x 为 n 维列向量;modelfun:M 函数、匿名函数或 inline 函数,定义的非线性回归函数;beta0:回归系数的初值;2、预测和预测误差估计Y,DELTA=nlpredci(modelfun, x,beta,r,J)获取 x 处的预测值 Y 及预测值的显著性为 1-alpha 的置信区间 YDELTA3、
12、实例演示说明解:(1)对将要拟合的非线性模型,建立 M 函数如下 复制内容到剪贴板 代码:function yhat=modelfun(beta,x)%beta 是需要回归的参数%x 是提供的数据yhat=beta(1)*exp(beta(2)./x);(2)输入数据 复制内容到剪贴板 代码:x=2:16;y=6.42 8.20 9.58 9.5 9.7 10 9.93 9.99 10.49 10.59 10.60 10.80 10.60 10.90 10.76;beta0=8 2;(3)求回归系数 复制内容到剪贴板 代码:beta,r ,J=nlinfit(x,y,modelfun,beta
13、0);beta11beta =11.6036-1.0641即得回归模型为(4)预测及作图 复制内容到剪贴板 代码:YY,delta=nlpredci(modelfun,x,beta,r ,J);plot(x,y,k+,x,YY,r)四、逐步回归1、逐步回归的命令stepwise(x,y,inmodel,alpha) 根据数据进行分步回归stepwise 直接调出分步回归 GUI 界面输入参数说明x:自变量数据, 阶矩阵;y:因变量数据, 阶矩阵;inmodel:矩阵的列数的指标,给出初始模型中包括的子集(缺省时设定为全部自变量);alpha:显著性水平(缺省时为 0.5);2、实例演示分析水泥
14、凝固时放出的热量 y 与水泥中 4 种化学成分 x1、x2、x3、 x4 有关,今测得一组数据如下,试用逐步回归法确定一个线性模型序号 1 2 3 4 5 6 7 8 9 10 11 12 13x1 7 1 11 11 7 11 3 1 2 21 1 11 10x2 26 29 56 31 52 55 71 31 54 47 40 66 68x3 6 15 8 8 6 9 17 22 18 4 23 9 8x4 60 52 20 47 33 22 6 44 22 26 34 12 12y 78.5 74.3 104.3 87.6 95.9 109.2 102.7 72.5 93.1 115.9
15、 83.8 113.3 109.4 (1)数据输入 12复制内容到剪贴板 代码:x1=7 1 11 11 7 11 3 1 2 21 1 11 10;x2=26 29 56 31 52 55 71 31 54 47 40 66 68;x3=6 15 8 8 6 9 17 22 18 4 23 9 8;x4=60 52 20 47 33 22 6 44 22 26 34 12 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 109.4;x=x1 x2 x3 x4;(2)逐步回归先在初始模型中取全部自变量
16、复制内容到剪贴板 代码:stepwise(x,y)Matlab 问题!逐步多元非线性回归 以及求极值问题悬赏分:55 - 解决时间: 2008-10-8 17:31 1.0 13.0 1.5 0.330 1.4 19.0 3.0 0.366 1.8 25.0 1.0 0.294 2.2 10.0 2.5 0.476 2.6 16.0 0.5 0.209 3.0 22.0 2.0 0.451 3.4 28.0 3.5 0.482这是文献上的一组均匀试验的设计和结果。从左至右:自变量 x1,x2,x3;因变量 y;试验次数 7 次。请问能否用Matlab 进行多元非线性的回归?(二次多项式)可能的
17、模型 y= a + b1*x1 + b2*x2 + b3*x3 + b4*x1*x2 + b5*x1*x3 + b6*x2*x3 + b7*x12 + b8*x22 + b9*x32;最好可以用逐步回归技术或其他技术剔除一些影响小的变量或项。请给出具体的方法。谢谢。其实最终的目的是找出极大值点和极大值(优化),所以,除了用上述多元非线性回归方法外,如有其他方法如用人工神经网络结合遗传算法、SNTO(序贯优化方法)等进行有效处理的,也可,并烦请给出具体命令、方法。多谢!%引言%你的变量是 10 个,而方程只有 7 个,做的效果可能会比较差%神经网络等我没接触过%下面只弄那个多项式%13%第一步d
18、ata=1.0 13.0 1.5 0.330;1.4 19.0 3.0 0.366;1.8 25.0 1.0 0.294;2.2 10.0 2.5 0.476;2.6 16.0 0.5 0.209;3.0 22.0 2.0 0.451;3.4 28.0 3.5 0.482;x1=data(:,1);x2=data(:,2);x3=data(:,3);y=data(:,4);mat=ones(size(x1),x1,x2,x3, x1.*x2, x1.*x3, x2.*x3, x1.2, x2.2, x3.2;%下面的 A 就是我们要的常数,分别对应于 a,b1,b2,b3,b4,b5,b6,b
19、7,b8,b9A=maty%第一步结束%得到的结果是:A =000.01490.1844-0.00240.0510-0.00240-0.0002-0.0448发现第一个,第二个以及第 8 个等于 0。先去掉这三个。即 a,b1,b7=0%第二步。去掉上述三项再次拟合%你好好比较一下两步之间的 mat 矩阵的构造就知道怎么弄了。data=1.0 13.0 1.5 0.330;1.4 19.0 3.0 0.366;1.8 25.0 1.0 0.294;142.2 10.0 2.5 0.476;2.6 16.0 0.5 0.209;3.0 22.0 2.0 0.451;3.4 28.0 3.5 0.482;x1=data(:,1);x2=data(:,2);x3=data(:,3);y=data(:,4);mat=x2,x3, x1.*x2, x1.*x3, x2.*x3, x2.2, x3.2; %去掉 a,b1,b7 对应的项%下面的 A 就是我们要的常数,分别对应于 b2,b3,b4,b5,b6,b8,b9A=maty%第二步结束得到的结果是:A =0.01490.1844-0.00240.0510-0.0024-0.0002-0.0448上述几项,你觉得哪一项可以去掉,你仿上面第二步。就可以了。祝你成功。