標籤:
?
?
?
多元線性迴歸模型
的最小二乘估計結果為
如果存在較強的共線性,即 中各列向量之間存在較強的相關性,會導致的從而引起對角線上的 值很大
並且不一樣的樣本也會導致參數估計值變化非常大。即參數估計量的方差也增大,對參數的估計會不準確。
因此,是否可以刪除掉一些相關性較強的變數呢?如果p個變數之間具有較強的相關性,那麼又應當刪除哪幾個是比較好的呢?
本文介紹兩種方法能夠判斷如何對具有多重共線性模型進行變數剔除。即嶺迴歸和LASSO(註:LASSO是在嶺迴歸的基礎上發展的)
?
?
思想:
既然共線性會導致參數估計值變得非常大,那麼給最小二乘的目標函數加上基礎上加上一個對 的懲罰函數
最小化新的目標函數的時候便也需要同時考慮到 值的大小,不能過大。
在懲罰函數上加上係數k
隨著k增大,共線性影響將越來越小。在不斷增大懲罰函數係數的過程中,畫下估計參數(k)的變化情況,即為嶺跡。
通過嶺跡的形狀來判斷我們是否要剔除掉該參數(例如:嶺跡波動很大,說明該變數參數有共線性)。
步驟:
- 對資料做標準化,從而方便以後對(k)的嶺跡的比較,否則不同變數的參數大小沒有比較性。
- 構建懲罰函數,對不同的k,畫出嶺跡圖。
- 根據嶺跡圖,選擇剔除掉哪些變數。
嶺迴歸的目標函數
式中,t為 的函數。越大,t越小(這裡就是k)
如中,相切點便是嶺迴歸得出來的解。是嶺迴歸的幾何意義。
可以看出,嶺迴歸就是要控制 的變化範圍,弱化共線性對大小的影響。
解得的嶺迴歸的估計結果為:
嶺迴歸的性質
????由嶺迴歸的目標函數可以看出,懲罰函數的係數 (或者k)越大,目標函數中懲罰函數所佔的重要性越高。
從而估計參數 也就越小了。我們稱係數 (或者k)為嶺參數。因為嶺參數不是唯一的,所以我們得到的嶺迴歸估計 實際是迴歸參數 的一個估計族。例如下表中:
嶺跡圖
????將上表中迴歸估計參數與嶺迴歸參數k之間的變化關係用一張圖來表示,便是嶺跡圖
????
????當不存在奇異性是,嶺跡應該是穩定地逐漸趨於0
當存在奇異性時,由嶺迴歸的參數估計結果可以看出來,剛開始k不夠大時,奇異性並沒有得到太大的改變,所以隨著k的變化,迴歸的估計參數震動很大,當k足夠大時,奇異性的影響逐漸減少,從而估計參數的值變的逐漸穩定。
嶺參數選擇的一般原則
- 各迴歸係數的嶺估計基本穩定
- 不存在有明顯不符合常理的迴歸參數,其嶺估計的符號應當要變得合理
- 迴歸係數沒有不合實際意義的絕對值
- 殘差平方和增大不多
用嶺迴歸選擇變數
- 由於嶺迴歸是已經變數標準化之後的迴歸,因此嶺迴歸係數的大小是能夠互相比較的,可以剔除掉標準化
- 隨著k的增加,迴歸係數不穩定,震動趨於零的變數也可以剔除
那麼,問題來了,趨於0到底是怎樣才能看出來呢?能不能程式自動判斷呢?如果有好幾個迴歸係數不穩定的,又應該去掉哪個呢?這就需要根據去掉某個變數之後的迴歸效果來定。這就涉及到擴充的嶺迴歸方法LASSO了。
在此之前,先用R語言運行一個嶺迴歸的例子
R語言中嶺迴歸的包是MASS, 運行嶺迴歸的函數是lm.ridge
1.載入MASS包,使用R內建的longley資料集(宏觀經濟資料)做為例子。(註:宏觀經濟資料一般而言都會存在比較嚴重的共線性問題(
- 使用傳統OLS方法進行迴歸的結果
發現有幾個變數的結果並不顯著,那麼是否要刪除掉這幾個變數呢?我們用嶺迴歸進行變數的剔除。
- 動挑選嶺迴歸參數,給出的結果
- 觀察嶺跡圖,進行變數剔除
?
待解決疑問:到底哪個顏色代表了哪個變數啊。。。尼瑪
????可以用肉眼去選擇k值,然後放入lambda中(lm.ridge函數中lambda預設是0)
- 根據不同的方法選擇k, 可以發現嶺迴歸參數的選擇存在非常大的不確定性
?
?
- Tibshirani(1996)提出了Lasso(The Least Absolute Shrinkage and
Selectionator operator)演算法
- 與嶺迴歸不同的是,LASSO構造的是一個一階的懲罰函數,從而使得模型一 些變數的係數為0(嶺迴歸係數為0的可能性非常)
- 與嶺迴歸一樣,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這兩個變數是
比較合適的。
?
?
多重共線性解決方案之——嶺迴歸與LASSO