MATLAB用regress作多元非线性回归

来源:互联网 发布:华中科技大学 网络 编辑:程序博客网 时间:2024/04/30 15:41

    在回归分析中,如果有两个或两个以上的自变量,就称为多元回归。事实上,一种现象常常是与多个因素相联系的,由多个自变量的最优组合共同来预测或估计因变量,比只用一个自变量进行预测或估计更有效,更符合实际。因此多元线性回归比一元线性回归的实用意义更大。

    很久没有用MATLAB了,今天在http://www.mathworks.com/help/toolbox/stats/regress.html

看到regress函数的例子,突然想到它居然可以用来做一些简单的多元非线性回归分析,例如,我们用它对一个多项式进行拟合,将要拟合的多项式进行展开,得到的其实就是一个类似因变量y与多个自变量x1, x2...xn之间的表达式:Y= β0+ β1X1+β2X2+……+βpXp+e。

clearclcdata = [55555551010101010101015151515151515202020202020202525252525252530303030303030144176208240272320512144176208240272320512144176208240272320512144176208240272320512144176208240272320512144176208240272320512135.346138.193147.369137.871140.782143.022146.985179.075230.787236.99240.18232.734248.473249.812218.834242.56276.038282.54293.582320.17279.204215.68286.505313.645334.782325.526332.145337.282231.54261.884324.214343.436367.167372.446340.181259.584302.132313.351347.63340.478414.03443.249]';x1 = data(:,1);x2 = data(:,2);y = data(:,3);X = [ones(size(x1)) x1.*x1 x1 x2.*x2 x2 x1.*x2];[b,bint] = regress(y,X)scatter3(x1,x2,y,'filled')hold onx1fit = min(x1):0.5:max(x1);x2fit = min(x2):0.5:max(x2);[X1FIT,X2FIT] = meshgrid(x1fit,x2fit);YFIT = b(1)+ b(2)*X1FIT.*X1FIT+b(3)*X1FIT + b(4)*X2FIT.*X2FIT + b(5)*X2FIT + b(6)*X1FIT.*X2FIT;mesh(X1FIT,X2FIT,YFIT)xlabel('x1')ylabel('x2')zlabel('Y')view(140,30)


 

result:

 

regress

 

当然,你也可以自定义一个这样的函数y = (a*x1+b*x2)^2,用非线性拟合函数nlinfit进行验证。

原创粉丝点击