[Matlab]篇—-回归分析Matlab命令(regress篇)
一、简介
最近在做回归分析方面的东西,网上查阅相关资料,通过实际调试,对调试结果进行总结。
回归分析法指利用数据统计原理,对大量统计数据进行数学处理,并确定因变量与某些自变量的相关关系,建立一个相关性较好的回归方程(函数表达式),并加以外推,用于预测今后的因变量的变化的分析方法。根据因变量和自变量的个数分为:一元回归分析和多元回归分析;根据因变量和自变量的函数表达式分为:线性回归分析和非线性回归分析。
分类:
1、根据因变量和自变量的个数来分类:一元回归分析和多元回归分析;
2、根据因变量和自变量的函数表达式来分类:线性回归分析和非线性回归分析。
主要解决的问题:
回归分析法主要解决的问题:
1、确定变量之间是否存在相关关系,若存在,则找出数学表达式;
2、根据一个或几个变量的值,预测或控制另一个或几个变量的值,且要估计这种控制或预测可以达到何种精确度。
回归分析法的步骤
回归分析法的步骤如下:
1、根据自变量与因变量的现有数据以及关系,初步设定回归方程;
2、求出合理的回归系数;
3、进行相关性检验,确定相关系数;
4、在符合相关性要求后,即可根据已得的回归方程与具体条件相结合,来确定事物的未来状况,并计算预测值的置信区间。
有效性和注意事项
有效性:用回归分析法进行预测首先要对各个自变量做出预测。若各个自变量可以由人工控制或易于预测,而且回归方程也较为符合实际,则应用回归预测是有效的,否则就很难应用;
注意事项:为使回归方程较能符合实际,首先应尽可能定性判断自变量的可能种类和个数,并在观察事物发展规律的基础上定性判断回归方程的可能类型;其次,力求掌握较充分的高质量统计数据,再运用统计方法,利用数学工具和相关软件从定量方面计算或改进定性判断。
二、regress命令
用于一元及多元线性回归,本质上是最小二乘法。在matlab命令行中输入help regress,即可得到命令相关信息:
regress - Multiple linear regressionThis MATLAB function returns a p-by-1 vector b of coefficient estimates for amultilinear regression of the responses in y on the predictors in X.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)。
三、样例
目标函数:y=Ax1^2+Bx1^2+Cx1+Dx2+Ex1*x2+F (这是一个二次函数,两个变量,大写的字母是常数)
样例代码:
clc
clear
%目标函数:y=Ax1^2+Bx1^2+Cx1+Dx2+Ex1*x2+F (这是一个二次函数,两个变量,大写的字母是常数)
%导入数据
y=[7613.51 7850.91 8381.86 9142.81 10813.6 8631.43 8124.94 9429.79 10230.81 10163.61 9737.56 8561.06 7781.82 7110.97]';
x1=[7666 7704 8148 8571 8679 7704 6471 5870 5289 3815 3335 2927 2758 2591]';
x2=[16.22 16.85 17.93 17.28 17.23 17 19 18.22 16.3 13.37 11.62 10.36 9.83 9.25]';
X=[ones(size(y)) x1.^2 x2.^2 x1 x2 x1.*x2];
%开始分析
[b,bint,r,rint,stats] = regress(y,X);
scatter3(x1,x2,y,'filled') %scatter可用于画散点图
结果输出:
b =1.0e+04 *-1.3539354502677850.000000089381408-0.005811190715467-0.0006054277895450.479983626458515-0.000037869040292bint =1.0e+04 *-2.621944842897244 -0.0859260576383260.000000034253753 0.000000144509063-0.027588831662545 0.015966450231610-0.001309493882546 0.0000986383034550.119564693553895 0.840402559363136-0.000105954336341 0.000030216255756r =1.0e+02 *-4.397667358983981-2.361417286008691-1.434643909138104-5.9042039742794997.5117017738451435.570806699070745-2.4478613418164880.4946220574751356.376995507987686-6.7895207655345802.7443354846335751.578124015815665-0.803533566911919-0.137737336155578rint =1.0e+03 *-1.200286938109502 0.320753466312705-1.396750443678483 0.924466986476745-0.899861317279054 0.612932535451433-1.544523004301250 0.3636822094453510.127290215500605 1.375050139268424-0.505983092518450 1.620144432332599-1.145989115179227 0.656416846815929-0.952086756810051 1.051011168305078-0.372857973848901 1.648257075446438-1.420201937940137 0.062297784833221-0.889572649262705 1.438439746189421-1.057885008292926 1.373509811456059-1.241713948436468 1.081007235054084-0.992490338296236 0.964942871065120stats =1.0e+05 *0.000008444011951 0.000086828553270 0.000000043344434 3.162249735298973
b为对应的参数 b(1)为F(最后那个常数项) ,b(2)为A(第一个参数),b(3)为B,b(4)为C,b(4)为D,b(5)为E。bint为b的95%置信区间。 stats的第三个参数为F检测的P值,p值很小(P<0.001),说明拟合模型有效。
输出散点图:
对散点数据进行拟合,代码如下:
%拟合,三维视图显示
hold on %不要清楚计算数据,在刚刚那副散点图上接着画
x1fit = min(x1):100:max(x1); %设置x1的数据间隔
x2fit = min(x2):1:max(x2); %设置x2的数据间隔
[X1FIT,X2FIT] = meshgrid(x1fit,x2fit); %生成一个二维网格平面,也可以说生成X1FIT,X2FIT的坐标
YFIT=b(1)+b(2)*X1FIT.^2+b(3)*X2FIT.^2+b(4)*X1FIT+b(5)*X2FIT+b(6)*X1FIT.*X2FIT; %代入已经求得的参数,拟合函数式
mesh(X1FIT,X2FIT,YFIT) %X1FIT,X2FIT是网格坐标矩阵,YFIT是网格点上的高度矩阵
view(10,10) %改变角度观看已存在的三维图,第一个10表示方位角,第二个表示俯视角。 %方位角相当于球坐标中的经度,俯视角相当于球坐标中的纬度
xlabel('x1') %设置X轴的名称
ylabel('x2') %设置y轴的名称
zlabel('y') %设置z轴的名称
拟合效果图:
参考文献:
http://blog.csdn.net/guzhenping/article/details/43314333