一元线性回归

一个旧东西随着时间价格也在变动,数据如下:

12345678910
265194214931086766539485291224202

绘图

clear all
clc
x=1:10;
y=[2650,1942,1493,1086,766,539,485,291,224,202];
for i=1:10
    plot(x(i),y(i),'or');
    hold on
end
xlabel('x');
ylabel('y');

在这里插入图片描述

由图可发现,x和y呈现指数关系,于是我们假设 z = ln ⁡ y z=\ln y z=lny,记作 z i = ln ⁡ y i z_i=\ln y_i zi=lnyi,重新绘图:

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

在这里插入图片描述
分析发现现在变得更拟合了。各点基本处于一条直线上,可以认为 z = a + b x z=a+bx z=a+bx

求参

clear all
clc
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)

返回结果:
在这里插入图片描述
可以得出:a=8.1671,b=-0.2984,即 z = 8.1671 − 0.2984 x z=8.1671-0.2984x z=8.16710.2984x

多元线性回归

regress函数

%调用格式
[b,bint,r,rint,stats]=regress(y,x,alpha)

alpha为显著性水平,缺省设定为0.05, b表示为输出量, bint为回归系数估计值和他们的置信区间,r为残差, rint为置信区间, stats适用于检验回归模型的统计量。
案例如下:

x 1 x_1 x11.3761.3751.3871.4011.4121.4281.4451.477
x 2 x_2 x20.4500.4750.4850.50.5350.5450.550.575
x 3 x_3 x32.172.5542.6762.7132.8233.0883.1223.262
x 4 x_4 x40.89221.1610.53460.95891.02391.04991.10651.1387
y y y5.195.35.65.8266.066.456.95
%开始多元回归
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.5,0.535,0.545,0.55,0.575];
x3=[2.170,2.554,2.676,2.713,2.823,3.088,3.122,3.262];
x4=[5.19,1.161,0.5346,0.9589,2.0239,1.0499,1.1065,1.1387];
y=[5.19,5.3,5.6,5.82,6,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'];
[b,bint,r,rint,stats]=regress(y,x)

在这里插入图片描述
在这里插入图片描述
根据b可以解得该函数关系式为:
y = − 20.5297 + 19.1269 x 1 + 8.0045 x 2 − 1.5867 x 3 − 0.1465 x 4 y=-20.5297+19.1269x_1+8.0045x_2-1.5867x_3 -0.1465x_4 y=20.5297+19.1269x1+8.0045x21.5867x30.1465x4

matlab 文档非常有用

文档连接:点击这里

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐