基於matlab的多元線性迴歸分析

二、多元線性迴歸原理

2.1、數學模型

在社會生活及生產實踐中會經常遇到一種問題,即我們非常關注一個量的變化,而這個量受到另一個或是多個因素的影響,我們想要了解這些因素是如何影響我們最爲關注的這個量的以及這些因素對我們最爲關注的這個量的影響權重分別有多大,知道了這些,我們就可以對該量變化所反映的相關問題做出分析和評價,並對其未來發展趨勢進行預測和控制,這裏就要用到數理統計中一個非常重要而普遍的分析方法,即迴歸分析法。

如果一個因變量y與k個自變量x1,x2,,xkx_{1}, x_{2}, \dots, x_{k}存在線性相關關係,那麼就可以用多元線性迴歸模型
y=a0+a1x1+a2x2++akxk,公式1 y=a_{0}+a_{1} x_{1}+a_{2} x_{2}+\ldots+a_{k} x_{k},\text{公式1}
對其進行描述,其中未知常量a0,a1,,aka_{0}, a_{1}, \dots, a_{k}稱爲迴歸模型係數,若n次抽樣,第ii次抽樣數據爲(yi,x1i,x2i,,xki)\left(y_{i}, x_{1 i}, x_{2 i}, \cdots, x_{k i}\right)那麼就有
{y1=a0+a1x11+a2x21++akxk1+ε1y2=a0+a1x12+a2x22++akxk2+ε2yn=a0+a1x1i+a2x2i++aixki+εn公式2 \left\{\begin{array}{l}y_{1}=a_{0}+a_{1} x_{11}+a_{2} x_{21}+\ldots+a_{k} x_{k1}+\varepsilon_{1} \\ y_{2}=a_{0}+a_{1} x_{12}+a_{2} x_{22}+\ldots+a_{k} x_{k2}+\varepsilon_{2} \\ \vdots \\ y_{n}=a_{0}+a_{1} x_{1 i}+a_{2} x_{2 i}+\ldots+a_{i} x_{ki}+\varepsilon_{n}\end{array}\right.\text{公式2}
其中ε0,ε1,,εn\varepsilon_{0}, \varepsilon_{1}, \ldots, \varepsilon_{n}爲隨機誤差項,迴歸分析的主要任務就是以誤差ε0,ε1,,εn\varepsilon_{0}, \varepsilon_{1}, \ldots, \varepsilon_{n}的平方和最小爲原則,求多元迴歸模型的迴歸係數a0,a1,,aka_{0}, a_{1}, \dots, a_{k}

求解這個方程是要以S=i=1i=nεi2=i=1i=n(a0+a1x1i++akxkiyi)2S=\sum_{i=1}^{i=n} \varepsilon_{i}^{2}=\sum_{i=1}^{i=n}\left(a_{0}+a_{1} x_{1 i}+\dots+a_{k} x_{k i}-y_{i}\right)^{2}爲最小原則,求a0,a1,,aka_{0}, a_{1}, \dots, a_{k}要使得S最小,應該滿足Saj=0,j=0,1,,k\frac{\partial S}{\partial a_{j}}=0, j=0,1,\ldots,k
{i=1i=n2(a0+a1x1i+a2x2i++akxkiyi)=0i=1i=n2(a0+a1x1i+a2x2i++akxkiyi)x1i=0i=1i=n2(a0+a1x1i+a2x2i++akxkiyi)xni=0,公式3 即\left\{\begin{array}{l}\sum_{i=1}^{i=n} 2\left(a_{0}+a_{1} x_{1 i}+a_{2} x_{2 i}+\dots+a_{k} x_{k i}-y_{i}\right)=0 \\ \sum_{i=1}^{i=n} 2\left(a_{0}+a_{1} x_{1 i}+a_{2} x_{2 i}+\dots+a_{k} x_{k i}-y_{i}\right) x_{1 i}=0 \\ \vdots \\ \sum_{i=1}^{i=n} 2\left(a_{0}+a_{1} x_{1 i}+a_{2} x_{2 i}+\dots+a_{k} x_{k i}-y_{i}\right) x_{n i}=0\end{array}\right.,\text{公式3}

{na0+i=1i=nx1ia1++i=1i=nxkiak=i=1i=nyii=1i=nx1ia0+i=1i=nx1i2a1++i=1i=nx11xkiak=i=1i=nx1iyii=1i=nxkia0+i=1i=nx1ixkia1++i=1i=nxki2ak=i=1i=nxkiyi,公式4 有\left\{\begin{array}{l}n a_{0}+\sum_{i=1}^{i=n} x_{1 i} a_{1}+\dots+\sum_{i=1}^{i=n} x_{k i} a_{k}=\sum_{i=1}^{i=n} y_{i} \\ \sum_{i=1}^{i=n} x_{1 i} a_{0}+\sum_{i=1}^{i=n} x_{1 i}^{2} a_{1}+\dots+\sum_{i=1}^{i=n} x_{11} x_{k i} a_{k}=\sum_{i=1}^{i=n} x_{1 i} y_{i} \\ \vdots \\\sum_{i=1}^{i=n} x_{k i} a_{0}+\sum_{i=1}^{i=n} x_{1 i} x_{k i} a_{1}+\dots+\sum_{i=1}^{i=n} x_{k i}^{2} a_{k}=\sum_{i=1}^{i=n} x_{k i} y_{i}\end{array}\right.,\text{公式4}

上式可以寫成形式:Y=XAY=X A

其中:
X=[ni=1i=nx1ii=1i=nxkii=1i=nx1ii=1i=nx1i2i=1nx11xkii=1i=nxkii=1i=nx11xkii=1i=nxki2],Y=[i=1i=nyii=1i=nx1iyii=1i=nx2iyi],A=[a0a1ak] X=\left[\begin{array}{ccc}n & \sum_{i=1}^{i=n} x_{1 i} & \ldots & \sum_{i=1}^{i=n} x_{k i} \\ \sum_{i=1}^{i=n} x_{1 i} & \sum_{i=1}^{i=n} x_{1 i}^{2} & \ldots& \sum_{i=1}^{n} x_{11} x_{k i} \\ \vdots& \vdots & \ldots & \vdots \\ \sum_{i=1}^{i=n} x_{k i} & \sum_{i=1}^{i=n} x_{11} x_{k i} & \ldots & \sum_{i=1}^{i=n} x_{k i}^{2}\end{array}\right], Y=\left[\begin{array}{c}\sum_{i=1}^{i=n} y_{i} \\ \sum_{i=1}^{i=n} x_{1 i} y_{i} \\ \vdots \\\sum_{i=1}^{i=n} x_{2 i} y_{i}\end{array}\right], A=\left[\begin{array}{c}a_{0} \\ a_{1} \\ \vdots\\ a_{k}\end{array}\right]

公式2也可以直接寫成矩陣表達式:Y=XA+EY=X A+E

其中:
Y=[y1y2yn],X=[1x1,1xk,11x1,2xk,21x1,kx2,k],A=[a0a1ak],E=[ε1ε2εn] Y=\left[\begin{array}{l}y_{1} \\ y_{2} \\ \vdots \\ y_{n}\end{array}\right], X=\left[\begin{array}{ccc}1 & x_{1,1} &\ldots & x_{k,1} \\ 1 & x_{1,2} &\ldots& x_{k,2} \\ \vdots & \vdots &\ldots &\vdots & \\ 1 & x_{1,k}&\ldots & x_{2,k}\end{array}\right], A=\left[\begin{array}{l}a_{0} \\ a_{1} \\ \vdots \\ a_{k}\end{array}\right], E=\left[\begin{array}{c}\varepsilon_{1} \\ \varepsilon_{2} \\ \vdots \\ \varepsilon_{n}\end{array}\right]
那麼我們的任務就是求解AA

2.2、案例分析

分析總能耗與其他變量的關係,首先分析其相關性,做相似矩陣分析,如下:

第一步:得出總能耗與那些變量之間的關係,求出相關係數

[Data,str]=xlsread('C:\Users\86188\Desktop\仿真數據\北京參數一百組新.xlsx','sheet1','A1:R101',0.4);% 得到表格中所有數據
Resemblance=corrcoef(Data);                                 % 得到係數相關矩陣
[Row,Col]=size(Resemblance);                                % 得到Resemblance矩陣的行和列
site=[];count=0;                                            % 
for row=1:(Row-1)                                           % 得到總能源與哪些因素有關
    if(abs(Resemblance(row,Col))>0.4)
        disp(['總能源與第' num2str(row) '列' str(row) '相關度較高,相關係數爲 ' num2str(Resemblance(Col,row)) ]);
        count=count+1;                                      % 保存相關變量的數量
        site(count)=row;                                    % 保存相關變量的列地址
    end
end

第二步:得到迴歸係數和置信區間

[Row,Col]=size(Data);                                       % 得到數據矩陣的行和列的大小
ConVariable=zeros(Row,count);                               % 創建一個行相等列指定的矩陣                 
for row=1:count
    ConVariable(:,row)=Data(:,site(row));
end
TotalEnergy=Data(:,Col);                                   % 得到總能源原始數據
IndeVariable=[ones(Row,1),ConVariable];                    % 創建相關變量數組
[b,bint,r,rint,stats]=regress(TotalEnergy,IndeVariable);   % 求迴歸係數的點估計和區間估計、並檢驗迴歸模型

第三步:做殘差分析,得出那些點偏差太大

得出四個點偏差太大,可以考慮去除這四個點

subplot(211);                                                           % 畫殘差圖
rcoplot(r,rint);                                                        % 畫殘差圖

第四步:得出預測模型,用預測模型去和真實值去對比

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-uJ6PN2zt-1587623830400)(C:\Users\86188\Desktop\仿真數據\線性迴歸圖片\改進結果.png)]

NewTotalEnergy=zeros(Row,1);                                            % 預測數據矩陣
for row = 1:Row                                                         % 預測賦值
    NewTotalEnergy(row)=b(1);
    for PaRow=2:(count+1)
        NewTotalEnergy(row)=NewTotalEnergy(row)+b(PaRow)*ConVariable(row,PaRow-1);
    end
end
Loss = 0;                                   % 根據最大斜率和最小效率建立指定長度的損失數據       
for i=1:Row
    Loss = Loss+(TotalEnergy(i)-NewTotalEnergy(i))^2/(2*Row);
end
subplot(212);                                                         % 畫預測和真實圖
number=[1:1:Row];
plot(number,TotalEnergy','r',number,NewTotalEnergy','b');
xlabel('數量序列');ylabel('總能耗');title('總能耗與相關參數散點圖');legend('真實值','預測值')grid on;

第五步:得出模型函數關係
=33374+53041×+32×101×+431× 總能耗=33374 +-53041\times 體型係數 +32\times 面積 -101\times 人口密度 +431\times 內擾電耗

參考文獻

  1. 數學建模與數學試驗
  2. 多元線性迴歸MATLAB實現
  3. 一元線性迴歸模型及其假設條件
  4. [MATLAB]逐步迴歸詳解(stepwise使用指南)
  5. 基於Matlab的數據多元迴歸分析的研究
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章