「線性/非線性回歸分析Matlab算例」
一元線性回歸分析
% 一元回歸x=[1097 1284 1502 1394 1303 1555 1917 2051 2111 2286 2311 2003 2435 2625 2948 3055 3372];%自變量時間序列數據y=[698 872 988 807 738 1025 1316 1539 1561 1765 1762 1960 1902 2013 2446 2736 2825];%因變量時間序列數據%生成一個17*2 矩陣,其中第1 列元素均為1,作為常數項的自變量X=[ones(size(x')),x'];%調用一元回歸分析函數,自變量X 包含常數項和因變量,b 是回歸參數估計值,%bint是置信區間,r 和rint 分別表示殘差及殘差對應的置信區間。[b,bint,r,rint,stats]=regress(y',X,0.05); fprintf('一元線性回歸模型參數為:\n')bfprintf('回歸模型擬合度係數R2為:\n')R2=stats(1)fprintf('回歸模型顯著性檢驗F統計量為:\n')F=stats(2)fprintf('回歸模型顯著性檢驗P值為:\n')PVAL=stats(3)fprintf('回歸模型在置信度區間下殘差分布圖為:\n')rcoplot(r,rint)一元線性回歸模型參數為:
b =
-479.8659 0.9961
回歸模型擬合度係數R2為:
R2 =
0.9596
回歸模型顯著性檢驗F統計量為:
F =
355.9771
回歸模型顯著性檢驗P值為:
PVAL =
7.3305e-12
回歸模型在置信度區間下殘差分布圖為:
多元線性回歸分析
% 多元回歸分析% 輸入各種因變量數據x1=[5.5 2.5 8 3 3 2.9 8 9 4 6.5 5.5 5 6 5 3.5 8 6 4 7.5 7]';x2=[31 55 67 50 38 71 30 56 42 73 60 44 50 39 55 70 40 50 62 59]';x3=[10 8 12 7 8 12 12 5 8 5 11 12 6 10 10 6 11 11 9 9]';x4=[8 6 9 16 15 17 8 10 4 16 7 12 6 4 4 14 6 8 13 11]';%輸入自變量數據y=[79.3 200.1 163.1 200.1 146.0 177.7 30.9 291.9 160 339.4 159.6 86.3 237.5 107.2 155 201.4 100.2 135.8 223.3 195]';X=[ones(size(x1)),x1,x2,x3,x4];[b,bint,r,rint,stats]=regress(y,X);fprintf('多元線性回歸模型參數為:\n')bfprintf('回歸模型擬合度係數R2為:\n')R2=stats(1)fprintf('回歸模型顯著性檢驗F統計量為:\n')F=stats(2)fprintf('回歸模型顯著性檢驗P值為:\n')PVAL=stats(3)fprintf('回歸模型在置信度區間下殘差分布圖為:\n')rcoplot(r,rint)多元線性回歸模型參數為:
b =
191.9906 -0.7751 3.1718 -19.6849 -0.4494
回歸模型擬合度係數R2為:
R2 =
0.9034
回歸模型顯著性檢驗F統計量為:
F =
35.0555
回歸模型顯著性檢驗P值為:
PVAL =
1.9022e-07
回歸模型在置信度區間下殘差分布圖為:
非線性回歸分析(編碼計算方式)
% 讀入人口數據(1971-2000年)y = [33815 33981 34004 34165 34212 34327 34344 34458 34498 34476 34483 34488 34513 34497 34511 34520 34507 34509 34521 34513 34515 34517 34519 34519 34521 34521 34523 34525 34525 34527]';% 讀入時間變量數據(t=年份-1970)T=[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30]';% (Logisic曲線)線性化處理for t = 1:30, x(t)=exp(-t); %x是行向量,後面使用時要轉成列向量 y(t)=1/y(t,1);end% 計算,並輸出回歸係數Bc=zeros(30,1)+1; %常數項自變量X=[c,x']; fprintf('非線性回歸模型參數為:\n')B=inv(X'*X)*X'*y %inv函數求解矩陣的逆矩陣for i=1:30 z(i)=B(1,1)+B(2,1)*x(i);% 計算回歸擬合值 s(i)=y(i)-sum(y)/30;% 計算離差 w(i)=z(i)-y(i);% 計算誤差 endS=s*s';% 計算離差平方和SQ=w*w';% 回歸誤差平方和QU=S-Q;% 計算回歸平方和U% 計算,並輸出F檢驗值fprintf('回歸模型擬合度係數R2為:\n')R2=U/Sfprintf('回歸模型顯著性檢驗F統計量為:\n')F=(30-2)*U/Q% 計算非線性回歸模型的擬合值for j=1:30, Y(j)=1/(B(1,1)+B(2,1)*exp(-j));endfprintf('非線性回歸模型的擬合曲線(Logisic曲線):\n')plot(T,Y)非線性回歸模型參數為:
B =
1.0e-04 *
0.2902 0.0182
回歸模型擬合度係數R2為:
R2 =
0.6310
回歸模型顯著性檢驗F統計量為:
F =
47.8774
非線性回歸模型的擬合曲線(Logisic曲線):