MATLAB解一元線性回歸問題


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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM