各類統(tǒng)計(jì)方法R語言實(shí)現(xiàn)(八)

今天是各類統(tǒng)計(jì)方法R語言實(shí)現(xiàn)的第八期,我們主要介紹選擇“最佳”回歸模型與深層次分析。

選擇“最佳”回歸模型

當(dāng)我們構(gòu)建回歸方程時(shí),我們一方面需要考慮是否去除不顯著的變量、是否需要添加交互項(xiàng)和/或多項(xiàng)式項(xiàng),另一方面還需要權(quán)衡方程的簡潔性和精度。

因此,我們希望最終構(gòu)建的“最佳”回歸方程,應(yīng)該至少兼有簡潔和有效兩個(gè)特點(diǎn)。

模型比較方法

方差分析

anova()函數(shù)可比較兩個(gè)嵌套模型的擬合優(yōu)度。嵌套模型即指一個(gè)模型的一個(gè)些項(xiàng)完全飲食在另一個(gè)模型中。

states <- as.data.frame(state.x77[,c("Murder","Population","Illiteracy","Income","Frost")])

fit1<-lm(Murder~Population+Illiteracy+Income+Frost,data=states)
fit2<-lm(Murder~Population+Illiteracy,data=states)
anova(fit2,fit1)
## Analysis of Variance Table
## 
## Model 1: Murder ~ Population + Illiteracy
## Model 2: Murder ~ Population + Illiteracy + Income + Frost
##   Res.Df    RSS Df Sum of Sq      F Pr(>F)
## 1     47 289.25                           
## 2     45 289.17  2  0.078505 0.0061 0.9939

p=0.9939,兩個(gè)模型無顯著差異,說明剔除模型1中的Income、Frost對(duì)于回歸結(jié)果影響不大。

AIC法

AIC即Akaike Information Criterion,赤池信息準(zhǔn)則,考慮了模型的統(tǒng)計(jì)擬合度及用來擬合的參數(shù)數(shù)目 。(不需要嵌套模型)

AIC值越小的模型可優(yōu)行選擇,說明模型用較少的參數(shù)獲得了足夠的擬合度

fit1<-lm(Murder~Population+Illiteracy+Income+Frost,
         data=states)
fit2<-lm(Murder~Population+Illiteracy,data=states)
AIC(fit1,fit2)
##      df      AIC
## fit1  6 241.6429
## fit2  4 237.6565

模型1的AIC為241.6429,模型2的AIC為237.6565,表面模型2效果更好,與方差分析法結(jié)果一致。

變量選擇

初步回歸法、全子集回歸法。

1、逐步回歸法

模型每次增加或刪除一個(gè)變量,直到達(dá)到某個(gè)判停準(zhǔn)則(如AIC),可分為向前、向后和雙向逐步回歸。

向前:每次添加一個(gè)預(yù)測變量到模型中,直到添加變量不會(huì)使模型有所改進(jìn)為止。

向后:從模型包含所有預(yù)測變量開始,一次刪除一個(gè)變量直到會(huì)降低模型質(zhì)量為止。

雙向:綜合向前向后。

##向后回歸
library(MASS)
fit1<-lm(Murder~Population+Illiteracy+Income+Frost,data=states)
stepAIC(fit1,direction="backward")
## Start:  AIC=97.75
## 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

一開始包含四個(gè)變量,Population + Illiteracy + Income + Frost,最終得到兩個(gè)變量Population + Illiteracy;AIC從97.75到95.75再到93.76,逐步降低。

2、全子集回歸法

全子集回歸,即所有可能的模型都會(huì)被檢驗(yàn),可選擇展示所有可能的結(jié)果,也可展示n個(gè)不同變量(一個(gè)、兩個(gè)或多個(gè)預(yù)測變量)的最佳模型

可通過模型R平方、調(diào)整R平方或Mallows Cp統(tǒng)計(jì)量等準(zhǔn)則來選擇“最佳”模型

調(diào)整R平方比R平方增加了模型參數(shù)數(shù)目信息。

##調(diào)整R平方
library(leaps)
leaps<-regsubsets(Murder~Population+Illiteracy+Income+Frost,data=states,nbest=4)
plot(leaps,scale="adjr2")
image.png

該圖第一行包含兩個(gè)變量Population + Illiteracy,調(diào)整后的R平方最高,是最佳模型,和向后回歸結(jié)果一致。

大部分情況全子集回歸法較逐步回歸法更優(yōu)。

深層次分析

評(píng)價(jià)模型泛化能力和變量相對(duì)重要性的方法,包括交叉驗(yàn)證和相對(duì)重要性。

1、交叉驗(yàn)證

交叉驗(yàn)證是模型內(nèi)驗(yàn)證的一種方法,將一定比例的數(shù)據(jù)挑選出來作為訓(xùn)練樣本,另外的樣本作為保留樣本,先在訓(xùn)練樣本上獲取回歸方程,然后在保留樣本上做預(yù)測。 由于保留樣本不涉及模型及參數(shù)的選擇,該樣本可獲得比新數(shù)據(jù)更為精確的估計(jì)。

最常用的交叉驗(yàn)證方法是k重交叉驗(yàn)證,在k重交叉驗(yàn)證中,樣本被平均分為k個(gè)子樣本,輪流將k-1個(gè)子樣本組合作為訓(xùn)練集,另外1個(gè)子樣本作為保留集,這樣會(huì)獲得k個(gè)預(yù)測方程,記錄k個(gè)保留樣本的預(yù)測表現(xiàn)結(jié)果,然后求其平均值。

#10重交叉驗(yàn)證
set.seed(123)
library(bootstrap)
shrinkage<-function(fit,k=10){
  require(bootstrap)
  theta.fit<-function(x,y){lsfit(x,y)}
  theta.predict<-function(fit,x){cbind(1,x)%*%fit$coef}
  x<-fit$model[,2:ncol(fit$model)]
  y<-fit$model[,1]
  results<-crossval(x,y,theta.fit,theta.predict,ngroup=k)
  r2<-cor(y,fit$fitted.values)^2
  r2cv<-cor(y,results$cv.fit)^2
  cat("Original R-square=",r2,"\n")
  cat(k,"Fold Cross-Validated R-square=",r2cv,"\n")
  cat("Change=",r2-r2cv,"\n")
}
fit<-lm(Murder~Population+Income+Illiteracy+Frost,data=states)
shrinkage(fit)
## Original R-square= 0.5669502 
## 10 Fold Cross-Validated R-square= 0.492987 
## Change= 0.0739632
fit2<-lm(Murder~Population+Illiteracy,data=states)
shrinkage(fit2)
## Original R-square= 0.5668327 
## 10 Fold Cross-Validated R-square= 0.5296188 
## Change= 0.03721387

R平方減少越少,結(jié)果越精確,可以看到第二個(gè)模型更穩(wěn)健,泛化能力更強(qiáng)。

2、相對(duì)重要性

評(píng)價(jià)模型中哪個(gè)指標(biāo)更重要,最簡單的方法是比較標(biāo)準(zhǔn)化的回歸系數(shù)。

#z-score標(biāo)準(zhǔn)化
zstates<-as.data.frame(scale(states))
zfit<-lm(Murder~Population+Income+Illiteracy+Frost,data=zstates)
coef(zfit)
##   (Intercept)    Population        Income    Illiteracy         Frost 
## -2.054026e-16  2.705095e-01  1.072372e-02  6.840496e-01  8.185407e-03

Illiteracy最重要, Frost最不重要。

最小二乘回歸小結(jié)

前幾次推文主要介紹了最小二乘回歸,尤其是簡單線性回歸相關(guān)的分析,可以看出構(gòu)建一個(gè)回歸模型有許多注意事項(xiàng)和技巧,當(dāng)然,之前的大多數(shù)方法有一個(gè)前提,即變量服從正態(tài)分布,那么假如我們的變量不服從正態(tài)分布怎么辦呢?因此,之后一段時(shí)間,我們將介紹重抽樣法、自主法與廣義線性回歸。

好了,今天的R語言實(shí)現(xiàn)統(tǒng)計(jì)方法系列推文暫時(shí)告一段落,我們下次再見吧! 小伙伴們?nèi)绻惺裁唇y(tǒng)計(jì)上的問題,或者如果想要學(xué)習(xí)什么方面的生物信息內(nèi)容,可以在微信群或者知識(shí)星球提問,沒準(zhǔn)哪天的推文就是專門解答你的問題哦!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評(píng)論聯(lián)系作者。

友情鏈接更多精彩內(nèi)容