當有大量的候選變量中選擇最終的預測變量,有如下兩種流行方法函數
a、向前逐步迴歸(forward stepwise regression):每次添加一個預測變量到模型中,知道添加不會使模型有所改進爲止spa
b、向後逐步迴歸(back setpwise regression):從模型中全部的預測變量開始,每次逐步刪除一個變量直到會減低模型質量爲止code
c、向前向後逐步迴歸(stepwise stepwise regression,一般稱做逐步迴歸):結合了向前向後逐步迴歸和向後逐步迴歸的方法,變量每次進入一個,可是每一步中,變量都會被從新評價,對模型沒有貢獻的變量將會被刪除,預測變量可能會被添加、刪除好幾回,直到得到最優模型爲止orm
MASS包中的stepAIC()能夠實現逐步迴歸(向前、向後、向前向後),根據AIC值判斷,越小模型越優ci
> library(MASS) > states <- as.data.frame(state.x77[,c("Murder", "Population", + "Illiteracy", "Income", "Frost")]) > fit <- lm(Murder ~ Population + Illiteracy + Income + Frost, + data=states) > stepAIC(fit,direction = "backward") #direction = "backward"向後迴歸 Start: AIC=97.75 #這裏的AIC值表明僅接在後面的模型的AIC值 Murder ~ Population + Illiteracy + Income + Frost Df Sum of Sq RSS AIC - Frost 1 0.021 289.19 95.753 - Income 1 0.057 289.22 95.759 <none> 289.17 97.749 - Population 1 39.238 328.41 102.111 - Illiteracy 1 144.264 433.43 115.986 Step: AIC=95.75 Murder ~ Population + Illiteracy + Income Df Sum of Sq RSS AIC - Income 1 0.057 289.25 93.763 <none> 289.19 95.753 - Population 1 43.658 332.85 100.783 - Illiteracy 1 236.196 525.38 123.605 Step: AIC=93.76 Murder ~ Population + Illiteracy Df Sum of Sq RSS AIC <none> 289.25 93.763 - Population 1 48.517 337.76 99.516 - Illiteracy 1 299.646 588.89 127.311 Call: lm(formula = Murder ~ Population + Illiteracy, data = states) Coefficients: (Intercept) Population Illiteracy 1.6515497 0.0002242 4.0807366 #過程是逐步的刪除變量,直到最小的AIC值
能夠找到 一個好的模型,可是不能保證模型是最佳模型,由於不是每個可能的模型都被評價了,爲此須要使用全子集迴歸it
全子集迴歸就是指全部可能的模型都會被檢驗。分析員能夠選擇展現有可能的結果,也能夠展現不一樣 n 個不一樣子集大小(一個、兩個或多個預測變量)的最佳模型。例如,若nbest = 2,先展現兩個最佳的單預測變量模型,而後展現兩個最佳的雙預測變量模型,以此類推,直到包含全部的預測變量io
全子集迴歸可用 leaps包中regsubets()函數 來實現。經過 R 平方,調整的 R平方或 Mallows Cp統計量等準則來選擇「最佳」模型。form
經過調整 R^2或者調整R^2來獲選擇最佳模型變量
介紹方法
含義與預測變量與解釋響應變量的程度,調整 與之相似,但考慮了模型的參數數目, 總會隨着變量數目的增長而增長,當與樣本量相比 ,預測變量數目很大時,容易致使過擬合 , 極可能會丟失數據的偶然變異信息,而調整 則提供了更爲真實的 平方估計 。
另外,Mallows Cp 統計量也用來做爲逐步迴歸的判停規則,普遍研究代表,對於一個好的模型,它的 Cp 統計量很是接近於模型的參數數目(包括截距項)
#以下圖 > library(leaps) > states <- as.data.frame(state.x77[,c("Murder", "Population", + "Illiteracy", "Income", "Frost")]) > leaps <-regsubsets(Murder ~ Population + Illiteracy + Income + + Frost, data=states, nbest=4) #nbest =4 > plot(leaps, scale="adjr2")
第一行中(圖底部開始),能夠看到含intercept(截距項)和Income的模型調整R平方爲0.33,含intercept和POpulation的模型調整R平方爲0.1。調至第12行,你會看到intercetpt、Popilation、Illiteracy和Income的模型調整R平方值爲0.54,而僅含intercept、Population和Illiteracy的模型調整R平方爲0.55。此處你會發現含預測變量越少模型調整R平方越大(對與非調整的R平方,這是不可能的)。圖形代表,雙預測變量模型(Population和Illiterracy)是最佳模型。
Mallows Cp統計量也用來做爲逐步迴歸的判停規則,對於一個好的模型,它的Cp統計量很是接近於模型的參數數目(包括截距項)
使用leaps包中的plot()繪製函數,或者用car包中的subsets()函數繪製
#Mallows Cp統計量,以下圖 library(car) subsets(leaps,statistic = "cp", main ="Cp Plot for All Subsets Regressionn") abline(1,1,lty=2,col="red")
越好的模型離截項和斜率爲1的直線越近,圖形代表,你能夠選擇這幾個模型,其他的模型能夠不考慮,含Population和Illiteracy的雙變量模型,含Population、Illiterary和Frost的三變量模型(它們在圖形上重疊了,不易分別),含 Population、Illiteracy、Income和Frost的四變量模型
大部分狀況中,全子集迴歸要優於逐步迴歸,由於考慮了跟過的模型,但當有大量預測變量時,全子集迴歸會很慢。