matlab做回归拟合
先放一张效果图
先用散点图打印x,y
hold on
用了polyfit(x,y,n),回归拟合函数
n代表阶数,至于阶数怎么确定,我看着有的说是阶数越高越接近,有的说是多次拟合选一个最好的
求出来拟合函数的系数矩阵,就要用polyval(ans,x),求出作图的值
ans就等于值了
最后plot(x,ans),就可以做出来了
>> x=0.1:0.01:0.18;x=[x,0.2,0.21,0.23]';
>>y=[42,41.5,45,45.5,45,47.5,49,55,50,55,55.5,60.5]';
>>plot(x,y,"*")
>> hold on
>> polyfit(x,y,2)
ans =
157.9276 88.9683 31.0015
>> polyval(ans,x)
ans =
41.4776
42.6990
43.9519
45.2364
46.5525
47.9001
49.2794
50.6902
52.1327
55.1123
56.6495
59.8186
>> plot(x,ans)
>>
多元线性回归
regress(y,x)
[b,bint,r,rint,stats]=regress(y,x)
[…]=regress(y,x,alpha)
因变量y和自变量x进行多元线性回归
b是回归系数的最小二乘估计
bint回归系数 b的95%置信度 的置信区间
r残差
rint为r的残差
stats检测统计量,第一值为回归方程置信度,第二值为F统计量,第三值为与F统计量对应的p值。如果F很大p很小,说明回归系数不为0
alpha是置信水平
注意,计算stats是x矩阵要包含一个全是1的列
>> a=ones(length(x),1)
a =
1
1
1
1
1
1
1
1
1
1
1
1
>> x=[x,a]
x =
0.1000 1.0000
0.1100 1.0000
0.1200 1.0000
0.1300 1.0000
0.1400 1.0000
0.1500 1.0000
0.1600 1.0000
0.1700 1.0000
0.1800 1.0000
0.2000 1.0000
0.2100 1.0000
0.2300 1.0000
>> [b,bint,r,rint,stats]=regress(y,x)
b =
%系数估计值
140.6194
27.0269
bint =
%系数置信边界的上限和下限
111.7842 169.4546
22.3226 31.7313
r =
%残差
0.9111
-0.9951
1.0987
0.1925
-1.7136
-0.6198
-0.5260
4.0678
-2.3384
-0.1508
-1.0570
1.1306
rint =
%诊断离群值的区间
-2.6237 4.4459
-4.6583 2.6682
-2.6591 4.8566
-3.7345 4.1196
-5.4843 2.0570
-4.6102 3.3705
-4.5319 3.4799
1.4853 6.6503
-5.8953 1.2184
-3.9641 3.6625
-4.6667 2.5527
-2.1235 4.3848
stats =
0.9219 118.0670 0.0000 3.1095
%stats包含4个参数的向量,分别是R^2,F统计量,显著性P值,模型误差的方差
%R是衡量y与x的相关程度的指标,称为相关系数
%R越大,x与y关系越密切.通常R大于0.9才认为相关关系成立.
%F是一统计指标
%p是与F对应的概率,当p<0.05时,回归模型成立.
>> rcoplot(r,rint)
>> x=x(:,1)
x =
0.1000
0.1100
0.1200
0.1300
0.1400
0.1500
0.1600
0.1700
0.1800
0.2000
0.2100
0.2300
>> polyval(b,x)
ans =
41.0889
42.4951
43.9013
45.3075
46.7136
48.1198
49.5260
50.9322
52.3384
55.1508
56.5570
59.3694
>> plot(x,ans)
>> hold on
>> plot(x,y,"*")