MATLAB建立回归模型

人盡茶涼 提交于 2020-01-15 04:55:24

终于考完数值分析和数理统计了,回来更新MATLAB
回归分析
在MATLAB的绘图里面其实有工具箱可以直接拟合数据,不过我们还是来看下代码简单拟合的方式。
1.一元线性回归
例如 有下列两组数据
x=1:10;
y=[2650,1942,1493,1086,766,539,485,291,224,202];
我们先用线性回归的思路,先画出数据的散点图

clear all
clc 
%做x和y的散点图%
x=1:10;
y=[2650,1942,1493,1086,766,539,485,291,224,202];
for i=1:10
plot(x(i),y(i),'ok');
hold on
end
xlabel('x');
ylabel('y');

我们可以从图中看出不是成线性的,而是近似和对数函数相似,所以我们使用对数函数进行拟合

x=1:10;
y=[2650,1942,1493,1086,766,539,485,291,224,202];
z=zeros(size(y));
N=length(y);
for i=1:N
z(i)=log(y(i));
plot(x(i),z(i),'ok');
hold on
end
xlabel('x');
ylabel('y');

实际运行之后可以看粗已经近似与一条直线,故我们再编写代码直接求出回归系数:`

x=1:10;
y=[2650,1942,1493,1086,766,539,485,291,224,202];
z=zeros(size(y));
N=length(y);
for i=1:N
z(i)=log(y(i));
end
 [p,s]=polyfit(x,z,1)

一元线性回归到这里结束
我们接下来看下多元线性回归

2.多元线性回归
在回归分析中,有两个或者两个以上的自变量,就称为多元回归。多元线性回归的基本原理和基本计算过程与一元线性回归相同。在MATLAB中使用函数regerss(),可以实现多元线性回归。调用格式为

[b,bint,r,rint,status]=regress(y,x,alpha)

例如有以下数据
x1=[1.376, 1.375, 1.387, 1.401, 1.412, 1.428, 1.445, 1.477];
x2=[0.450,0.475,0.485,0.500,0.535,0.545,0.550,0.575];
x3=[2.170,2.554,2.676,2.713,2.823,3.088,3.122,3.262];
x4=[0.8922, 1.1610,0.5346,0.9589, 1.0239, 1.0499,1.1065, 1.1387];
y=[5.19, 5.30,5.60,5.82,6.00,6.06,6.45,6.95];

这可以直接理解为一个矩阵方程x为系数,y为函数值,与正交二项式的线性拟合方式类似,MATLAB求解即可

clear all
clc 
x1=[1.376, 1.375, 1.387, 1.401, 1.412, 1.428, 1.445, 1.477];
x2=[0.450,0.475,0.485,0.500,0.535,0.545,0.550,0.575];
x3=[2.170,2.554,2.676,2.713,2.823,3.088,3.122,3.262];
x4=[0.8922, 1.1610,0.5346,0.9589, 1.0239, 1.0499,1.1065, 1.1387];
y=[5.19, 5.30,5.60,5.82,6.00,6.06,6.45,6.95];
save data x1 x2 x3 x4 y
load data    %取出数据
Y=[y'];
x=[ones(size(x1')),x1',x2',x3',x4'];
% x=[ones(size(x1')),x1',x2',x3',x4'];
[b,bint,r,rint,stats]=regress(Y,x)

写到这里,谢谢观看

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!