天天看点

matlab一元线性回归及多元线性回归方程

1、案例

%%1、bint表示回归系数区间估计可参考http://www.360doc.com/content/11/0801/20/2537127_137246007.shtml
%2、r表示残差
%3、rint代表置信区间
%4、stas表示用于检验回归模型的统计量,有三个数值 r^2 F 与F对应的概率P 例如p<0.05 残差95%
%   r^2越接近于1,回归方程越显著  
%alpha表示显著水平

%%
x=[143 144 145 147 148 150 153 154 155 156 157 158 159 160 161 162]';
X=[ones(16,1),x];
Y=[87 85 88 91 92 90 93 95 98 98 97 95 97 99 100 102]';
[b,bint,r,rint,stats]=regress(Y,X)
t=1:16;
%%
figure(1);
y_fitting=X(t,:)*b;
plot(t,y_fitting,'r-',  t,Y(t,:),'b-', t,abs(y_fitting-Y(t,:)),'k-');
legend('红--拟合值','蓝--实际值','黑--误差值');
text(3,50,strcat('相关系数R=',num2str(stats(1,1 ))));
text(7,50,strcat('F=',num2str(stats(1,2))));
text(9,50,strcat('P=',num2str(stats(1,3 ))));
nhfcs1=strcat('拟合方程式',num2str(b(1,1)),'+',num2str(b(2,1)),'*X1');
text(11,50,nhfcs1);
%
%功能 在当前轴中创建text对象。函数text是创建text图形句柄的低级函数。可用该函数在图形中指定的位置上显示字符串。

%用法 text(x,y,'string')在图形中指定的位置(x,y)上显示字符串string

%text(x,y,z,'string') 在三维图形空间中的指定位置(x,y,z)上显示字符串string
%
title('线性回归曲线拟合结果');
xlabel('样本点');
ylabel('分数');

%%
figure(2);
ul=rint(:,1);
I1=rint(:,2);
plot(t,I1,'b-', t,r,'R*',  t, ul,'g-');
legend('蓝色--残差95%置信区间上限','红--残差值','绿--残差95%置信区间下限');
xlabel('样本值');
ylabel('残差值');
figure(3)
rcoplot(r,rint);   %残差分析,作残差图      
matlab一元线性回归及多元线性回归方程
matlab一元线性回归及多元线性回归方程
matlab一元线性回归及多元线性回归方程
matlab一元线性回归及多元线性回归方程
matlab一元线性回归及多元线性回归方程
matlab一元线性回归及多元线性回归方程

2、残差图(Residual Plots)

我们可以用残差图来估计观察或预测到的误差error(残差residuals)与随机误差(stochastic error)是否一致。用一个丢骰子的例子最好理解了。当你丢出去一个六面的骰子时,你不应该能够预测得到哪面点数向上。然而,你却可以评估在一系列投掷后,正面向上的数字是否遵循一个随机模式,你自己心中就会想象出一个随机散布的残差图。如果,有人背着你对骰子做了点手脚,让六点更频繁的出现向上,这时你心中的残差图看上去就似乎有规律可循,从而不得不修改心中的模型,让你狐疑骰子一定有问题。

相同的原则也适用于回归模型。你不应该能够预测任何给定的观察或预测结果的错误(或者说差别)。你需要确定残差是否与随机误差相互呈现一致性,就像丢骰子一样,残差若整体呈现“很古怪”的模式,你就需要回头修改你的回归模型了。上面“古怪”究竟怎么看呢?看下文。

%clc
%clear
%%
%目标函数:y=Ax1^2+Bx2^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可用于画散点图a
hold on
%%
%拟合,三维视图显示  
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轴的名称
hold on



%%
figure(2)
rcoplot(r,rint);   %残差分析,作残差图      
matlab一元线性回归及多元线性回归方程
matlab一元线性回归及多元线性回归方程
matlab一元线性回归及多元线性回归方程
matlab一元线性回归及多元线性回归方程
matlab一元线性回归及多元线性回归方程

​​https://zhuanlan.zhihu.com/p/20700731​​

matlab一元线性回归及多元线性回归方程

3、回归值与残差的残差图编辑

为检验建立的多元线性回归模型是否合适,可以通过回归值与残差的散点图来检验。其方法是画出回归值与普通残差的散点图,或者画出回归值与标准残差的散点图,其图形可能会出现下面三种情况(如图1所示):

图1(a)

matlab一元线性回归及多元线性回归方程

图1(b)

matlab一元线性回归及多元线性回归方程

对于图1(a)的情况,不论回归值的大小,而残差(或)具有相同的分布,并满足模型的各假设条件;对于图1(b)的情况,表示回归值的大小与残差的波动大小有关系,即等方差性的假设有问题;对于图1©,表示线性模型不合适的样本,可能有异常值存在。

对于图1(a),如果大部分点都落在中间(b)部分,而只有少数几个点落在外边,则这些点对应的样本,可能有异常值存在。