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

岁酱吖の 提交于 2020-01-19 05:12:01

%%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); %残差分析,作残差图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
残差图(Residual Plots)
我们可以用残差图来估计观察或预测到的误差error(残差residuals)与随机误差(stochastic error)是否一致。用一个丢骰子的例子最好理解了。当你丢出去一个六面的骰子时,你不应该能够预测得到哪面点数向上。然而,你却可以评估在一系列投掷后,正面向上的数字是否遵循一个随机模式,你自己心中就会想象出一个随机散布的残差图。如果,有人背着你对骰子做了点手脚,让六点更频繁的出现向上,这时你心中的残差图看上去就似乎有规律可循,从而不得不修改心中的模型,让你狐疑骰子一定有问题。
相同的原则也适用于回归模型。你不应该能够预测任何给定的观察或预测结果的错误(或者说差别)。你需要确定残差是否与随机误差相互呈现一致性,就像丢骰子一样,残差若整体呈现“很古怪”的模式,你就需要回头修改你的回归模型了。上面“古怪”究竟怎么看呢?看下文。


%clc
%clear
%%
%目标函数:y=Ax12+Bx22+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)💯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); %残差分析,作残差图
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述


https://zhuanlan.zhihu.com/p/20700731在这里插入图片描述
2回归值与残差的残差图编辑
为检验建立的多元线性回归模型是否合适,可以通过回归值与残差的散点图来检验。其方法是画出回归值与普通残差的散点图,或者画出回归值与标准残差的散点图,其图形可能会出现下面三种情况(如图1所示):

图1(a)在这里插入图片描述

图1(b)在这里插入图片描述

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

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

图1(c)在这里插入图片描述

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!