MATLAB用regress作多元非线性回归

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

    很久没有用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 

MATLAB用regress作多元非线性回归_第1张图片

 

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

你可能感兴趣的:(matlab)