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 小时前
JVM——函数式语法糖:如何使用Function、Stream来编写函数式程序?
java·开发语言·jvm
ThetaarSofVenice2 小时前
对象的finalization机制Test
java·开发语言·jvm
思则变2 小时前
[Pytest] [Part 2]增加 log功能
开发语言·python·pytest
lijingguang3 小时前
在C#中根据URL下载文件并保存到本地,可以使用以下方法(推荐使用现代异步方式)
开发语言·c#
¥-oriented3 小时前
【C#中路径相关的概念】
开发语言·c#
CoderCodingNo3 小时前
【GESP】C++四级考试大纲知识点梳理, (7) 排序算法基本概念
开发语言·c++·排序算法
恋猫de小郭3 小时前
Meta 宣布加入 Kotlin 基金会,将为 Kotlin 和 Android 生态提供全新支持
android·开发语言·ios·kotlin
JosieBook4 小时前
【Java编程动手学】使用IDEA创建第一个HelloJava程序
java·开发语言·intellij-idea
Thomas_YXQ4 小时前
Unity3D DOTS场景流式加载技术
java·开发语言·unity
旷世奇才李先生4 小时前
Ruby 安装使用教程
开发语言·后端·ruby