友情链接:
(1)使用MATLAB进行多元非线性回归——nlinfit函数的使用
https://blog.csdn.net/zhangyugebb/article/details/84770303
(2)MATLAB多元非线性回归
https://blog.csdn.net/lucky51222/article/details/42130523
(3)MATLAB实现多元非线性回归
https://blog.csdn.net/qq_42820064/article/details/86239033
一、使用MATLAB进行多元非线性回归——nlinfit函数的使用
https://blog.csdn.net/zhangyugebb/article/details/84770303
帮我对象做数据分析时遇到的问题,发现网上matlab多元非线性回归例子很少,写下来这篇用作参考
使用beta= nlinfit(x, y, model, beta0)
——x为自变量,可以是多个自变量
——y为因变量,只能由一个
——model是函数模型
——beta0要求系数的初值
例子:
假定一个回归模型y = beta1*x1^3 + beta2*x2^2 + beta3*log2(x3)
其中beta1, beta2, beta3为想要通过回归得到的系数
Step1:建立回归模型
直接使用内联函数建立:
mymodel = inline('beta(1)*x(:,1).^3 + beta(2)*x(:,2).^2 + beta(3)*log2(x(:,3)','beta','x');
这里x(:1)是取x的第一列数据,相应的x(:,2)取第二列数据...
beta(1),beta(2),beta(3)为所求系数
Step2: 回归
x = [x1,x2,x3]; %自变量x1,x2,x3
beta0= [a1,b1,c1,d1,e1,f1,m1,n1,z1]; %系数初始值
beta = nlinfit(x,y,myfun,temp); %回归得到系数beta
二、MATLAB多元非线性回归
https://blog.csdn.net/lucky51222/article/details/42130523
解释变量:商品价格(x1)人均月收入(x2),被解释变量:商品需求量(y),进行二元回归分析,并进行检验
Matlab代码:
clear
clc
data = [89 78 70 60 65 58 50 45 52 35 38
550 580 600 650 720 750 830 880 850 920 1100
5800 5000 6200 6800 7100 7800 8900 9000 8500 9400 9900
]';
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)
命令窗口:
b =
1.0e+004 *
8.4841
0.0006
-0.1486
0.0000
-0.0098
0.0001
bint =
1.0e+005 *
-1.0110 2.7078
-0.0001 0.0002
-0.0443 0.0145
-0.0000 0.0000
-0.0036 0.0017
-0.0000 0.0000
图形:
三、MATLAB实现多元非线性回归
https://blog.csdn.net/qq_42820064/article/details/86239033
简单多元非线性回归算例
现有以下数据
MATLAB代码如下
x1=[1.1 1 1.2 1.1 0.9]';
x2=[2 2 1.8 1.9 2.1]';
x3=[3.2 3.2 3 2.9 2.9]';
y=[10.1 10.2 10 10.1 10]';
G=[x1,x2,x3.^2];
z=G\y;
[beta,r]=nlinfit(X,y,myfun,beta0);
其中输入参数X是自变量,y是因变量,myfun 是函数模型,beta0是初始迭代系数向量,返回值beta是模型的系数向量,r是每个点的残差。
先定义myfun
function y=myfun(beta,x)
y=beta(1)*x(:,1)+beta(2)*x(:,2)+beta(3)*x(:,3).^2;
然后主程序
x1=[1.1 1 1.2 1.1 0.9]';
x2=[2 2 1.8 1.9 2.1]';
x3=[3.2 3.2 3 2.9 2.9]';
y=[10.1 10.2 10 10.1 10]';
X=[x1,x2,x3];
beta0=[1,1,1];
[beta,r]=nlinfit(X,y,'myfun',beta0);