Matlab多元线性回归

曲线拟合问题的特点是,根据得到的若干有关变量的一组数据,寻找因变量与(一个或几个)自变量之间的一个函数。通常,函数的形式可以由经验、先验知识或对数据的直观观察决定,从数理统计的观点看,我们根据一个样本计算出的那些系数,只是它们的一个(点)估计,应该对它们作区间估计或假设检验,如果置信区间太大,那么系数的估计值是没有多大意义的。另外也可以用方差分析。方法对模型的误差进行分析,对拟合的优劣给出评价。简单地说,回归分析就是对拟合问题作的统计分析。

回归分析一般研究以下问题:

拿到一组数据后,我们首先需要对数据进行预处理,常用的标准化处理方式:

模型的评价指标,MSE、RMSE,用来判断模型的好坏,其值越小越好。

理论部分不再赘述,具体操作如下:

Matlab 命令regress实现多元线性回归,用的方法是最小二乘法,用 法是:

b=regress(Y,X)

其中 Y,X 为按因变量,自变量排列的数据,b 为回归系数估计值

[b,bint,r,rint,stats]=regress(Y,X,alpha)

这里 Y,X 同上,alpha 为显著性水平(缺省时设定为 0.05),b,bint 为回归系数估计值和 它们的置信区间,r,rint 为残差(向量)及其置信区间,stats 是用于检验回归模型的 统计量,有四个数值,第一个是 ,第二个是 F ,第三个 是与F 对应的概率 pp < α 拒绝H0 ,回归模型成立,第四个是残差的方差

残差及其置信区间可以用 **rcoplot(r,rint)**画图。

示例:

画出数据分布散点图:

可以看到随X增大Y也不断增大,大致呈线性趋势,于是考虑拟合

Matlab 复制代码
clc,clear;
clc,clear 
x1=[0.1:0.01:0.18]'; 
y=[42,41.5,45.0,45.5,45.0,47.5,49.0,55.0,50.0]'; 
x=[ones(9,1),x1]; 
[b,bint,r,rint,stats]=regress(y,x); 
b,bint,stats,rcoplot(r,rint) 

由残差图可以看出,第8个值为异常值。去除第8个数据之后:

Matlab 复制代码
clc,clear 
x1=[0.1:0.01:0.18]'; 
y=[42,41.5,45.0,45.5,45.0,47.5,49.0,55.0,50.0]'; 
idx = true(1, length(x1)); 
idx(8)=false;
x1=x1(idx);
y=y(idx);
x=[ones(length(x1),1),x1]; 
[b,bint,r,rint,stats]=regress(y,x); 
b,bint,stats,rcoplot(r,rint) 

此时没有异常值,所以应该使用修改之后的结果。

示例2:

画出y分别关于x1和x2 的散点图如下:

Matlab 复制代码
clc,clear;
x1=[120 140 190 130 155 175 125 145 180 150]'; 
x2=[100 110 90 150 210 150 250 270 300 250]'; 
y=[102 100 120 77 46 93 26 69 65 85]'; 
subplot(1,2,1)
plot(x1,y,'o')
subplot(1,2,2)
plot(x2,y,'o')

设回归模型为;

建模代码:

Matlab 复制代码
x=[ones(10,1),x1,x2]; 
[b,bint,r,rint,stats]=regress(y,x); 
b,bint,stats 

运行结果:

相关推荐
多多*2 小时前
LUA+Reids实现库存秒杀预扣减 记录流水 以及自己的思考
linux·开发语言·redis·python·bootstrap·lua
Wish3D3 小时前
阿里云OSS 上传文件 Python版本
开发语言·python·阿里云
凤年徐3 小时前
【数据结构初阶】单链表
c语言·开发语言·数据结构·c++·经验分享·笔记·链表
oioihoii3 小时前
C++11 右值引用:从入门到精通
开发语言·c++
朝新_6 小时前
【多线程初阶】阻塞队列 & 生产者消费者模型
java·开发语言·javaee
立莹Sir6 小时前
Calendar类日期设置进位问题
java·开发语言
风逸hhh7 小时前
python打卡day46@浙大疏锦行
开发语言·python
火兮明兮7 小时前
Python训练第四十三天
开发语言·python
ascarl20108 小时前
准确--k8s cgroup问题排查
java·开发语言
fpcc9 小时前
跟我学c++中级篇——理解类型推导和C++不同版本的支持
开发语言·c++