• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

MATLAB解一元线性回归问题

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

1. 注意事项

  一元线性回归模型对异常值比较敏感,应考虑在生成方程前对数据进行预处理。

  对于回归分析的相关定义,请参考:

  https://support.minitab.com/zh-cn/minitab/19/help-and-how-to/modeling-statistics/regression/supporting-topics/basics/types-of-regression-analyses/  

 

2. MATLAB中的相关函数

  直接使用regress函数或polyfit函数都可直接获得表示预测变量与响应变量线性关系的方程的系数

2.1 regress函数

函数说明:多元线性回归函数

详细说明请参考:

  https://ww2.mathworks.cn/help/stats/regress.html

常用方式:

  [b,bint,r,rint,status] = regress(Y,X,alpha);

等式右边:

  • Y——响应变量数据( n×1 数值向量 )
  • X——预测变量数据( n×p 数值矩阵。X 的行对应于各个观测值,列对应于预测变量 )
  • alpha——显著性水平

等式左边:

  • b——系数估计值( p×1 向量,其中 p 是 X 中预测变量的数目 )
  • bint——系数估计值的置信区间 ( 置信边界下限和置信边界上限 )( p×2 矩阵,其中 p 是 X 中预测变量的数目 )
  • r——残差( p×1 向量,其中 p 是 X 中预测变量的数目 )
  • rint——残差的置信区间( 诊断离群值的区间 )( p×2 矩阵,其中 p 是 X 中预测变量的数目 )

参数说明:

  • 如果status中的第一个参数R^2接近于1且第三个参数P值小于0.05,则响应Y和X中的预测变量之间存在显著的线性回归关系
  • 如果观测值 i 的 rint(i,:) 区间不包含零,即表明存在离群值

使用示例:

% 女子身高和腿长数据
height = [143;145;146;147;149;150;153;154;155;156;157;158;159;160;162;164];
leg_length = [88;85;88;91;92;93;93;95;96;98;97;96;98;99;100;102];
% 使用身高预测腿长(X是固定格式)
X=[height,ones(length(height),1)];
Y=leg_length;

alpha = 0.05;
% 注意regress函数中的预测变量和响应变量必须是列向量 [b,bint,r,rint,status] = regress(Y,X,alpha)

 

2.2 polyfit函数

函数说明:多项式曲线拟合函数

详细说明请参考:

  https://ww2.mathworks.cn/help/matlab/ref/polyfit.html

常用方式:

[p,S] = polyfit(X,Y,degree);

等式右边:

  • X——预测变量数据( 列向量 )
  • Y——响应变量数据( 列向量 )
  • degree——多项式p的次数( 多项式拟合的次数 )( >0 )

等式左边:

  • p——最小二乘拟合多项式系数( 长度为 n+1,包含按降幂排列的多项式系数,最高幂为 n )
  • S——误差估计结构体

参数说明:

使用示例:

% 女子身高和腿长数据
height = [143;145;146;147;149;150;153;154;155;156;157;158;159;160;162;164];
leg_length = [88;85;88;91;92;93;93;95;96;98;97;96;98;99;100;102];

degree = 1;
[p,S] = polyfit(height,leg_length,degree);

 

2.3 polyconf函数

函数说明:计算多项式的置信区间函数

详细说明请参考:

  https://ww2.mathworks.cn/help/stats/polyconf.html

常用方式:

[Y1,DELTA1] = polyconf(p,xdata,S,\'predopt\',\'observation\');

[Y2,DELTA2] = polyconf(p,xdata,S,\'alpha\',alpha,\'predopt\',\'curve\');

等式右边:

  • p——最小二乘拟合多项式系数
  • xdata——预测变量数据( 列向量 )
  • S——误差估计结构体
  • \'predopt\'—— \'observation\' (默认值)用于计算X值处的新观测值的预测区间,或 \'curve\' 用于计算X值处的拟合值的置信区间

等式左边:

  • Y——在 x 中的每个点处计算多项式 p 所得的新观测值( 拟合值 )
  • DELTA——当输入参数 \'predopt\' 的值为 \'observation\' 时,得到的是用于计算X值处的新观测值的预测区间;当输入参数 \'predopt\' 的值为 \'curve\' 时,得到的是用于计算X值处的拟合值的置信区间

说明:

预测区间和置信区间的相关概念请参考百度百科和:

  https://www.zhihu.com/question/263893098

使用示例:

% 女子身高和腿长数据
height = [143;145;146;147;149;150;153;154;155;156;157;158;159;160;162;164];
leg_length = [88;85;88;91;92;93;93;95;96;98;97;96;98;99;100;102];
% xdata将预测变量以列向量的形式表示
xdata = reshape(height,[length(height),1]); alpha = 0.05; % 设定多项式的次数 degree = 1; % 多项式曲线拟合a=polyfit(x,y,n): x是预测变量,y是响应变量,a是次数为n的多项式的系数 [p,S] = polyfit(height,leg_length,degree); % 输出S(误差估计结构体)给出Y的95%预测区间Y±DELTA [Y1,DELTA1] = polyconf(p,xdata,S,\'alpha\',alpha,\'predopt\',\'observation\'); % 输出S(误差估计结构体)给出Y的95%置信区间Y±DELTA [Y2,DELTA2] = polyconf(p,xdata,S,\'alpha\',alpha,\'predopt\',\'curve\');

 

2.4 polyval函数

函数说明:多项式计算函数

详细说明请参考:

  https://ww2.mathworks.cn/help/matlab/ref/polyval.html#d120e898668

常用方式:

[y,delta] = polyval(p,x,S)

等式右边:

  • p——最小二乘拟合多项式系数( 长度为 n+1,包含按降幂排列的多项式系数,最高幂为 n )
  • x——预测变量数据( 列向量 )
  • S——误差估计结构体

等式左边:

  • y——在 x 中的每个点处计算多项式 p 所得的结果
  • delta——预测的标准误差,以标量形式返回。通常,区间 y ± Δ 对应于大型样本的未来观测值约 68% 的预测区间,y ± 2Δ 对应于约 95% 的预测区间

使用示例:

% 女子身高和腿长数据
height = [143;145;146;147;149;150;153;154;155;156;157;158;159;160;162;164];
leg_length = [88;85;88;91;92;93;93;95;96;98;97;96;98;99;100;102];

% 设定多项式的次数
degree = 1;
[p,S] = polyfit(height,leg_length,degree);
% 多项式曲线拟合的响应值数组
[preresult,delta]=polyval(p,height,S);

 

3. 散点图+趋势线+95%预测区间 或 95%置信区间

使用示例:

% 输出S(误差估计结构体)给出Y的95%预测区间Y±DELTA
[Y1,DELTA1] = polyconf(p,xdata,S,\'alpha\',alpha,\'predopt\',\'observation\');
hold on; plot(height,leg_length,\'k+\',height,preresult,\'r\'); % 95%预测区间 plot(xdata,Y1+DELTA1,\'b--\'); plot(xdata,Y1-DELTA1,\'b--\'); legend(\'Data\',\'Linear Fit\',\'95% Prediction Interval\'); xlabel(\'身高\'); ylabel(\'腿长\'); hold off;
% 输出S(误差估计结构体)给出Y的95%置信区间Y±DELTA
[Y2,DELTA2] = polyconf(p,xdata,S,\'alpha\',alpha,\'predopt\',\'curve\');
hold on; plot(height,leg_length,\'k+\',height,preresult,\'r\'); % 95%置信区间 plot(xdata,Y2+DELTA2,\'b--\'); plot(xdata,Y2-DELTA2,\'b--\'); legend(\'Data\',\'Linear Fit\',\'95% Confidence Interval\'); xlabel(\'身高\'); ylabel(\'腿长\'); hold off;

 

4. 残差图

% 女子身高和腿长数据
height = [143;145;146;147;149;150;153;154;155;156;157;158;159;160;162;164];
leg_length = [88;85;88;91;92;93;93;95;96;98;97;96;98;99;100;102];
% 使用身高预测腿长(X是固定格式)
X=[height,ones(length(height),1)];
Y=leg_length;

alpha = 0.05;
[b,bint,r,rint,status] = regress(Y,X,alpha);

% 通过计算不包含 0 的残差区间 rint 来诊断离群值。
contain0 = (rint(:,1)<0 & rint(:,2)>0);
idx = find(contain0==false);

hold on
scatter(Y,r);
% 填充离群值对应的点
scatter(Y(idx),r(idx),\'b\',\'filled\');
xlabel(\'腿长\');
ylabel(\'残差\');
hold off

 

 

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap