[SAS]迴歸分析 — 模型挑選 Regression feature selection

by wenwu
0 comment

[SAS]迴歸分析 — 模型挑選 Regression feature selection

逐步挑選 stepwise \ 向前選取 foreward\ 向後選取 backward

前一篇的 [SAS]線性迴歸 linear regression 介紹了線性迴歸的 基本統計假設 和會需要用到的統計檢定,並且用一個簡單的例子來示範這些基礎概念。

但是當我們有多個自變項(X)的時候,該如何挑選適合的自變項呢?
本篇要介紹三種挑選自變項的方法,分別為 逐步挑選 stepwise \ 向前選取 foreward\ 向後選取 backward

  • 向前選取 (foreward) : 向前選取基本上就是自變項一個一個挑選至模型中。從所有的自變項中,挑選最顯著的優先進入模型中,直到所有顯著的自變項都在模型裡面。(不顯著的自變項不挑選)
  • 向後選取 (backward) : 向後選取和向前選取相反。首先是將所有的自變項都選至模型中,再一步一步篩選最顯著的變數,一個一個從模型中挑選出來,直到所有在模型中的自變項都是顯著的。
  • 逐步挑選 (stepwise) : 前面的兩種方法都是無法逆回的,就是挑選(or 挑出來)到模型中,確定整體模型顯著之後,就不會再移除了。
    而逐步挑選的方法比較像前兩者的總合體。一開始像向前選取一樣,但是當A自變項選到模型中,若之後再挑選B自變項,可能所有的自變項中 A是最不顯著的,那就會將A 離開模型(這部分像向後選取)。來來回回,一直挑選直到沒有自變項加入(or移除)會使整體模型更好。

逐步挑選 (stepwise) :

最常使用的方法就是stepwise,可能相較於其他兩種方法,stepwise是可逆的,如果選到不好的自變項,可以再刪除。而為什麼有些自變項一開始的顯著的效果較佳,但在後面反而被刪除呢? 
原因是不同的自變項之間可能有相關,而加入其他的自變項之後,第一個自變項反而不適合現在這個模型了,所以就把他刪除。

現在就用SAS 來示範 stepwise ,資料使用上一篇提到的成績 (在這裡) 。
程式加上 selection=stepwise

proc reg data=reg;
model y=x1 x2 x3 x4 x5 /CLB selection=stepwise; 
run;

Step 1 第一步挑選的自變項為X4,X4加入的 R² = 0.6810 , 現在只有一個自變項, 迴歸模型的顯著性檢定 p-value <0.0001 ,表示效果不錯。

Step 2 再來挑選的自變項為X5,X5加入的 R² = 0.7620 ,相較上一步的R² 多了 0.081 ,解釋的變異有增加,代表加了X5至模型中效果更好
迴歸模型的顯著性檢定 p-value <0.0001 ,看到個別迴歸係數的邊際檢定 X4/X5 的 p-value = 0.0080/0.0555 , 雖然 X5 的沒有小於0.05 ,但是值很靠近,並且 R² 有增加,所以保留X5在模型中。

這時所有留在模型中的變數滿足停留允許水準0.15,並且模型外的所有變數不滿足進入允許水準,因此篩選過程結束。

可以寫出模型為 : 
Y= -19.947+0.475* X4+0.452* X5

最後會有一張總結的table (Summary of Stepwise Selection),可以看到每個自變項加入(or刪除)的順序/R²/Partial R²(就是R²的差距)/F value / p-value 等等。

最後附上output的圖,如果不知道怎麼解讀的話,可以回顧上一篇

比較可惜的是這組資料剛好沒有刪除任何的自變項(不然我也是很樂意講解的),接下來會介紹 foreward\ backward 。


向前選取 (foreward) :

我們使用相同的資料跑 foreward

proc reg data=reg;
model y=x1 x2 x3 x4 x5 /CLB  selection=foreward; 
run;

Step 1 第一步挑選的自變項為X4,和stepwise 的第一步相同。X4加入的 R² = 0.6810 , 現在只有一個自變項, 迴歸模型的顯著性檢定 p-value <0.0001 ,表示效果不錯。

Step 2 再來挑選的自變項為X5,X5加入的 R² = 0.7620 ,相較上一部的R² 多了 0.081 ,解釋的變異有增加,代表加了X5至模型中效果更好
迴歸模型的顯著性檢定 p-value <0.0001 ,看到個別迴歸係數的邊際檢定 X4/X5 的 p-value = 0.0080/0.0555 , 雖然 X5 的沒有小於0.05 ,但是值很靠近,並且 R² 有增加,所以保留X5在模型中。

Step 3 前面兩個步驟都與stepwise一樣,而在第三步中foreward再挑選了一個自變項X1 。X1加入的R² = 0.7893 ,相較上一步的R² 多了 0.0273 ,解釋的變異有增加,但是比之前少一點。
迴歸模型的顯著性檢定 p-value =0.0002,看到個別迴歸係數的邊際檢定 X1/X4/X5 的 p-value = 0.2367/0.0130/0.0455。

沒有其他自變項符合進入模型的0.5顯著水準,所以在foreward 選了 X1/X4/X5 進入模型。

可以寫出模型為 : 
Y= -25.72+0.403*X1+0.441* X4+0.471* X5


向後選取 (backward) :

最後示範的是backward

proc reg data=reg;
model y=x1 x2 x3 x4 x5 /CLB  selection=backward; 
run;

在篩選前,需要觀查每個自變項的顯著性如何? SAS 很貼心幫我們印出了step0

Step 0 可以看到假設所有的變項都進入模型的話 R²=0.8005 , 迴歸模型的顯著性=0.0028。個別迴歸係數的邊際檢定X1~X5=0.2363/0.6092/0.7141
/0.0236/0.0613 。效果最差的是X3,所以第一步會刪掉X3。

Step 1 當X3移除了之後, R² = 0.7976 ,迴歸模型的顯著性=0.0008 (比前一個好)。個別迴歸係數的邊際檢定最差的是X2 , p-value = 0.5138,下一步會移除X2。

Step 2 當X2移除了之後, R² = 0.7893 ,迴歸模型的顯著性=0.0002 (比前一個好)。個別迴歸係數的邊際檢定最差的是X1 , p-value = 0.2367,下一步會移除X1。

Step 3 當X1移除了之後, R² = 0.7620 ,迴歸模型的顯著性<0.0001 (比前一個好),X4 & X5 個別迴歸係數的邊際檢定為0.0080/0.0555。
其實就模型的效果 R² = 0.7620 並且 p-value<0.0001,已經很不錯了。

模型中所剩下的所有自變項都有達到0.1000顯著水準,所以在backward 挑選結束。將X1/X2/X3挑出模型,只剩下X4/X5。

可以寫出模型為 : 
Y= -19.95+0.475* X4+0.452* X5

最後一張表為沒有挑進模型的變數(Summary of Backward Elimination)


該選哪個模型好呢?

三種挑選模型的方法都講完了,但是逐步挑選 stepwise \ 向前選取 foreward\ 向後選取 backward 挑選出代表的自變項不盡相同,我們又該怎麼選呢?

其中stepwise 和 backward 都選了X4/X5 ,而foreward 選了X1/X4/X5。而三種模型挑選的變數,其實就只是在”統計上”具有意義,”實際上”我們可以觀察變數的關係,找出重要的因子加入。

在選擇模型時沒有絕對的對錯,若是 X3 (文法成績)對於 Y (閱讀測驗成績)非常的重要,而整體模型的效果也不差,最後也可以挑選X3進入模型。

沒有最好的模型,只有最適合的模型

希望大家都找到最適合資料的模型。

Related Articles

發表迴響