多重共線性的解決方法之——嶺回歸與LASSO


 

 

 

多元線性回歸模型

的最小二乘估計結果為

如果存在較強的共線性,即 中各列向量之間存在較強的相關性,會導致的從而引起對角線上的 值很大

並且不一樣的樣本也會導致參數估計值變化非常大。即參數估計量的方差也增大,對參數的估計會不准確。

因此,是否可以刪除掉一些相關性較強的變量呢?如果p個變量之間具有較強的相關性,那么又應當刪除哪幾個是比較好的呢?

本文介紹兩種方法能夠判斷如何對具有多重共線性的模型進行變量剔除。即嶺回歸和LASSO(注:LASSO是在嶺回歸的基礎上發展的)

 

 

思想:

既然共線性會導致參數估計值變得非常大,那么給最小二乘的目標函數加上基礎上加上一個對 的懲罰函數

最小化新的目標函數的時候便也需要同時考慮到 值的大小,不能過大

在懲罰函數上加上系數k

隨着k增大,共線性的影響將越來越小。在不斷增大懲罰函數系數的過程中,畫下估計參數(k)的變化情況,即為嶺跡。

通過嶺跡的形狀來判斷我們是否要剔除掉該參數(例如:嶺跡波動很大,說明該變量參數有共線性)。

步驟:

  1. 對數據做標准化,從而方便以后對(k)的嶺跡的比較,否則不同變量的參數大小沒有比較性。
  2. 構建懲罰函數,對不同的k,畫出嶺跡圖。
  3. 根據嶺跡圖,選擇剔除掉哪些變量。

嶺回歸的目標函數

式中,t為 的函數。越大,t越小(這里就是k)

如上圖中,相切點便是嶺回歸得出來的解。是嶺回歸的幾何意義。

可以看出,嶺回歸就是要控制 的變化范圍,弱化共線性對大小的影響。

解得的嶺回歸的估計結果為:

嶺回歸的性質

    由嶺回歸的目標函數可以看出,懲罰函數的系數 (或者k)越大,目標函數中懲罰函數所占的重要性越高。

從而估計參數 也就越小了。我們稱系數 (或者k)為嶺參數。因為嶺參數不是唯一的,所以我們得到的嶺回歸估計 實際是回歸參數 的一個估計族。例如下表中:

嶺跡圖

    將上表中回歸估計參數與嶺回歸參數k之間的變化關系用一張圖來表示,便是嶺跡圖

    

    當不存在奇異性是,嶺跡應該是穩定地逐漸趨於0

當存在奇異性時,由嶺回歸的參數估計結果可以看出來,剛開始k不夠大時,奇異性並沒有得到太大的改變,所以隨着k的變化,回歸的估計參數震動很大,當k足夠大時,奇異性的影響逐漸減少,從而估計參數的值變的逐漸穩定。

嶺參數選擇的一般原則

  1. 各回歸系數的嶺估計基本穩定
  2. 不存在有明顯不符合常理的回歸參數,其嶺估計的符號應當要變得合理
  3. 回歸系數沒有不合實際意義的絕對值
  4. 殘差平方和增大不多

用嶺回歸選擇變量

  1. 由於嶺回歸是已經變量標准化之后的回歸,因此嶺回歸系數的大小是能夠互相比較的,可以剔除掉標准化
  2. 隨着k的增加,回歸系數不穩定,震動趨於零的變量也可以剔除

那么,問題來了,趨於0到底是怎樣才能看出來呢?能不能程序自動判斷呢?如果有好幾個回歸系數不穩定的,又應該去掉哪個呢?這就需要根據去掉某個變量之后的回歸效果來定。這就涉及到擴展的嶺回歸方法LASSO了。

在此之前,先用R語言運行一個嶺回歸的例子

R語言中嶺回歸的包是MASS, 運行嶺回歸的函數是lm.ridge

1.載入MASS包,使用R內置的longley數據集(宏觀經濟數據)做為例子。(注:宏觀經濟數據一般而言都會存在比較嚴重的共線性問題(

  1. 使用傳統OLS方法進行回歸的結果

發現有幾個變量的結果並不顯著,那么是否要刪除掉這幾個變量呢?我們用嶺回歸進行變量的剔除。

  1. 動挑選嶺回歸參數,給出的結果

  1. 觀察嶺跡圖,進行變量剔除

     

    待解決疑問:到底哪個顏色代表了哪個變量啊。。。尼瑪

    上圖可以用肉眼去選擇k值,然后放入lambda中(lm.ridge函數中lambda默認是0)

  1. 根據不同的方法選擇k, 可以發現嶺回歸參數的選擇存在非常大的不確定性

 

 

  1. Tibshirani(1996)提出了Lasso(The Least Absolute Shrinkage and

Selectionator operator)算法

  1. 與嶺回歸不同的是,LASSO構造的是一個一階的懲罰函數,從而使得模型一 些變量的系數為0(嶺回歸系數為0的可能性非常)
  2. 與嶺回歸一樣,LASSO也是有偏估計

模型形式對比

嶺回歸:

LASSO

可以看出,LASSO的懲罰函數是絕對值形式,其函數形式就更為壓縮,用幾何意義來說明會更為直觀:

下圖是LASSO模型的幾何表述

下圖是嶺回歸的幾何表述

 

紅色是求最小值區域,而藍色則是約束條件區域。

可以發現,LASSO由於是絕對值形式,其約束條件更為"尖銳"。回歸的估計參數更容易為0。

上圖左邊是嶺回歸,右邊是LASSO。 在每個圖中從右往左,k值逐漸增大,可以看到,LASSO在k值增大的過程中,

回歸的參數估計經常會有為0的狀況,對於這種參數,我們便可以選擇對它們進行剔除。便不用我們進行人工選擇剔除變量,而可以讓程序自動根據是否為0來剔除掉變量了。

現在問題是,LASSO回歸由於其懲罰函數是絕對值的形式,難以得到一個確定的估計參數的表達式,如何解決呢?

統計學家們發現,LASSO回歸與最小角回歸的計算結果是高度相似的,因此可以用最小角回歸LAR的結果來對LASSO進行估計。(具體的思路和證明非常復雜,以后有空繼續寫篇博文進行闡述)。

 

對LAR模型進行一定的修正后,便能夠讓LAR的結果與LASSO基本上一致了。因此,我們用LAR的算法來對LASSO進行計算。 

 

 

包:lars

Library(lars)

使用longley數據集

上圖的結果是用LAR算法對線性回歸進行最小二乘回歸的結果。

可以看到Year和Employed這兩個變量被反復刪除和使用,這兩個是應當被刪除掉的

在summary的結果中,CP代表的是對共線性的判斷,可以看到,模型在第8步的時候

共線性是最小的,結合laa中第8步的狀況,所以剔除掉Year和Employed這兩個變量是

比較合適的。

 

 


免責聲明!

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



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