
多元線性回歸實戰筆記
R語言中的線性回歸函數比較簡單,就是lm(),比較復雜的是對線性模型的診斷和調整。這里結合Statistical Learning和杜克大學的Data Analysis and Statistical Inference的章節以及《R語言實戰》的OLS(Ordinary Least Square)回歸模型章節來總結一下,診斷多元線性回歸模型的操作分析步驟。
因變量比較容易確定,多元回歸模型中難在自變量的選擇。自變量選擇主要可分為向前選擇(逐次加使RSS最小的自變量),向后選擇(逐次扔掉p值最大的變量)。個人傾向于向后選擇法,一來p值比較直觀,模型返回結果直接給出了各變量的p值,卻沒有直接給出RSS;二來當自變量比較多時,一個個加比較麻煩。
構建一個回歸模型后,先看F統計量的p值,這是對整個模型的假設檢驗,原假設是各系數都為0,如果連這個p值都不顯著,無法證明至少有一個自變量對因變量有顯著性影響,這個模型便不成立。然后看Adjusted R2,每調整一次模型,應該力使它變大;Adjusted R2越大說明模型中相關的自變量對因變量可解釋的變異比例越大,模型的預測性就越好。
構建了線性模型后,如果是一元線性回歸,可以畫模型圖初步判斷一下線性關系(多元回歸模型不好可視化):
確定了回歸模型的自變量并初步得到一個線性回歸模型,并不是直接可以拿來用的,還要進行驗證和診斷。診斷之前,先回顧多元線性回歸模型的假設前提(by Data Analysis and Statistical Inference):
一個好的多元線性回歸模型應當盡量滿足這4點假設前提。
用lm()構造一個線性模型fit后,plot(fit)即可返回4張圖(可以par(mfrow=c(2,2))一次展現),這4張圖可作初步檢驗:
左上圖用來檢驗假設1,如果散點看不出什么規律,則表示線性關系良好,若有明顯關系,則說明非線性關系明顯。右上圖用來檢驗假設2,若散點大致都集中在QQ圖中的直線上,則說明殘差正態性良好。左下圖用來檢驗假設3,若點在曲線周圍隨機分布,則可認為假設3成立;若散點呈明顯規律,比如方差隨均值而增大,則越往右的散點上下間距會越大,方差差異就越明顯。假設4的獨立性無法通過這幾張圖來檢驗,只能通過數據本身的來源的意義去判斷。
右下圖是用來檢驗異常值。異常值與三個概念有關:
離群點:y遠離散點主體區域的點
杠桿點:x遠離散點主體區域的點,一般不影響回歸直線的斜率
強影響點:影響回歸直線的斜率,一般是高杠桿點。
對于多元線性回歸,高杠桿點不一定就是極端點,有可能是各個變量的取值都正常,但仍然偏離散點主體。
對于異常值,可以謹慎地刪除,看新的模型是否效果更好。
《R語言實戰》里推薦了更好的診斷方法,總結如下。
gvlma包的gvlma()函數可對擬合模型的假設作綜合驗證,并對峰度、偏度進行驗證。
最后的Global Stat是對4個假設條件進行綜合驗證,通過了即表示4個假設驗證都通過了。最后的Heterosceasticity是進行異方差檢測。注意這里假設檢驗的原假設都是假設成立,所以當p>0.05時,假設才能能過驗證。
如果綜合驗證不通過,也有其他方法對4個假設條件分別驗證:
線性假設
library(car)
crPlots(fit)
返回的圖是各個自變量與殘差(因變量)的線性關系圖,若存著明顯的非線性關系,則需要對自變量作非線性轉化。書中說這張圖表明線性關系良好。
正態性
qqPlot()可以生成交互式的qq圖,選中異常點,就返回該點的名稱。該圖中除了Nevad點,其他點都在直線附近,可見正態性良好。
同方差性
p值大于0.05,可認為滿足方差相同的假設。
獨立性
p值大于0.05,可認為誤差之間相互獨立。
除了以上4點基本假設,還有其他方面需要進行診斷。
理想中的線性模型各個自變量應該是線性無關的,若自變量間存在共線性,則會降低回歸系數的準確性。一般用方差膨脹因子VIF(Variance Inflation Factor)來衡量共線性,《統計學習》中認為VIF超過5或10就存在共線性,《R語言實戰》中認為VIF大于4則存在共線性。理想中的線性模型VIF=1,表完全不存在共線性。
可見這4個自變量VIF都比較小,可認為不存在多重共線性的問題。
還有一種方法是利用car包里的outlierTest()函數進行假設檢驗:
這個函數用來檢驗最大的標準化殘差值,如果p>0.05,可以認為沒有離群點;若p<0.05,則該點是離群點,但不能說明只有一個離群點,可以把這個點刪除之后再作檢驗。第三種方法可以與第二種方法結合起來使用。
高杠桿點
高杠桿值觀測點,即是與其他預測變量有關的離群點。換句話說,它們是由許多異常的預測變量值組合起來的,與響應變量值沒有關系?!督y計學習》中給出了一個杠桿統計量,《R語言實戰》中給出了一種具體的操作方法。(兩本書也稍有出入,《統計學習》中平均杠桿值為(p+1)/n,而在《R語言實戰》中平均杠桿值為p/n;事實上在樣本量n比較大時,幾乎沒有差別。)
超過2倍或3倍的平均杠桿值即可認為是高杠桿點,這里把Alaska和California作為高杠桿點。
強影響點
強影響點是那種若刪除則模型的系數會產生明顯的變化的點。一種方法是計算Cook距離,一般來說, Cook’s D值大于4/(n-k -1),則表明它是強影響點,其中n 為樣本量大小, k 是預測變量數目。
實際上這就是前面診斷的4張圖之一,語句還是plot(fit),which=4表示指定第4張圖,cook.levels可設定標準值。紅色虛線以上就返回了強影響點。
car包里的influencePlot()函數能一次性同時檢查離群點、高杠桿點、強影響點。
縱坐標超過+2或小于-2的點可被認為是離群點,水平軸超過0.2或0.3的州有高杠桿值(通常為預測值的組合)。圓圈大小與影響成比例,圓圈很大的點可能是對模型參數的估計造成的不成比例影響的強影響點。
到目前為止,《統計學習》中提到的多元線性回歸模型潛在的問題,包括4個假設不成立、異常值、共線性的診斷方法在上面已經全部得到解決。這里總結、延伸《R語言實戰》里提到的調整方法——
刪除觀測點
對于異常值一個最簡單粗暴又高效的方法就是直接刪除,不過有兩點要注意。一是當數據量大的時候可以這么做,若數據量較小則應慎重;二是根據數據的意義判斷,若明顯就是錯誤就可以直接刪除,否則需判斷是否會隱藏著深層的現象。
另外刪除觀測點后要與刪除之前的模型作比較,看模型是否變得更好。
變量變換
在進行非線性變換之前,先看看4個假設是否成立,如果成立可以不用變換;沒必要追求更好的擬合效果而把模型搞得太復雜,這有可能出現過擬合現象。如果連假設檢驗都不通過,可以通過變量變換來調整模型。這里只討論線性關系不佳的情況,其他情況遇到了再說。
如果殘差圖中呈現明顯的非線性關系,可以考慮對自變量進行多項式回歸。舉一個例子:
可以看到這個一元線性回歸模型的殘差圖中,散點的規律還是比較明顯,說明線性關系較弱。
將自變量進行2次多項式回歸后,發現現在的殘差圖好多了,散點基本無規律,線性關系較明顯。
再看看兩個模型的整體效果——
可見多項式回歸的模型Adjusted R2也增大了,模型的解釋性也變強了。
多項式回歸在《統計學習》后面的非線性模型中還會提到,到時候再討論。
car包中的boxTidwell() 函數通過獲得預測變量冪數的最大似然估計來改善線性關系。
可以發現殘差圖和Adjusted R2的提升都甚微,因此沒有必要作非線性轉換。
前面只是簡單得用Adjusted R2來比較模型,《R語言實戰》里介紹了可以用方差分析來比較嵌套模型(即它的一些項完全包含在另一個模型中)有沒有顯著性差異。方差分析的思想是:如果線性模型y~x1+x2+x3與y~x1+x2沒有顯著性差異,若同時x3變量對模型也不顯著,那就沒必要加上變量x3。下面進行試驗:
Income和Frost兩個變量不顯著,兩個模型之間沒有顯著性差異,就可以不加這兩個變量。刪去這兩個不顯著的變量后,R2略微減少,Adjusted R2增大,這也符合二者的定義。
《R語言實戰》里還介紹到了用AIC(Akaike Information Criterion,赤池信息準則)值來比較模型,AIC值越小的模型優先選擇,原理不明。
第二個模型AIC值更小,因此選第二個模型(真是簡單粗暴)。注:ANOVA需限定嵌套模型,AIC則不需要??梢夾IC是更簡單也更實用的模型比較方法。
這里的變量選擇與最開始的變量選擇同也不同,雖然是一回事,但一開始是一個粗略的變量的選擇,主要是為了構建模型;這里則要進行細致的變量選擇來調整模型。
逐步回歸
前面提到的向前或向后選擇或者是同時向前向后選擇變量都是逐步回歸法。MASS包中的stepAIC() 函數可以實現逐步回歸模型(向前、向后和向前向后),依據的是精確AIC準則。以下實例是向后回歸法:
可見原本的4元回歸模型向后退了兩次,最終穩定成了2元回歸模型,與前面模型比較的結果一致。
全子集回歸
《R語言實戰》里提到了逐步回歸法的局限:不是每個模型都評價了,不能保證選擇的是“最佳”模型。比如上例中,從Murder ~ Population + Illiteracy + Income + Frost到Murder ~ Population + Illiteracy + Income再到Murder~Population+Illiteracy雖然AIC值確實在減少,但Murder ~ Population + Illiteracy + Frost沒評價,如果遇到變量很多的情況下,逐步回歸只沿一個方向回歸,就有可能錯過最優的回歸方向。
橫坐標是變量,縱坐標是Adjusted R2,可見除截距項以外,只選定Population和Illiteracy這兩個變量,可以使線性模型有最大的Adjusted R2。
全子集回歸比逐步回歸范圍更廣,模型優化效果更好,但是一旦變量數多了之后,全子集回歸迭代的次數就很多,就會很慢。
事實上,變量的選擇不是機械式地只看那幾個統計指標,更主要的是根據數據的實際意義,從業務角度上來選擇合適的變量。
線性模型變量的選擇在《統計學習》后面的第6章還會繼續講到,到時繼續綜合討論。
交互項《統計學習》中花了一定篇幅來描寫,但在《R語言實戰》是在方差分析章節中討論。添加變量間的交互項有時可以改善線性關系,提高Adjusted R2。針對數據的實際意義,如果兩個基本上是獨立的,也很難產生交互、產生協同效應的變量,那就不必考慮交互項;只有從業務角度分析,有可能產生協同效應的變量間才考慮交互項。
涉及到交互項有一個原則:如果交互項是顯著的,那么即使變量不顯著,也要放在回歸模型中;若變量和交互項都不顯著,則可以都不放。
Andrew Ng的Machine Learning中就提到了,模型對舊數據擬合得好不一定就對新數據預測得好。因此一個數據集應當被分兩訓練集和測試集兩部分(或者訓練集、交叉驗證集、測試集三部分),訓練好的模型還要在新數據中測試性能。
所謂交叉驗證,即將一定比例的數據挑選出來作為訓練樣本,另外的樣本作保留樣本,先在訓練樣本上獲取回歸方程,然后在保留樣本上做預測。由于保留樣本不涉及模型參數的選擇,該樣本可獲得比新數據更為精確的估計。
在k 重交叉驗證中,樣本被分為k個子樣本,輪流將k-1個子樣本組合作為訓練集,另外1個子樣本作為保留集。這樣會獲得k 個預測方程,記錄k 個保留樣本的預測表現結果,然后求其平均值。
bootstrap包中的crossval()函數可以實現k重交叉驗證。
這個自定義的shrinkage()函數用來做k重交叉驗證,比計算訓練集和交叉驗證集的R方差異。這個函數里涉及到一個概念:復相關系數。復相關系數實際上就是y和fitted(y)的簡單相關系數。對于一元線性回歸,R2就是簡單相關系數的平方;對于多元線性回歸,R2是復相關系數的平方。這個我沒有成功地從公式上推導證明成立,就記下吧。這個方法用到了自助法的思想,這個在統計學習后面會細致講到。
可見這個4元回歸模型在交叉驗證集中的R2下降了0.12之多。若換成前面分析的2元回歸模型——
這次R2下降只有約0.05。R2減少得越少,則預測得越準確。
最重要的應用毫無疑問就是用建立的模型進行預測了。構建好模型后,可用predict()函數進行預測——
這里newdata提供了兩個全新的點供模型來預測。還可以用interval指定返回置信區間(confidence)或者預測區間(prediction),這也反映了統計與機器學習的一個差異——可解釋性。注意置信區間考慮的是平均值,而預測區間考慮的是單個觀測值,所以預測區間永遠比置信區間廣,因此預測區間考慮了單個觀測值的不可約誤差;而平均值同時也把不可約誤差給抵消掉了。
有的時候需要解釋模型中各個自變量對因變量的重要程度,簡單處理可以直接看系數即可,《R語言實戰》里自定義了一個relweights()函數可以計算各個變量的權重:
不要在意算法原理和代碼邏輯這種細節,直接看結果:
在本例中,相對權重與系數的排序結果一致。推薦用相對權重。
數據分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
CDA數據分析師證書考試體系(更新于2025年05月22日)
2025-05-26解碼數據基因:從數字敏感度到邏輯思維 每當看到超市貨架上商品的排列變化,你是否會聯想到背后的銷售數據波動?三年前在零售行 ...
2025-05-23在本文中,我們將探討 AI 為何能夠加速數據分析、如何在每個步驟中實現數據分析自動化以及使用哪些工具。 數據分析中的AI是什么 ...
2025-05-20當數據遇見人生:我的第一個分析項目 記得三年前接手第一個數據分析項目時,我面對Excel里密密麻麻的銷售數據手足無措。那些跳動 ...
2025-05-20在數字化運營的時代,企業每天都在產生海量數據:用戶點擊行為、商品銷售記錄、廣告投放反饋…… 這些數據就像散落的拼圖,而相 ...
2025-05-19在當今數字化營銷時代,小紅書作為國內領先的社交電商平臺,其銷售數據蘊含著巨大的商業價值。通過對小紅書銷售數據的深入分析, ...
2025-05-16Excel作為最常用的數據分析工具,有沒有什么工具可以幫助我們快速地使用excel表格,只要輕松幾步甚至輸入幾項指令就能搞定呢? ...
2025-05-15數據,如同無形的燃料,驅動著現代社會的運轉。從全球互聯網用戶每天產生的2.5億TB數據,到制造業的傳感器、金融交易 ...
2025-05-15大數據是什么_數據分析師培訓 其實,現在的大數據指的并不僅僅是海量數據,更準確而言是對大數據分析的方法。傳統的數 ...
2025-05-14CDA持證人簡介: 萬木,CDA L1持證人,某電商中廠BI工程師 ,5年數據經驗1年BI內訓師,高級數據分析師,擁有豐富的行業經驗。 ...
2025-05-13CDA持證人簡介: 王明月 ,CDA 數據分析師二級持證人,2年數據產品工作經驗,管理學博士在讀。 學習入口:https://edu.cda.cn/g ...
2025-05-12CDA持證人簡介: 楊貞璽 ,CDA一級持證人,鄭州大學情報學碩士研究生,某上市公司數據分析師。 學習入口:https://edu.cda.cn/g ...
2025-05-09CDA持證人簡介 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度、美團、阿里等 ...
2025-05-07相信很多做數據分析的小伙伴,都接到過一些高階的數據分析需求,實現的過程需要用到一些數據獲取,數據清洗轉換,建模方法等,這 ...
2025-05-06以下的文章內容來源于劉靜老師的專欄,如果您想閱讀專欄《10大業務分析模型突破業務瓶頸》,點擊下方鏈接 https://edu.cda.cn/g ...
2025-04-30CDA持證人簡介: 邱立峰 CDA 數據分析師二級持證人,數字化轉型專家,數據治理專家,高級數據分析師,擁有豐富的行業經驗。 ...
2025-04-29CDA持證人簡介: 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度,美團,阿里等 ...
2025-04-28CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-27數據分析在當今信息時代發揮著重要作用。單因素方差分析(One-Way ANOVA)是一種關鍵的統計方法,用于比較三個或更多獨立樣本組 ...
2025-04-25CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-25