在「R與生物統計專題」中,我們會從介紹R的基本知識展開到生物統計原理及其在R中的實現。以從淺入深,層層遞進的形式在投必得醫學公眾號更新。
在我們學習了線性回歸和邏輯回歸等回歸模型對連續型變量或分類變量進行預測模型建模(可點擊上面「R與生物統計專題」進一步查找詳情)。同時,我們也在之前的講解中,多次提到,如果預測變量(自變量)與結果變量(因變量)間不相關,即該預測模型的係數b與0無統計學差異,我們在最終的預測模型中,需要將該預測變量刪除。
那麼,假如我們有很多個預測變量,想要一一確定這些預測變量是否真對結果變量起到了預測功能,我們有沒有辦法讓這個「刪除」變量的步驟可以自動實現呢?於是我們引入了逐步回歸。
逐步回歸的基本思想是將變量逐個引入模型,每引入一個預測變量(解釋變量)後都要進行F檢驗(第十九講 F檢驗:兩樣本方差比較),並對已經選入的預測變量逐個進行t檢驗(第十講 R-兩獨立樣本t檢驗),當原來引入的預測變量由於後面預測變量的引入變得不再顯著時,則將其刪除。以確保每次引入新的變量之前回歸方程中只包含顯著性變量。這是一個反覆的過程,直到既沒有顯著的預測變量選入回歸方程,也沒有不顯著的預測變量從回歸方程中剔除為止。以保證最後所得到的預測變量集是最優的。
依據上述思想,可利用逐步回歸篩選並剔除引起多重共線性的變量(第三十七講 R-多元線性回歸中的多重共線性和方差膨脹因子),其具體步驟如下:先用結果變量對每一個所考慮的預測變量做簡單回歸,然後以對結果變量貢獻最大的預測變量所對應的回歸方程為基礎,再逐步引入其餘預測變量。經過逐步回歸,使得最後保留在模型中的解釋變量既是重要的,又沒有嚴重多重共線性。
逐步回歸有三種實現策略,我們一般指的逐步回歸為第三種:
1.正向(Forward)選擇,從模型中沒有預測因素開始,反覆添加最有幫助的預測因素,直到沒有顯著的預測變量選入回歸方程 。
2.向後(Backward)選擇(也稱向後消除),從完整模型(即包含所有可能預測變量的模型)中的所有預測變量開始,以迭代方式刪除貢獻最小的預測變量,直到沒有不顯著的預測變量從回歸方程刪除。
3.逐步(stepwise)選擇(也稱順序替換),這是向前和向後選擇的組合。您從沒有預測變量開始,然後順序添加最有貢獻的預測變量(例如正向選擇)。添加每個新變量後,刪除所有不再改善模型擬合的變量(例如向後選擇),直到既沒有顯著的預測變量選入回歸方程,也沒有不顯著的預測變量從回歸方程中剔除為止。
·正向選擇和逐步選擇可以應用在高維數據情況下,即樣本數量n小於預測變量p的數量,例如在基因組領域,全基因組數量遠大於測試人群。
·向後選擇要求樣本數n大於變量p數,以便可以擬合整個模型。
·tidyverse 便於數據操作和可視化
·caret 簡化工作流程
·leaps 用於計算逐步回歸
library(tidyverse)library(caret)library(leaps)
我們將使用R的內置數據集swiss。
library(datasets)data("swiss")
Fertility Agriculture Examination Education Catholic Infant.Mortality1 77.3 89.7 5 2 100.00 18.32 76.1 35.3 9 7 90.57 26.63 83.1 45.1 6 9 84.84 22.2
研究問題:根據社會經濟相關的多個指標(Agriculture,Examination,Education,Catholic,Infant.Mortality)預測生育力得分(Fertility)。
有許多函數和R包可用於計算逐步回歸。
·stepAIC()[MASS包],它根據AIC值選擇最佳模型。它具有一個選項direction,該選項可以選擇以下值:
「both」(用於逐步回歸 )
「backward」(用於後向選擇)
「forward」(用於前向選擇)
它會返回最佳的最終模型。
備註:
AIC:(Akaike information criterion,簡稱AIC)是評估統計模型的複雜度和衡量統計模型「擬合」優度的指標之一。
建立完全模型
full.model<-lm(Fertility~.,data=swiss)summary(full.model)
輸出結果
Call:lm(formula = Fertility ~ ., data = swiss) Residuals: Min 1Q Median 3Q Max -15.2743 -5.2617 0.5032 4.1198 15.3213 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 66.91518 10.70604 6.250 1.91e-07 *** Agriculture -0.17211 0.07030 -2.448 0.01873 * Examination -0.25801 0.25388 -1.016 0.31546 Education -0.87094 0.18303 -4.758 2.43e-05 *** Catholic 0.10412 0.03526 2.953 0.00519 ** Infant.Mortality 1.07705 0.38172 2.822 0.00734 ** --- Signif. codes: 0 『***』 0.001 『**』 0.01 『*』 0.05 『.』 0.1 『 』 1 Residual standard error: 7.165 on 41 degrees of freedom Multiple R-squared: 0.7067, Adjusted R-squared: 0.671 F-statistic: 19.76 on 5 and 41 DF, p-value: 5.594e-10
逐步回歸
step.model <- stepAIC(full.model,direction = "both", trace =FALSE) summary(step.model)
Call:lm(formula = Fertility ~ Agriculture + Education + Catholic + Infant.Mortality, data = swiss) Residuals: Min 1Q Median 3Q Max -14.6765 -6.0522 0.7514 3.1664 16.1422 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 62.10131 9.60489 6.466 8.49e-08 ***Agriculture -0.15462 0.06819 -2.267 0.02857 * Education -0.98026 0.14814 -6.617 5.14e-08 ***Catholic 0.12467 0.02889 4.315 9.50e-05 ***Infant.Mortality 1.07844 0.38187 2.824 0.00722 **---Signif. codes: 0 『***』 0.001 『**』 0.01 『*』 0.05 『.』 0.1 『 』 1 Residual standard error: 7.168 on 42 degrees of freedomMultiple R-squared: 0.6993, Adjusted R-squared: 0.6707F-statistic: 24.42 on 4 and 42 DF, p-value: 1.717e-10
train()函數[caret包]提供了一個簡單的工作流程,可以使用leaps包和MASS包進行逐步選擇。它有一個名為的選項method,可以選擇以下值:
"leapBackward",以使線性回歸與向後選擇相適應
"leapForward",以使線性回歸與正向選擇相適應
"leapSeq",以逐步選擇擬合線性回歸
您還需要指定調整參數nvmax,該參數對應於要納入模型的最大預測變量數。
例如,您可以nvmax在1到5之間變化。在這種情況下,該函數從搜索大小不同的最佳模型開始,一直到最佳有5個預測變量數的變量模型。也就是說,它搜索最佳的1變量模型,最佳2變量模型,…,最佳5變量模型。
以下示例method = "leapBackward"使用swiss數據集執行後向選擇,根據社會經濟指標確定預測生育力的最佳模型。
由於數據集僅包含5個預測變量,因此我們將nvmax在1到5 個變量之間變化,以識別出具有不同大小的5種最佳模型:最佳1變量模型,最佳2變量模型,…,最佳5變量模型。
我們將使用10倍交叉驗證來估計5個模型中每個模型的平均預測誤差(RMSE)(第四十二講 R-回歸預測模型的交叉驗證)。RMSE統計量用於比較5個模型並自動選擇最佳模型,其中最佳定義為RMSE最小的模型。
install.packages('leaps')library(leaps)library(MASS)
設立隨機數種子
設置重複的k倍交叉驗證
train.control <- trainControl(method = "cv",number = 10)
訓練模型
step.model <- train(Fertility ~.,data =swiss, method = "leapBackward", tuneGrid =data.frame(nvmax = 1:5), trControl =train.control )step.model$results輸出結果
nvmax RMSE Rsquared MAE RMSESD RsquaredSD MAESD1 1 9.30 0.408 7.91 1.53 0.390 1.652 2 9.08 0.515 7.75 1.66 0.247 1.403 3 8.07 0.659 6.55 1.84 0.216 1.574 4 7.27 0.732 5.93 2.14 0.236 1.675 5 7.38 0.751 6.03 2.23 0.239 1.64
上面的輸出顯示了不同的指標及其標準誤,用於比較5種最佳模型的準確性。各列內容是:
在我們的示例中,可以看到具有4個變量(nvmax = 4)的模型是具有最低RMSE的模型。您可以顯示由train()函數自動選擇的最佳調整值(nvmax),如下所示:
這表明最好的模型是nvmax = 4個變量的模型。該函數summary()報告每種模型大小的最佳變量集,直到最佳的4變量模型。
summary(step.model$finalModel)Subset selection object 5 Variables (and intercept) Forced in Forced out Agriculture FALSE FALSE Examination FALSE FALSE Education FALSE FALSE Catholic FALSE FALSE Infant.Mortality FALSE FALSE1 subsets of each size up to 4 Selection Algorithm: backward Agriculture Examination Education Catholic Infant.Mortality 1 ( 1 ) " " " " "*" " " " " 2 ( 1 ) " " " " "*" "*" " " 3 ( 1 ) " " " " "*" "*" "*" 4 ( 1 ) "*" " " "*" "*" "*"
星號指定給定變量是否包含在相應的模型中。例如,可以看出最好的4變量模型包含Agriculture,Education,Catholic,和Infant.Mortality。Fertility ~ Agriculture + Education + Catholic + Infant.Mortality。
最終模型的回歸係數(id = 4)可以按以下方式訪問:
coef(step.model$finalModel, 4)輸出結果
(Intercept) Agriculture Education Catholic Infant.Mortality 62.1013116 -0.1546175 -0.9802638 0.1246664 1.0784422
或者,僅使用選定的預測變量來計算線性模型:
lm(Fertility ~ Agriculture + Education + Catholic + Infant.Mortality, data = swiss)輸出結果
Call:lm(formula = Fertility ~ Agriculture + Education + Catholic + Infant.Mortality, data = swiss) Coefficients: (Intercept) Agriculture Education Catholic 62.101 -0.155 -0.980 0.125 Infant.Mortality 1.078
參考內容:
1. Alboukadel Kassambara, Machine Learning Essentials: Practical Guide in R
2. 百度百科:逐步回歸
在之後的更新中,我們會進一步為您介紹R的入門,以及常用生物統計方法和R實現。歡迎關注,投必得學術手把手帶您走入R和生物統計的世界。提前預告一下,下一講我們將學習 R-分類預測模型及診斷性試驗性能指標。
當然啦,R語言的掌握是在長期訓練中慢慢積累的。一個人學習太累,不妨加入「R與統計交流群」,和數百位碩博一起學習。
快掃二維碼撩客服,
帶你進入投必得學術交流群,
讓我們共同進步!
↓↓
來源:投必得醫學R與生物統計
聲明:本文僅做學術分享,版權歸原作者所有,並不代表本平臺的觀點,如有侵權,請先聯繫topedit2021刪除,萬分感謝!
發表SCI論文很迷茫?
來找「投必得」幫忙↓↓↓