Matlab一元非线性回归分析

Matlab一元非线性回归分析的分析步骤与一元线性回归分析的步骤类似:

大体分为以下几步:

(1)绘制x,y的散点图,分析散点图的走势;

(2)根据散点图的走势,确定回归方程的具体形式,特别是参数个数的设定和设定初始值;

(3)调用NonLinearModel的fit方法进行模型拟合;

(4)模型改进,去除异常值的操作;

(5)进行残差分析,验证模型。

下面以某商品的数量与定价为例,进行实例展示;

(1)绘制x,y的散点图,分析散点图的走势;

[data,y0]=xlsread('C:\Users\箫韵\Desktop\Matlab数理与统计分析\exdata\test1',3);
x=data(:,2);%提取列数据自变量数据
y=data(:,3);%提取列数据因变量数据
figure;
plot(x,y,'ko');%绘制散点图
xlabel('数量');
ylabel('价格');

                                         图1 散点图

(2)根据散点图的走势,确定回归方程的具体形式,特别是参数个数的设定和设定初始值;

%建立一元非线性回归方程
% yi=f(xi;b1,b2)+ai
% ai~N(0,aa^2),i=1,2,..n
price=@(beta,x)beta(1)./(1-beta(2)*x);%根据散点图趋势建立方程f(x)=b1./(1-b2*x),方程形式并不唯一。
beta0=[120,0.008];%beta0为b1,b2的初始值。根据x的取值范围,x在22与40之间,y>0,故需b2<0.25。

                            %根据y值是84到280的不等分布,主要集中在110到130,故b1取值120较合适,根据方程,b2取0.008即可。
opt=statset;%创建结构体变量类
opt.Robust='on';%开启回归稳健性方法
nlm1=NonLinearModel.fit(x,y,price,beta0,'Options',opt);
%y=41.459./(1-0.02213*x)

(3)调用NonLinearModel的fit方法进行模型拟合;

xnew=linspace(20,40,50)';%取50个x的值在20到40之间
ynew=nlm1.predict(xnew);%进行ynew预测
figure;
plot(x,y,'ko');
hold on;
plot(xnew,ynew,'linewidth',2.5);
xlabel('数量');
ylabel('价格');
legend('原始数据散点','非线性回归曲线');

                                              图2 模型拟合效果

(4)模型改进,去除异常值的操作;

异常值的诊断。NonlinearModel类对象的Residuals属性值中有标准化残差和学生化残差值。这里通过学生化残差查询异常值
Res2=nlm1.Residuals;
Res_Stu2=Res2.Studentized;
id2=find(abs(Res_Stu2)>2);
%properties(nlm1);%可以查询nlm1的属性

%去除异常值重新构建回归模型
nlm2=NonLinearModel.fit(x,y,price,beta0,'Exclude',id2,'options',opt);
%y=41.394./(1-0.22195*x)

xnew=linspace(20,40,50)';
y1=nlm1.predict(xnew);
y2=nlm2.predict(xnew);
figure;
plot(x,y,'ko');
hold on;
plot(xnew,y1,'r--','linewidth',2);
plot(xnew,y2,'b.','linewidth',2);
xlabel('数量');
ylabel('价格');
legend('原始数据散点','回归曲线','去除异常值后的回归曲线');

                           图3 去除异常值与未去除异常值的拟合对比

(5)进行残差分析,验证模型。

调用的是NonLinearModel类中的plotResiduals方法。残差分析有比较多的方法,这里以残差直方图和残差正态概率图为例。

%回归诊断
figure;
subplot(1,2,1);
nlm1.plotResiduals('histogram');
title('(a)残差直方图');
xlabel('残差r');
ylabel('f(r)');
subplot(1,2,2);
nlm1.plotResiduals('probability');
title('(b)残差正态概率图');
xlabel('残差');
ylabel('概率');

                                             图4 残差直方图和残差正态概率图

原始数据
order数量价格
12589
228108
326115
42399
526109
632124
735210
830126
934132
1029110
1133135
1236226
1334136
1436220
1536208
1630125
1732146
1830129
1935140
2029116
2131123
2232126
2328135
2436208
2540240
2628125
2729113
2836208
2932135
3038267
3140225
3238278
3328118
3432124
3534146
3636208
3730111
3829115
3936208
4029123
4125110
4229135
4326123
442399
4526125
3635180
3735178
3835175
3935176
4035180
4135178
4234175
4335168
4435167
4534179
4331129
4431121
4531125
  • 15
    点赞
  • 135
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值