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:

 

regress

 

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

  • 10
    点赞
  • 106
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值