今天是各類統(tǒng)計方法R語言實現(xiàn)的第七期,我們主要介紹多重共線性、異常觀察值的分析和回歸模型改進措施。 多重共線性多重共線性是指線性回歸模型中的解釋變量之間由于存在強相關(guān)關(guān)系而使模型估計失真或難以估計準(zhǔn)確,它會導(dǎo)致模型參數(shù)的置信區(qū)間過大,使參數(shù)解釋較困難。 多重共線性可用VIF(Variance Inflation Factor,方差膨脹因子)進行檢測,該指標(biāo)的經(jīng)驗判斷方法:VIF在5到10之間:中度共線性。VIF大于10:重度共線性。 多重共線性解決方法
fit<-lm(mpg~hp+wt,data=mtcars) ##展示模型 summary(fit) ## ## Call: ## lm(formula = mpg ~ hp + wt, data = mtcars) ## ## Residuals: ## Min 1Q Median 3Q Max ## -3.941 -1.600 -0.182 1.050 5.854 ## ## Coefficients: ## Estimate Std. Error t value Pr(>|t|) ## (Intercept) 37.22727 1.59879 23.285 < 2e-16 *** ## hp -0.03177 0.00903 -3.519 0.00145 ** ## wt -3.87783 0.63273 -6.129 1.12e-06 *** ## --- ## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 ## ## Residual standard error: 2.593 on 29 degrees of freedom ## Multiple R-squared: 0.8268, Adjusted R-squared: 0.8148 ## F-statistic: 69.21 on 2 and 29 DF, p-value: 9.109e-12 #計算vif library(car) ## Loading required package: carData vif(fit) ## hp wt ## 1.766625 1.766625 不存在多重共線性 異常觀測值上次推文已經(jīng)介紹了異常觀測值主要有三類:離群值點、高杠桿值點、強影響點,具體如下: a.離群點:擬合回歸模型對其預(yù)測效果不佳(即殘差的絕對值較大)。 b.有高杠桿值的變量表明它是一個異常的自變量組合。 c.強影響點表明他對模型參數(shù)的估計產(chǎn)生的影響過大。 離群點之前已經(jīng)介紹在標(biāo)準(zhǔn)化殘差的QQ圖中,偏離其他值的異常點可能是離群點,一般認(rèn)為標(biāo)準(zhǔn)化殘差絕對值大于2的點為離群點。 接下來介紹另一種判斷離群值的方法,即使用car包中的outlierTest()函數(shù)。 fit2<-lm(weight ~ height + I(height^2),data = women)summary(fit2) ## ## Call: ## lm(formula = weight ~ height + I(height^2), data = women) ## ## Residuals: ## Min 1Q Median 3Q Max ## -0.50941 -0.29611 -0.00941 0.28615 0.59706 ## ## Coefficients: ## Estimate Std. Error t value Pr(>|t|) ## (Intercept) 261.87818 25.19677 10.393 2.36e-07 *** ## height -7.34832 0.77769 -9.449 6.58e-07 *** ## I(height^2) 0.08306 0.00598 13.891 9.32e-09 *** ## --- ## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 ## ## Residual standard error: 0.3841 on 12 degrees of freedom ## Multiple R-squared: 0.9995, Adjusted R-squared: 0.9994 ## F-statistic: 1.139e+04 on 2 and 12 DF, p-value: < 2.2e-16 library(car) outlierTest(fit2) ## No Studentized residuals with Bonferroni p < 0.05 ## Largest |rstudent|: ## rstudent unadjusted p-value Bonferroni p ## 15 2.575781 0.025783 0.38675 可以看出15號點p=0.38675,不顯著,表明沒有離群點。注意:outlierTest()函數(shù)是根據(jù)單個最大殘差值(絕對值)的顯著性來判斷是否有離群點,若不顯著,則說明數(shù)據(jù)集中沒有離群點,若顯著,則必須刪除該離群點,然后再檢驗是否還有其他離群點存在。 高杠桿值點有高杠桿值的變量表明它是一個異常的自變量組合,即由許多異常的自變量組合起來的異常點,與因變量值沒有關(guān)系。 高杠桿值的觀測點可通過帽子統(tǒng)計量(hat statistic)判斷。對于一個給定的數(shù)據(jù)集,帽子均值為p/n,其中p是模型估計的參數(shù)數(shù)目(包含截距項),n是樣本量。 一般來說,若觀測點的帽子值大于帽子均值的2或3倍,則可認(rèn)定為高杠桿值點。 hat.plot<-function(fit){p<-length(coefficients(fit)) n<-length(fitted(fit)) plot(hatvalues(fit),main="Index Plot of Hat Values",ylim=c(0,3*p/n)+0.2) abline(h=c(2,3)*p/n,col="red",lty=2) identify(1:n,hatvalues(fit),names(hatvalues(fit))) } hat.plot(fit2) 簡化代碼 ##簡化代碼hat<-hatvalues(fit2) hat_mean<-mean(hat) plot(hat,ylim=c(0,3*hat_mean)) abline(h=c(2,3)*mean(hatvalues(fit2)) , col="red",lty=2) 水平的兩根紅線表示帽子均值的2和3倍,可以看出1號點和15號點超過了2倍但沒到3倍。 強影響點表明某點對模型參數(shù)的估計產(chǎn)生的影響過大,即移除該點,模型會發(fā)生巨大的變化。 檢測方法: Cook距離,或稱為D統(tǒng)計量:Cook’s D值大于4/(n-k-1),則表明它是強影響點,其中n為樣本量大小,k是預(yù)測變量數(shù)目(有助于鑒別強影響點,但并不提供關(guān)于這些點如何影響模型的信息) 變量添加圖(added variable plot):對于每個預(yù)測變量Xk,繪制Xk在其他k-1個預(yù)測變量上回歸的殘差值相對于響應(yīng)變量在其他k-1個預(yù)測變量上回歸的殘差值的關(guān)系圖。 #Cook距離cutoff<-4/(nrow(women)-length(fit2$coefficients)-2) plot(fit2,which=4,cook.levels=cutoff) abline(h=cutoff,lty=2,col="red") 紅線表示4/(n-k-1),可以發(fā)現(xiàn)15號cook距離最大,與上次推文結(jié)果一致。 #變量添加圖library(car) avPlots(fit2,ask=FALSE,onepage=TRUE,id.method="identify") 對于此圖,可以想象去掉某一個點之后,直線擬合是否會有大范圍變動,此處15號點的影響在所有點中算是比較大的了。 結(jié)果整合car包中的influencePlot()函數(shù) hat<-hatvalues(fit2)hat_mean<-mean(hat) library(car) influencePlot(fit2,id.method="identify",main="Influence Plot", sub="Circle size if proportional to Cook's distance", xlim=c(0,3*hat_mean)) ## 1 -0.3527249 0.4647059 0.03883656 ## 2 -1.5156988 0.2680672 0.25310078 ## 13 -1.5312900 0.1656755 0.13956756 ## 15 2.5757809 0.4647059 1.30646190 本質(zhì)上是將三個值繪制在一張圖里。 縱坐標(biāo)超過2或小于-2的點可被認(rèn)為是離群點,水平軸超過2倍或3倍帽子值均值的點有高杠桿值。圓圈大小與影響成比例,圓圈很大的點可能是對模型估計造成的不成比例影響的強影響點。 回歸模型改進措施主要有四種方法: (1)刪除異常值. (2)變量變換。 (3)添加或刪除變量。 (4)使用其他回歸方法。 刪除異常值通常刪除離群點和強影響點,直到擬合較滿意。 當(dāng)然刪除要謹(jǐn)慎,可以探究產(chǎn)生異常值的原因。 變量變換可以嘗試各類變換方法,使變量滿足正態(tài)性、線性、同方差性假設(shè),可以嘗試之前各類統(tǒng)計方法R語言實現(xiàn)(四)介紹的方法,但是變量變換之后需要有具體意義。 添加或刪除變量可以刪除多重共線性的變量(根據(jù)VIF),也可以嶺回歸或lasso回歸。 使用其他回歸方法存在離群點或強影響點,可使用穩(wěn)健回歸代替最小二乘回歸。 違背了正態(tài)性假設(shè),可以用非參數(shù)回歸模型。 存在顯著非線性,可以使用非線性模型。 違背了誤差獨立性假設(shè),可以使用專門研究誤差結(jié)構(gòu)的模型,如時間序列模型或多層次回歸模型。 最后,還能依據(jù)數(shù)據(jù)的分布形式選擇不同的廣義線性模型。 好了,今天的R語言實現(xiàn)統(tǒng)計方法系列推文暫時告一段落,我們下次再見吧!小伙伴們?nèi)绻惺裁唇y(tǒng)計上的問題,或者如果想要學(xué)習(xí)什么方面的生物信息內(nèi)容,可以在微信群或者知識星球提問,沒準(zhǔn)哪天的推文就是專門解答你的問題哦! |
|