1. 程式人生 > 實用技巧 >數學建模 A--迴歸模型

數學建模 A--迴歸模型

一、適用範圍

  一個因變數有多個自變數導致

二、建模及改進步驟

  1. 首先畫出每一個變數與因變數之間的散點圖,尋找簡單的關係,比如:線性(y=β01x+ε)、二次函式(y=β01x+β2x2ε)、指數增長模型(y=β1(1-e2x)、Michalis-Menten模型(y=f(x,β)=β1x/(β2+x))(該類方法可以取倒數,進行線性化處理)
  2. 用matlab的regress命令進行迴歸得到迴歸係數並分析結果
    [b,bint,r,rint,stats] = [Y,X,alpha]%b為迴歸係數,bint為迴歸係數的置信區間,r為殘差,stats是檢驗迴歸的評價標準
    

    當迴歸係數的置信區間有0時,表明該係數對因變數不是很重要;stats:R2(可確定的概率值,一般大於95%可用)、F值(分佈表或者有一個命令可查詢)、P值(<α)

  3. 改進時,利用殘差分析法,即畫出 y-y‘ 與各變數的散點圖繼續分析
  4. 發現有互動作用的變數增加乘積項、也可逐步到完全二次項式
  5. 若線性擬合欠佳,則需要考慮非線性模型,它的初值設定為線性迴歸的值
  6. 示性變數的新增---定性上不同處理水平所得到的結果,例如:y =[(β11X2)X1]/[(β22X2)+X1],其中的X2——0、1變數,有則1無則0
  7. D-W檢驗,時間序列中會用到,因為殘差會有自相關性在時間序列中;對殘差的自相關性進行檢驗得到自相關係數,然後各變數變為形如:yt*=yt-ρyt-1
  8. 在面對多變數的情況,可以利用逐步迴歸分析法去捨去變數
  9. 在迴歸過程中,當不再修改模型形式的情況下,剔除異常點,去得到更好的精度

三、具體程式碼及例項

%%%邏輯迴歸
Y = [7613.51 7850.91 8381.86 9142.81 10813.6 8631.43 8124.94 9429.79 10230.81 10163.61 9737.56 8561.06 7781.82 7110.97]';
x = [7666 7704 8148 8571 8679 7704 6471 5870 5289 3815 3335 2927 2758 2591]';
a = size(Y);
a1 = a(1,1);
X = [ones(a1,1),x];
%畫散點圖
scatter(x,Y,'filled')
%迴歸分析
%-----------------------------------
%%%regress
[b,bint,r,rint,stats] = regress(Y,X)
%b:迴歸係數 bint:迴歸係數的區間估計 r:殘差 rint:置信區間 stats:檢驗統計量
%stats:R方、F值、P值
%-----------------------------------
%%%rstool 互動式介面 完全二項式可利用
%rstool(X,Y,'linear')
%-----------------------------------
%%%殘差分析
scatter(x,r,'+')
rcoplot(r,rint)

% 非線性迴歸
clc,clear
xy0 = [8.55 470 300 10
    3.79 285 80 10
    4.82 470 300 120
    0.02 470 80 120
    2.75 470 80 10
    14.39 100 190 10
    2.54 100 80 65
    4.35 470 190 65
    13.00 100 300 54];
x = xy0(:,[2:4]);
y = xy0(:,1);
%構建虛擬函式
huaxue = @(beta,x)(beta(4)*x(:,2)-x(:,3)/beta(5))./(1+beta(1)*x(:,1)+beta(2)*x(:,2)+beta(3)*x(:,3));
beta0 = [0.1,0.05,0.02,1,2]';
%% nlinfit
[beta,r,j] = nlinfit(x,y,huaxue,beta0)
%計算歸回係數的置信區間
betaci = nlparci(beta,r,'jacobian',j)
%y的預測值及置信區間
[yhat,delta] = nlpredci(huaxue,x,beta,r,'jacobian',j)
yy = (beta(4)*x(:,2)-x(:,3)/beta(5))./(1+beta(1)*x(:,1)+beta(2)*x(:,2)+beta(3)*x(:,3));
plot(x,yy-y,'+')