作者:王翰洋 (北京大學)

Stata 連享會: 知乎 | 簡書 | 碼雲Stata連享會「Stata現場班報名中……」

「不顯著」是很多跑回歸的人的痛處,但有時不顯著並非是故事本身的原因,而是多重共線性導致的。多元分析中,當兩個或更多的變數出現相關的時候,就有可能出現多重共線性問題。一般的多重共線性並不影響估計,但高度的共線性會使估計的方差膨脹,t 值縮水,導致統計推斷失效。

本文介紹了兩種經典的篩選變數、應對多重共線性的參數方法,「Ridge 回歸」和「Lasso 回歸」。

1. Ridge回歸

Ridge 回歸 (Hoerl and Kennard, 1970) 的原理和 OLS 估計類似,但是對係數的大小設置了懲罰項。具體來說,

egin{align} min_{eta} (y-zeta)^{T}(y-zeta)   quad s.t. sum_{j=1}^p eta_j^2 leq t end{align}   	ag{1}

其中,t 代表懲罰的力度,t 越大,對係數的大小懲罰越重,約束越緊。取係數的平方和形式可以避免正負係數相抵消的情況。在矩陣形式中,Z 按照傳統是標準化之後的(均值為 0,方差為 1),y 也需要中心化。不難證明,這個優化問題的解是:

{eta}^{ridge}=(z^{T}z+lambda I_{p})^{-1}z^{T}y  	ag{2}

顯然,λ 是這個問題的調整參數,當 λ 趨於 0 的時候,就退化為一般的 OLS 估計。當 λ 趨於正無窮的時候, 則是純截距回歸。實踐中,可以通過交叉驗證(cross validation)的方法來選擇調整參數 λ 。在 Stata 命令中,可以通過命令 rxridge 來實現 Ridge 回歸。命令基本格式是:

rxridge y X_1 X_2 X_3 [if exp] [in range] ///
[, msteps(#) qshape(#) rescale(#) tol(#) ]

具體說明如下:

- msteps 代表共線性容忍參數每增加一單位所帶來的步數變化

- qshape 控制了沿似似然空間收縮的形狀

- rescale 是調整方差的參數,比如 rescale(1) 就是讓所有中心化變數方差都為 1 ,rescale(0) 就是讓所有變數都保持原來的方差

- tol(#) 用於設定收斂判據

2. Lasso 回歸

Lasso 也是對係數的大小設置了懲罰項,但懲罰項引入的方式略不同,具體來說, egin{align} min_{eta} (y-zeta)^{T}(y-zeta)  quad s.t. sum_{j=1}^p |eta_j| leq t end{align} 	ag{3}

等價地,我們可以用以下損失函數來表示: PRSS(eta)=(y-zeta)^{T}(y-zeta)+{lambda} | {eta} |_{1} 	ag{4}

仍然,λ 是這個問題的調整參數,不過一般情況下我們無法得到 β 的顯示解。但是,當數據矩陣中各變數都相互正交且模為 1 時,我們可以得到 Lasso 的顯示解。在 Lasso 中,可以看到,懲罰項由平方換成了絕對值。雖然絕對值是凸函數,函數在 0 點有唯一的最小值,但其在此點不可導。當某項的懲罰係數足夠大時,那麼它將無法進入模型(變數選擇),只有那些回歸係數非0的變數才會被選入模型。

在 Stata 中,我們可以安裝 lassopack 命令來實現 Lasso 回歸,Lassopack 包含三個與 Lasso 相關的子命令(輸入 help lassopack 可以查看詳情): - 子命令 lasso2 可進行 Lasso 估計; - 子命令 cvlasso 可進行 K 折交叉驗證(k-fold cross validation); - 子命令 rlasso 可以估計懲罰項由數據決定或者高維情形(變數維度超過樣本數)。

3. 演示數據集

下面我們用一個糖尿病數據集(Efron et al., 2004)來演示 Ridge 回歸和 Lasso 回歸, 這個數據集包括血液化驗等指標(Source:http://CRAN.R-project.org/package=lars)。除了被解釋變數 y 之外,還有 X 和 X2 兩組變數,前者是標準化後的,為 442x10 維矩陣,後者包括前者及一些交互作用,為 442x64 維矩陣,我們考慮 y 和 X2 。在導入數據後,我們先進行 Ridge 回歸。輸入命令

rxridge y x2*, q(-1)

就可以得到 Ridge 回歸的結果,估計的 sigma 為 0.690,最後迭代出的 MCAL 為 63,Summed SMSE 為 104.37。

然後我們考慮 Lasso 回歸。輸入如下命令可以進行 Lasso 估計,最後一個選項代表顯示整個解的路徑:

lasso2 y x2* , plotpath(lambda)

下表顯示隨著調整參數λ由大變小,越來越多的變數進入模型,比如 λ=3.992e+04 時,常數項首先進入模型。

下圖為整個解的路徑(作為 λ 的函數),畫出了不同變數回歸係數的變化過程。其中,當 λ=0 時(下圖最左邊),不存在懲罰項,故此時 Lasso 等價於OLS。而當 λ 很大時(下圖最右邊),由於懲罰力度過大,所有變數係數均歸於 0 。這裡,由於變數非常多,整個圖頗有野獸派風格:

緊接著,我們使用 K 折交叉驗證的方法來選擇最佳的調整參數。所謂的 K 折交叉驗證,是說將樣本數據隨機分為 K 個等分。將第 1 個子樣本作為 「驗證集」(validation set)而保留不用,而使用其餘 K-1 個子樣本作為 「訓練集」(training set)來估計此模型,再以此預測第 1 個子樣本,並計算第1個子樣本的 「均方預測誤差」(Mean Squared Prediction Error)。其次,將第 2 個子樣本作為驗證集,而使用其餘 K-1 個子樣本作為訓練集來預測第2個子樣本,並計算第 2 個子樣本的 MSPE。以此類推,將所有子樣本的 MSPE 加總,即可得整個樣本的 MSPE。最後,選擇調整參數 ,使得整個樣本的 MSPE 最小,故具有最佳的預測能力。我們輸入命令

cvlasso y x2*, lopt seed(123)

其中,選擇項 「lopt」 表示選擇使 MSPE 最小的 λ,選擇項 「seed(123)」 表示將隨機數種子設為 123(可自行設定),以便結果具有可重複性;默認 K=10(即 10 折交叉驗證)。

打星號處的 λ=2688.3717,這是使 MSPE 最小的調整參數,與此對應的估計結果如下圖所示:

上表右邊第 1 列即為 Lasso 所估計的變數係數。其中,除常數項外,只有 14 個變數的係數為非零,而其餘變數(未出現在表中)的係數則為 0。考慮到作為收縮估計量的 Lasso 存在偏差(bias),上表右邊第 2 列彙報了 「Post Lasso」 估計量的結果,即僅使用 Lasso 進行變數篩選,然後扔掉 Lasso 的回歸係數,再對篩選出來的變數進行 OLS 回歸。

通過以上的介紹,我們已經掌握了如何使用 Stata 進行 Ridge 回歸和 Lasso 回歸,這是經典的解決高度共線性、篩選變數的方法。但是,近年來非常火熱的機器學習方法,在解決高度共線性、篩選變數方面,有更好的表現,期待看到更多的關於機器學習方法的 Stata 命令。

Stata 相關命令

這些都是外部命令,可以使用 findit cmdname 搜索後下載,亦可直接使用 ssc install cmdname, replace 直接下載,詳情參見 「Stata: 外部命令的搜索、安裝與使用」。 - help ridgereg // module to compute Ridge Regression Models - help elasticregress //perform elastic net regression, lasso regression, ridge regression, 作者自己的評價 - help ridge2sls // Two-Stage Least Squares (2SLS) Ridge & Weighted Regression - help lassopack //module for lasso, square-root lasso, elastic net, ridge, adaptive lasso estimation and cross-validation - lassopack 項目主頁 - The Stata Lasso Page - 作者 PPT

相關鏈接

  • Wieringen, 2018, PDF book Lecture notes on ridge regression
  • Stanfor PPT - Regularization: Ridge Regression and the LASSO - Stanford Statistics
  • 脊回歸(Ridge Regression)
  • lixintong1992-Ridge Regression || 從收縮的角度解釋的很好
  • 嶺回歸(ridge regression) || 非矩陣方式表述,更容易理解
  • scikit-learn v0.20.2 - Ridge Regression
  • Ridge回歸、Lasso回歸、坐標下降法、最小角回歸
  • 一文讀懂正則化與LASSO回歸,Ridge回歸
  • 七種常見的回歸分析
  • Colin Cameron, 2017, PPT, Machine Learning for Microeconometrics || 介紹了 cross-validation, lasso, regression trees and random forests 等方法
  • Ridge Regression,這個頁面提供了參考文獻

關於我們

  • Stata 連享會(公眾號:StataChina)】由中山大學連玉君老師團隊創辦,旨在定期與大家分享 Stata 應用的各種經驗和技巧。
  • 公眾號推文同步發佈於 CSDN-Stata連享會 、簡書-Stata連享會 和 知乎-連玉君Stata專欄。可以在上述網站中搜索關鍵詞StataStata連享會後關注我們。
  • 點擊推文底部【閱讀原文】可以查看推文中的鏈接並下載相關資料。
  • Stata連享會 精彩推文1 || 精彩推文2

聯繫我們

  • 歡迎賜稿: 歡迎將您的文章或筆記投稿至Stata連享會(公眾號: StataChina),我們會保留您的署名;錄用稿件達五篇以上,即可免費獲得 Stata 現場培訓 (初級或高級選其一) 資格。
  • 意見和資料: 歡迎您的寶貴意見,您也可以來信索取推文中提及的程序和數據。
  • 招募英才: 歡迎加入我們的團隊,一起學習 Stata。合作編輯或撰寫稿件五篇以上,即可免費獲得 Stata 現場培訓 (初級或高級選其一) 資格。
  • 聯繫郵件: [email protected]

往期精彩推文

  • Stata連享會推文列表1
  • Stata連享會推文列表2
  • Stata連享會 精彩推文1 || 精彩推文2



推薦閱讀:
相关文章