R語言--回歸分析1(回歸分析、回歸診斷、模型綜合驗證)


1 OLS回歸(最小二乘法回歸)

1.1 lm()擬合回歸模型

R中,擬合線性模型最基本的函數是lm(),格式為:myfit<-lm(formula,data)

 

1.2 簡單線性回歸

dat<-women

fit<-lm(weight~height,data=dat)

summarize(fit)

 

結果分析:回歸方程weight = 3.45 height - 87.51667,這兩個估計值是否可靠呢,需要看Pr(>|t|)值,p值小於0.05,我們就認為它在95%的置信區間上是不為0的,它的統計是顯著的,簡單一點,只要有星星,結果就可以認為是可靠的,看擬合優度Adjusted R-squared0.9903,結果是非常好的,p-value是對整個方程的估計, p-value: 1.091e-14<0.05可以認為結果是可靠的

 

plot(dat$height,dat$weight)  #查看height和weight的散點圖(實際散點圖)

abline(fit)  #畫回歸線,查看擬合結果(估計出來的線)

 

結果分析:散點圖是實際的數據,回歸線基本在散點圖附近,說明擬合效果比較好

1.3 多項式回歸(身高和體重的平方)

fit1<-lm(weight~height+I(height^2),data=dat)  

解釋:為了防止錯誤識別^,加了一個I()函數,指出^是一個常規得符號

> summary(fit1)

 

結果分析:回歸方程weight = -7.34832height + 0.08306height^2 + 261.87818,這兩個估計值是否可靠,需要看Pr(>|t|)值,p值小於0.05,我們就認為它在95%的置信區間上是不為0的,它的統計是顯著的,簡單一點,只要有星星,結果就可以認為是可靠的,看擬合優度Adjusted R-squared0.9994,結果是非常好的,p-value是對整個方程的估計, p-value:  2.2e-16<0.05可以認為結果是可靠的,對比上一個可以看出這個擬合優度更高

plot(dat$height,dat$weight)  #畫散點圖

lines(dat$height,fitted(fit1))  

解釋:使用函數lines()畫線,abline()只適用於一元,要給出橫坐標dat$height,縱坐標fitted(fit1)

 

 

 

1.4 多元線性回歸(預測變量不止一個)

states<-as.data.frame(state.x77[,c("Murder",

           "Population","Illiteracy","Income","Frost")])

cor(states)  #列出是所有列變量兩兩之間的相關系數

 

 

 

 畫出全部兩兩變量之間的關系:

library(car)

scatterplotMatrix(states,spead=F,smooth.args=list(lty=2)

 

結果分析:對角線是單變量自己的分布情況,其他情況雖然點很復雜,但上面清晰的描述了一條實線,大致說明了變量之間的關系

 

fit2<-lm(Murder~Population+Illiteracy+Income+Frost,data=states)  #回歸分析

解釋:Murder是預測變量,Population+Illiteracy+Income+Frost是解釋變量

summary(fit2)

 

結果分析:Murder與Population和Illiteracy的關系后面的Pr(>|t|)小於0.05,后面有星星,說明他們之間的關系是顯著的,Murder與Income和Frost的關系后面的Pr(>|t|)大於0.05,后面也沒有星星,說明其關系不顯著,並且Income和Frost前面的系數 Estimate是正的,說明其與Murder是正相關,但是從上面的散點圖可以看出,估計出來的直線是向下的,即呈現負相關性,所以可以認為Murder與Income和Frost沒什么關系

 

 

錯誤:下標出界

 

修正:檢查列名是否寫正確

 

 

 

1.1 有交互項的多元線性回歸

交互項:響應變量與其中一個預測變量的關系還依賴另外一個預測變量的水平

 

fit3<-lm(mpg~hp+wt+hp:wt,data=mtcars)  #回歸分析,交互項用冒號 :連接

summary(fit3)

 

結果分析:可以看出mpg與hp和wt以及它們的交互項hp:wt都是有關系的,后面有星星,三顆星表示關系是最好的

 

2 回歸診斷

states<-as.data.frame(state.x77[,c("Murder",

           "Population","Illiteracy","Income","Frost")])

fit2<-lm(Murder~Population+Illiteracy+Income+Frost,data=states)  #回歸分析

解釋:Murder是預測變量,Population+Illiteracy+Income+Frost是解釋變量

summary(fit2)

confint(fit2)   #給出區間估計,95%的可能

 

 

2.1 標准方法

dat<-women  #確定數據集

fit<-lm(height~weight,data=dat)  #做回歸分析

summary(fit) 

opar<-par(no.readonly = T)

par(mfrow=c(2,2))  #畫圖

plot(fit) 

結果分析:右上角是Q-Q圖,反應樣本的正態性,樣本散點圖呈一條直線,基本認定是服從正太假設的;左上圖是觀察樣本的線性問題的,很明顯這個呈現是二次曲線,不滿足線性;左下角圖是觀察樣本的同方差性,如果是同方差性,這個線會在散點圖的上下兩側波動,這個圖是符合的;右下角圖是獨立性,觀察離群值

 

dat<-women

fit1<-lm(weight~height+I(height^2),data=dat)

opar<-par(no.readonly = T)

par(mfrow=c(2,2))

plot(fit1)

 

結果分析:右上角是Q-Q圖,反應樣本的正態性,樣本散點圖呈一條直線,基本認定是服從正太假設的;左上圖是觀察樣本的線性問題的,這次是擬合weightheight平方之間的關系,可以看出基本滿足線性;左下角圖是觀察樣本的同方差性,如果是同方差性,這個線會在散點圖的上下兩側波動,這個圖是符合的;右下角圖是獨立性,觀察離群值

 

2.2 改進方法

library(car)

1)正態性

states<-as.data.frame(state.x77[,c("Murder",

           "Population","Illiteracy","Income","Frost")])

fit2<-lm(Murder~Population+Illiteracy+Income+Frost,data=states)  #回歸分析

解釋:Murder是預測變量,Population+Illiteracy+Income+Frost是解釋變量

summary(fit2)

par(mfrow=c(1,1)) #把繪圖區域恢復

qqplot(fit2,labels=row.names(states),id.mentod="identify",

       simulate=T,main="QQ plot")

結果分析:大多數點置信區間(兩條虛線之間)范圍內,點基本在一條直線上,我們可以認為此樣本基本符合正太分布

 

這個州 Nevada 的估計值:

 

這個州 Nevada 的實際值:

 

結論:這個州的估計和實際差別很大,在實際應用中可以當離群點刪掉

 

錯誤:種類'list'目前沒有在'greater'里實現

 

修正:這里是為什么呢??

      后來仔細檢查了語句,單詞大小寫錯了

 

 

 

 2)獨立性

states<-as.data.frame(state.x77[,c("Murder",

           "Population","Illiteracy","Income","Frost")])

fit2<-lm(Murder~Population+Illiteracy+Income+Frost,data=states)  #回歸分析

解釋:Murder是預測變量,Population+Illiteracy+Income+Frost是解釋變量

durbinWatsonTest(fit2)

 

 結論分析:我們希望p-value的值越大越好,如何很大,就說明不相關,即互相獨立,基本上我們可以認為這些變量是互相獨立的

(3)線性

states<-as.data.frame(state.x77[,c("Murder",

                                   "Population","Illiteracy","Income","Frost")])

fit2<-lm(Murder~Population+Illiteracy+Income+Frost,data=states)

par(mfrow=c(2,2))

crPlots(fit2)  #畫成分殘差圖

 

結果分析:虛線是直線,是最小二乘法估計,我們需要看實線是否與虛線基本重合,若基本重合,我們認為是呈線性關系的

(4)同方差性

 ncvTest(fit2)

 

結果分析:跟上面一樣,P值越大越好,P越大說明其是同方差性的,滿足假設

 

2.3 線性模型假設的綜合驗證

install.packages("gvlma")

library(gvlma)

states<-as.data.frame(state.x77[,c("Murder",

           "Population","Illiteracy","Income","Frost")])

fit2<-lm(Murder~Population+Illiteracy+Income+Frost,data=states)  #回歸分析

解釋:Murder是預測變量,Population+Illiteracy+Income+Frost是解釋變量

gvmodel<-gvlma(fit2)

summary(gvmodel)

 

結果分析:這里后面都是acceptable,若是不接受,要一個個檢查上面四個圖

2.3.1 多重共線性

vif(fit2) 

 

結果分析:計算出這四個方差膨脹因子,書本上認為小於4就可以,實際上我們還是會計算一下相關系數

 

cor(states)  #做兩兩變量之間的相關性系數的比較

 

結果分析:一般對角線上的值越大越好,除對角線以外的矩陣數字最好不要大於0.7


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM