多元線性回歸建模如何確定選擇哪些解釋變數?
要了解線性回歸的變數選取(Subset Selection),得先明白線性回歸的弊端。本文先從模型弊端說起,再提及兩種基本的變數選取邏輯。
線性回歸的弊端:
線性回歸模型(Ordinary Linear Regression)是通過最小化殘差平方和(SSE, Sum of Squared Error)得出來的解。直觀上而言,一個好的線性回歸模型,其得出來的預測值應該與真實值接近,因此SSE應該會小。然而,如果我們僅僅以小的SSE作為衡量標準,來選取最終的模型,我們的模型永遠都會是將所有變數都加入的模型。因為添加任意的變數,都會減小SSE,甚至當變數與真實值毫無關係時。因此,單單利用殘差平方和(SSE)的大小來作為選取變數的唯一標準會引起如下的兩大問題:一方面,模型可能過擬合(over-fitting):加入更多的變數會加大模型的方差,而數據量又不足夠讓模型完全與真實情況相同;另一方面,失去模型的解釋性(interpretation):我們不知道那些變數事實上會有影響,或者那些變數對預測最有幫助。
由此而言,我們理想中的模型即需要有儘可能低的殘差,又需要有儘可能少的變數。而實際上的模型並不會如此完美,所以我們需要一種能夠兼顧兩者的方法。由此我們可以引出兩類基礎的變數選區邏輯。
變數選取邏輯一:結合殘差與變數的衡量標準。
既然我們需要儘可能低的殘差,有需要儘可能少的變數。那麼我們可以創造一個衡量標準,選取這個衡量標準最大的模型。而這個標準必須滿足:當殘差小時,標準大,模型好;當變數少時,標準大,模型好。而一個很簡單的衡量標準就是調整R方(adjusted R square):,其中n代表樣本的數量(視為常數),p代表選取變數的多少,SST代表因變數的離散程度(視為常數)。不難發現調整R方(adjusted R square)滿足我們所需要的衡量標準對於p和SSE的性質,因此可以被用來選取變數。然而滿足要求的衡量標準還有許多,因此我們沒有辦法說哪一種是最好的。還有兩種較為常用的衡量標準:AIC和BIC。他們也滿足當殘差小時,標準大;當變數少時,標準大。然而他們對於模型多一個變數的懲罰和降低誤差的獎勵並不相同。因此,在選取不同的衡量標準後,所得到的模型並不一定相同。
變數選取邏輯二:看對新數據的預測效果。
如果說找到一個合適的衡量標準很難,那不如直接看模型的預測性。如果模型對新數據的預測很接近,那麼我們就選定這個模型中有的變數即可。在這個時候,我們的衡量標準依舊是殘差平方和(SSE),但是此時的殘差並不是已經拿去構建模型的數據的殘差,而是沒有被用過的新數據的殘差。然而這種衡量方式需要大量數據的支撐,如果數據量少,那麼拿出一部分數據往往會使得模型由於樣本量缺少而無法正確學習。變數選取之後會有更多更深的內容,最優變數選取(best subset selection),逐步變數選取(stepwise selection and stagewise selection)以及參數放縮(parameter shrinkage: Lasso, Ridge and General Bayes)都可以作為變數選取的方法。感興趣的可以繼續深入學習哦~
對於那些沒有理論指導的問題,做線性回歸不要放在經濟學、計量經濟學這個分類裡面。同 @盧晶亮 所說,經濟學做回歸,放什麼變數不放什麼變數都是有原因的,該放的不放,不該放的亂放,都有問題。另外經濟學裡面,R方也說明不了什麼問題。沒有理論,還是問問統計學家吧。============
更新一下,有些答案看不過去了。。說主成分分析什麼的也就算了,還有說Logistic的。。。多重共線性造成r2高???你發明的理論啊為什麼知乎上總是有不懂亂答的人前面有的同學說到lasso,正好最近有學習lasso,順便寫了個總結,貼到了個人博客,有興趣的同學可以看鏈接:The Lasso Method Implementation。
文章比較長,格式不好修改,這裡,貼一下實現的代碼。
lasso的R實現
lasso的實現可以採用glmnet包。glmnet包作者是Friedman, Hastie, and Tibshirani這三位統計學習領域的大牛,可信度無可置疑。
這個包採用的演算法是循環坐標下降法(cyclical coordinate descent),能夠處理的模型包括 linear regression,logistic and multinomial regression models, poisson regression 和 the Cox model,用到的正則化方法就是l1範數(lasso)、l2範數(嶺回歸)和它們的混合 (elastic net)。
這裡,給出一個實現lasso的示例。
數據來源於ISLR包中的Hitters數據集,該數據集描述了美國1986年和1987年的棒球運動員相關數據。我們來探究一下對運動員薪水起主要作用的因素有哪些。
從上面兩幅圖對比可知,the lasso相比起ridge regression,在壓縮變數方便表現更出色。
```{r, echo=TRUE,message=FALSE,warning=FALSE}
##data
library(ISLR)
str(Hitters)
Hitters&<-na.omit(Hitters) ## sampling x&<-model.matrix(Salary~.,Hitters)[,-1] y&<-Hitters$Salary set.seed(1) train&<-sample(1:nrow(x),nrow(x)/2) test&<-(-train) y.test&<-y[test] ## ridge regression library(glmnet) grid&<-10^seq(10,-2,length = 100) ridge.mod&<-glmnet(x,y,alpha = 0,lambda = grid) plot(ridge.mod, main = "The ridge") ## the lasso lasso.mod&<-glmnet(x[train,],y[train],alpha = 1,lambda = grid) plot(lasso.mod, main = "The lasso") ```當然,你還可以使用這個包內部的交叉驗證函數對$lambda$進行參數優化,使得模型更具有穩健性。
```{r}
## cross-validation
set.seed(1)
cv.out&<-cv.glmnet(x[train,],y[train],alpha = 1) plot(cv.out) bestlam&<-cv.out$lambda.min lasso.pred&<-predict(lasso.mod,s = bestlam,newx = x[test,]) mean((lasso.pred - y.test)^2) ## out&<-glmnet(x,y,alpha = 1,lambda = grid) lasso.coef&<-predict(out,type = "coefficients",s = bestlam)[1:20,] lasso.coef ``` ## (Intercept) AtBat Hits HmRun Runs ## 18.5394844 0.0000000 1.8735390 0.0000000 0.0000000 ## RBI Walks Years CAtBat CHits ## 0.0000000 2.2178444 0.0000000 0.0000000 0.0000000 ## CHmRun CRuns CRBI CWalks LeagueN ## 0.0000000 0.2071252 0.4130132 0.0000000 3.2666677 ## DivisionW PutOuts Assists Errors NewLeagueN ## -103.4845458 0.2204284 0.0000000 0.0000000 0.0000000可見,很多變數的係數確實被壓縮至零。
lasso的優缺點分析
- 相比較於其他變數選擇方法,如:best subset,Partial Least Squares(偏最小二乘),Principal components regression(主成分回歸),the lasso和ridge regression對參數的調整是連續的,並不是一刀切的。
- the lasso相比於ridge regression的優勢在於壓縮變數表現更出色。
- 但是,正如前面所說,lasso還是會有一些潛在的問題,有時候,elastic net等其他的一些lasso的變形會是更好的選擇。
參考文獻
- The Elements of Statistical Learning: Data Mining, Inference and Prediction. Second edition
- An Introduction to Statistical Learning with R
- [線性回歸建模–變數選擇和正則化(1):R包glmnet](線性回歸建模)挖個坑吧,改日來填。
模型選擇1. 變數子集選擇
- 最優子集法
- 逐步法
2. 縮減方法
- 嶺回歸
- 拉索Lasso
3. 降維方法
- 主成分回歸
- 偏最小二乘
在高級計量課中,你將知道計量模型分為兩種,一種是structural model,一種是reduced model。簡而言之,structural model是有經濟學理論作為支撐的,比如以柯佈道格拉斯函數為模型做出的計量,此類多元線性回歸建模稱之為structural model,毋庸置疑,解釋變數和被解釋變數是有明確經濟學含義的。而大多數我們平時建立的模型都是reduced model,這就意味著尤其在做時間序列的時候,我們選用的解釋變數通常都是根據直觀感覺加入的,然後再將回歸結果與模型參數的約束性等做權衡,(不能僅僅通過R square或p value就判斷某一解釋變數該不該放),最終拿出一個比較好的計量回歸模型做預測估計。如果你要覺得我回答的逼格還不低,請不要吝嗇你的贊~哈哈先謝過。
what is your theory? that is the key你這個問題是variable selection。首先要從domain knowledge的角度看某些變數是不是有意義一定要選。其次可以通過gradient boosting tree, random forest等ensamble method或者elastic net, scad等shrinkage method或者bayesian method或者其他機器學習方法如svm, neural network來選擇變數。
個人認為 ridge, lasso都不是很有效,怎麼也要用elastic net或者adaptive lasso, glasso這些dominate它們的方法來做。
另外pca根本不能拿來選變數。我覺得題主不妨把題拿上來看一下給大家參考一下。
一般來說,都是普遍用adjusted r方來檢驗是否有多餘無用的變數。樓上很多人說變數增加,r方就增加是不準確也不完整的。應該是,如果新變數能引起adjusted r方增加,那這個變數就應該被考慮用入模型。
p-value用來測試顯著性,要與alpha做大小對比,所以對題主這句「根據p-value,某些變數的係數是無意義的」很感興趣,會不會是因為alpha設置的太小了?如果單看這些無意義的變數的pvalue比那些有意義的變數的pvalue還小,那就比較奇特了。所以對題主的原題很好奇。
另外還有個方法是可以看MSE在其中的變化,越小說明出錯的variance越小,也可以作為你變數取捨的參考。
比如下面這個多元線性的簡單例子,題目是根據DLH和units這兩個變數來建造多元線性模型,然後判斷用什麼變數最準確:
a方法是只用DLH來預測overhead,b方法只用units來預測overhead,c方法是兩個變數都用。
結果如下 看結果的話,b方法肯定是首先被排除的,因為adjusted r方太小了,pvalue也很小。現在就是a方法和c方法的取捨了,首先按照題主的判斷順序,看pvalue,a結果的pvalue更小,那a結果的顯著性獲勝,(alpha為5%);
接著adjusted r方,也是a結果更大那麼一點,(0.9433&>0.9431),前面說增加變數就增加adjusted r方的同學請看過來!最後看MSE也是a結果的更小。所以三個判斷方法的結果都是一致並互相支持的。
還有樓上很多同學說到題主的模型沒有理論支持的問題,所以題主更應該直接把具體問題po出來~而我這裡舉的不過只是個適用於線性回歸的例子。也許到最後題主的例子根本就不適用此方法。
有不妥之處還請多多指教。adjusted R 不重要。別管這個。
重要的是你關心的解釋變數是否顯著(就是關鍵的變數的p值是否小。)如果你不知道你到底關心哪些解釋變數(據題主所說,沒有指導理論),而是想從data中剔除變數,Lasso是正解。
隨便去除掉不顯著的變數,想讓結果好看,是根本錯誤的方法。
找本Lasso的書好好學吧。。。
多元線性回歸中每多加一個變數(即使這個變數是隨機產生的), R方都會相應增加,所以沒有意義的變數還是不要加進去了。關於變數的取捨要根據經濟學原理。昂~這說的就是subset selection問題,適用於高維線性回歸,在risk minimization的語義下,可以寫作如下的優化問題
subject to
其中 是 中非零元素的個數。
唔...不幸的是這是一個NP-hard的問題,有兩種近似的方法,貪心法(greedy approxmation) 和convex relaxation(這個constraint加在那兒太搶眼,NP-hard的問題顯然不會是convex optimization)。對於前者,我們可以用forward stepwise regression,而後者就是我們耳熟能詳的Lasso啦。
感覺Lasso被講的太多了,於是想說一下step-wise regression。所謂的step-wise regression呢,其實概念上非常簡單,就是迭代地尋找一些看起來很厲害的變數,如何那定義這個很厲害呢?簡單來說,如果我們要尋找的subset是的話,最開始的時候讓 ,在forward step-wise regression的過程中,在每次() 迭代中,我們首先都去計算一組殘差 ,其中 ,這裡的就是至今為止找到的 所組成的參數,然後算我們得到的殘差和所有尚未被選中feature的correlation,公式寫作 ,而correlation絕對值最大的那個feature,就是我們這次要留給的feature, 。
相似的演算法還有很多,比如說Orthogonal Greedy Algorithm啦,FoBa等等等等,是和convex relaxation非常不同的一個思路(?????????)
唔事實上,convex relaxation也不光是lasso,也有SCAD和MCP等等等等,區別在於如何把那個討厭的 norm換掉,lasso採用的方法是將其變成 norm,SCAD換成了smoothly clipped absolute deviation penalty,MCP則換成了minimax concave penalty,有空具體寫寫啦~~
ref:
http://www.stat.cmu.edu/~ryantibs/statml/lectures/LinearRegression.pdf
http://cs.nju.edu.cn/zhouzh/zhouzh.files/publication/nips15poss.pdf
Lasso方法是目前在線性模型方面比較流行的篩選變數的方法,推薦使用。統計學裡頭有很多方法可以選用:向前向後,最優子集,lasso,adaptive lasso,group lasso,elastic net,fused lasso,scad,mcp等等。百度這些關鍵詞可以找到大量文獻。但是理論上是一回事,實際數據分析是另一回事。有些變數是必須要有的,但是應用這些方法,可能被選掉。這可能是方法不適用,也可能是樣本不行。
另外,統計學家一般注重預測,上述方法基本上依賴交叉驗證確定中間參數。這和計量的做法是不一樣的。在實際項目中,僅僅依靠預測好壞一項指標有時說不過去。希望題主注意。
一切沒有理論依據(有時常識也可湊合)的變數選擇都是耍流氓!更新一下
題主都說沒有理論依據了,那就是純粹從回歸的角度談變數選擇。變數選擇有很多種方法。
最老套的是 f-statistics,應該就是答主p-value的來源。
接下來就是一系列penalize 變數數的指標,包括adjusted R2,Mallow"s Cp, AIC, BIC這一類,原則上可以通過窮盡所有2^p組合來挑選變數,實際操作中通常採用forward backward 的方法。如果數據多變數也多的話,計算量還是很大。以上指標應該也可以用cross validation的MSE代替。
上面這種方法可以看做是某種形式的L-0正則,當然也可以用L-1的正則,那就是lasso了,這個計算量比較小,所以比較流行一些。
我知識範圍裡面的大概就這些了吧。這幾天在看lasso,可以試試,如果變數很多,可以在偏最小二乘得到個成分和權重後,算各解釋變數對因變數的重要程度,不重要的剔除了試試
如果t檢驗做出來發現某些解釋變數無意義 那顯然應該捨去。這是在進行多元線性回歸之前就該進行的準備工作,根本和adjusted R square無關。PS:一般來說,解釋變數越多,adjusted R square越大。變數篩選從來都不是一個簡單容易的工作。就我所做的工作簡單給題主一點經驗和建議;一般來說篩選變數有以下幾種方法:
1、全子集回歸
全子集回歸,即將所有變數(假設自變數為5個)納入考慮,通過一定的標準(R 中提供兩個標準,調整R2和AIC),分別計算出當模型中只包含1、2、3、4、5個變數時,模型的調整R2或者AIC。通過這種方法可以做出以變數個數為自變數,模型的調整R2或者AIC為因變數的散點圖,看下到底在幾個變數時模型的調整R2或者AIC變化小對應的變數個數。
2、逐步回歸
同全子集回歸類似,包括向前、向後和向前向後回歸(forward、backward and stepwise regression in R),通過一定的標準,如F檢驗是否顯著或者AIC來確定進入變數的個數,確定最終的模型。
R 語言中還提供變數重要性的計算,即哪些變數與預測有用呢,http://bbs.pinggu.org/thread-3088713-1-1.html。 無法下載的朋友歡迎私信,我這裡有PDF版,可以分享給大家。
樓上都是在有很多變數可供選擇的基礎上,講了很多如何優化模型的方法和指標。不過感覺樓主問的應該不是這個意思啊...
下面就我個人的理解,來說說選變數這回事。在講之前,默認樓主應該已經有了明確的被解釋變數和核心解釋變數了,所以問題在於控制變數的選取上
重點!!!選擇控制變數的關鍵在於:它是否和你的被解釋變數有關係!!!
面對一個問題,最先想的是有沒有什麼經濟學理論可供支撐,也即是否可從結構式模型出發,找到一些變數,這些變數從理論上可直接得到他們是和被解釋變數相關的。那麼OK了,這些變數肯定是要進入模型的。
除此之外,還有一些變數需要控制啊,因為經濟學理論畢竟是現實世界的簡化,所以要儘可能地將能控制的因素都控制一下。
那麼餘下的這些控制變數選取的關鍵在於:多讀文獻!!!那些top5上的文章,一般來說應該是可以相信的,如果他們發現某個變數有影響,儘管可能不是分析中國問題,但你也應該多長個心眼,將這個變數作為控制變數選進來。
一般來說,選變數的過程就是這樣。另外,變數選了一大堆,怎麼優化?上面的答案貌似也不是很清晰。我一般是這麼處理的,如果樣本量比較大,換了很多種回歸的形式,有些變數就是不顯著,那麼這樣的變數就不應該放進來,雖然將它們納入模型不會改變核心解釋變數係數估計的無偏性,但會影響它的有效性啊
但是還有一些變數,可能在部分回歸中顯著,那麼這樣的變數無論如何都是不能去除的。
當然,上前提條件是不能有嚴重的共線性啊,不過在樣本量足夠大的時候,共線性貌似也不是一個很嚴重的問題
其他回答乾貨很足,我就簡單說一下吧...有時候,光看p-value,單個變數可能是無意義的,但是當它和你模型里的另一個變數結合在一起,對於模型來說是 jointly significant. 如果是這樣,這個變數還是要保留的. 建議做一個 F-test, 測試一下.
推薦閱讀: