声明
本文系本人原创,转载请注明出处。
简介
拟合曲线,在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.3898445773766 70.0308770327216
-0.0132913573307914 -0.00701573784721061
-0.292829970434399 -0.0835829114747502
1.25893736802855e-05 6.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]行数相同,列数不同。
可拟合多个变量,原理是最小二乘法。
参考文章
Matlab篇—-常用的回归分析Matlab命令(regress篇)
我的matlab中的regress,运行结果中stats为什么有四项?
http://blog.sina.com.cn/s/blog_618af1950100eyjn.html