声明
本文系本人原创,转载请注明出处。
简介
拟合曲线,在matlab中有polyfit函数,有cftool工具,对于多项式,指数,对数都有很好的拟合,但是对于多个参数的拟合,比如x1,x2……用什么函数呢?
就会用到今天介绍的regress函数。
regress函数
调用格式
b = regress(y,X)
[b,bint] = regress(y,X)
[b,bint,r] = regress(y,X)
[b,bint,r,rint] = regress(y,X)
[b,bint,r,rint,stats] = regress(y,X)
[...] = regress(y,X,alpha)
参数解释
B:回归系数,是个向量(“the vector B of regression coefficients in the linear model Y = X*B”)。
BINT:回归系数的区间估计(“a matrix BINT of 95% confidence intervals for B”)。
R:残差( “a vector R of residuals”)。
RINT:置信区间(“a matrix RINT of intervals that can be used to diagnose outliers”)。
STATS:用于检验回归模型的统计量。有4个数值:判定系数R^2,F统计量观测值,检验的p的值,误差方差的估计。
ALPHA:显著性水平(缺少时为默认值0.05)。
函数示例
参数都是matlab自带变量,放进去即可运行。
clc;clear all;
load carsmall
x1 = Weight;
x2 = Horsepower; % Contains NaN data
y = MPG;
X = [ones(size(x1)) x1 x2 x1.*x2];%创建常数,创建x1*x2矩阵
[b,bint,r,rint,stats] = regress(y,X)%拟合
scatter3(x1,x2,y,'filled')%散点图
hold on
x1fit = min(x1):100:max(x1);%网格范围
x2fit = min(x2):10:max(x2);
[X1FIT,X2FIT] = meshgrid(x1fit,x2fit);%创建网格
YFIT = b(1) + b(2)*X1FIT + b(3)*X2FIT + b(4)*X1FIT.*X2FIT;%%代入已经求得的参数,拟合函数式
mesh(X1FIT,X2FIT,YFIT);%画图
xlabel('Weight')
ylabel('Horsepower')
zlabel('MPG')
view(50,10)%改变角度
结果
系数b:
60.7103608050491
-0.0101535475890010
-0.188206440954575
3.84948273160185e-05
bint:
51.389844577376670.0308770327216
-0.0132913573307914-0.00701573784721061
-0.292829970434399-0.0835829114747502
1.25893736802855e-056.44002809517514e-05
stats:
0.774173440544747
101.702587411461
1.17235917863432e-28
15.2363354389984
分析
b分别为各参量的系数
即A*x1+B*x2+C中的A,B,C
stats中,第一个为相关系数,越大说明相关性越大,第三个为P值,值越小,模型可靠性越大。p值很小(P<0.001),说明拟合模型有效。
结果图
注意
Y与[X]行数相同,列数不同。
可拟合多个变量,原理是最小二乘法。
参考文章
xxin blog , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明Matlab regress函数拟合多个变量分析!