在回归分析中,如果有两个或两个以上的自变量,就称为多元回归。事实上,一种现象常常是与多个因素相联系的,由多个自变量的最优组合共同来预测或估计因变量,比只用一个自变量进行预测或估计更有效,更符合实际。因此多元线性回归比一元线性回归的实用意义更大。
很久没有用MATLAB了,今天在http://www.mathworks.com/help/toolbox/stats/regress.html
看到regress函数的例子,突然想到它居然可以用来做一些简单的多元非线性回归分析,例如,我们用它对一个多项式进行拟合,将要拟合的多项式进行展开,得到的其实就是一个类似因变量y与多个自变量x1, x2...xn之间的表达式:Y= β0+ β1X1+β2X2+……+βpXp+e。
clear clc data = [5 5 5 5 5 5 5 10 10 10 10 10 10 10 15 15 15 15 15 15 15 20 20 20 20 20 20 20 25 25 25 25 25 25 25 30 30 30 30 30 30 30 144 176 208 240 272 320 512 144 176 208 240 272 320 512 144 176 208 240 272 320 512 144 176 208 240 272 320 512 144 176 208 240 272 320 512 144 176 208 240 272 320 512 135.346 138.193 147.369 137.871 140.782 143.022 146.985 179.075 230.787 236.99 240.18 232.734 248.473 249.812 218.834 242.56 276.038 282.54 293.582 320.17 279.204 215.68 286.505 313.645 334.782 325.526 332.145 337.282 231.54 261.884 324.214 343.436 367.167 372.446 340.181 259.584 302.132 313.351 347.63 340.478 414.03 443.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 on x1fit = 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:
b = -62.4591 -0.3105 14.1703 -0.0016 0.9665 0.0159 bint = -127.4290 2.5108 -0.4143 -0.2067 10.0531 18.2875 -0.0021 -0.0010 0.6079 1.3250 0.0092 0.0226
当然,你也可以自定义一个这样的函数y = (a*x1+b*x2)^2,用非线性拟合函数nlinfit进行验证。