一元线性回归模型对异常值比较敏感,应考虑在生成方程前对数据进行预处理。
对于回归分析的相关定义,请参考:
直接使用regress函数或polyfit函数都可直接获得表示预测变量与响应变量线性关系的方程的系数
2.1 regress函数
函数说明:多元线性回归函数
详细说明请参考:
https://ww2.mathworks.cn/help/stats/regress.html
[b,bint,r,rint,status] = regress(Y,X,alpha);
等式右边:
等式左边:
参数说明:
使用示例:
% 女子身高和腿长数据 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)
函数说明:多项式曲线拟合函数
详细说明请参考:
https://ww2.mathworks.cn/help/matlab/ref/polyfit.html
常用方式:
[p,S] = polyfit(X,Y,degree);
等式右边:
等式左边:
参数说明:
使用示例:
% 女子身高和腿长数据 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‘);
等式右边:
等式左边:
说明:
预测区间和置信区间的相关概念请参考百度百科和:
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 = reshape(height,1,length(height)); 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)
等式右边:
等式左边:
使用示例:
% 女子身高和腿长数据 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);
使用示例:
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;
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;
% 女子身高和腿长数据 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
原文:https://www.cnblogs.com/GjqDream/p/12609233.html