MATLAB回归
一元非线性回归
在一些实际问题中,变量间的关系并不是都是线性的,用非线性胡桂首先要解决的问题是回归方程中的参数如何估计。我们再通过一个实例来说明如何利用非线性回归技术解决实例问题
【例】为了解百货商贷销售额x与流通率(这是反应商业活动的一个质量指标,指每元上平流转所分摊的流通费用)y之间的关系,收集了九个商店的有关数据(表二)。请建立2他们关系的数学模型:
之后先得到数据之间的散点图 ,如图:
这也是得到x与y之间关系的第一步,由上图判断他们之间的关系可以近似为对数关系或者指数关系,为此可以利用这俩种函数形式进行非线性的拟合,具体步骤如下:
(1)输入数据
clc, clear all, close all
x=[1.5, 4.5, 7.5,10.5,13.5,16.5,19.5,22.5,25.5];
y=[7.0,4.8,3.6,3.1,2.7,2.5,2.4,2.3,2.2];
plot(x,y,'*','linewidth',2);
set(gca,'linewidth',2);
xlabel('销售额x/万元','fontsize', 12)
ylabel('流通费率y/%', 'fontsize',12)
(2) 对数形式非线性回归
m1 = @(b,x) b(1) + b(2)*log(x);
nonlinfit1 = fitnlm(x,y,m1,[0.01;0.01])
b=nonlinfit1.Coefficients.Estimate;
Y1=b(1,1)+b(2,1)*log(x);
hold on
plot(x,Y1,'--k','linewidth',2)
运行结果如下:
nonlinfit1 =
Nonlinear regression model:
y ~ b1 + b2*log(x)
Estimated Coefficients:
Estimate SE tStat pValue
b1 7.3979 0.26667 27.742 2.0303e-08
b2 -1.713 0.10724 -15.974 9.1465e-07
R-Squared: 0.973, Adjusted R-Squared 0.969
F-statistic vs. constant model: 255, p-value = 9.15e-07
(3)指数形式非线性回归
m2 = 'y ~ b1*x^b2';
nonlinfit2 = fitnlm(x,y,m2,[1;1])
b1=nonlinfit2.Coefficients.Estimate(1,1);
b2=nonlinfit2.Coefficients.Estimate(2,1);
Y2=b1*x.^b2;
hold on
plot(x,Y2,'r','linewidth',2)
legend('原始数据','a+b*lnx','a*x^b')
运行结果如下:
nonlinfit2 =
Nonlinear regression model:
y ~ b1*x^b2
Estimated Coefficients:
Estimate SE tStat pValue
b1 8.4112 0.19176 43.862 8.3606e-10
b2 -0.41893 0.012382 -33.834 5.1061e-09
R-Squared: 0.993, Adjusted R-Squared 0.992
F-statistic vs. zero model: 3.05e+03, p-value = 5.1e-11
在该案例中,选择俩种形式的函数进行非线性回归,从回归的结果来看,对数形式的决定系数为0.973,而指数形式的为0.993,显然优于前者,所以可以认为指数形式的函数形式更符合y与x之间的关系,这样就可以确定这些数据之间的关系 了。
##