1.回歸的多面性
回歸類型 |
用途 |
簡單線性 |
個量化的解釋變量來預測一個量化的響應變量(一個因變量、一個自變量) |
多項式 |
一個量化的解釋變量預測一個量化的響應變量,,模型的關系是
n階多項式(一個預測變量,,但同時包含變量的冪) |
多元線性 |
用兩個或多個量化的解釋變量預測一個量化的響應變量(不止一個預測變量) |
多變量 |
用一個或多個解釋變量預測多個響應變量 |
Logistic |
用一個或多個解釋變量預測一個類別型變量 |
泊松 |
用一個或多個解釋變量預測一個代表頻數(shù)的響應變量 |
Cox比例風險 |
用一個或多個解釋變量預測一個事件(死亡、失敗或舊病復發(fā))發(fā)生的時間
時間序列對誤差項相關的時間序列數(shù)據(jù)建模
|
非線性 |
用一個或多個量化的解釋變量預測一個量化的響應變量,,不過模型是非線性的 |
非參數(shù) |
用一個或多個量化的解釋變量預測一個量化的響應變量,,模型的形式源
自數(shù)據(jù)形式,不事先設定 |
穩(wěn)健 |
用一個或多個量化的解釋變量預測一個量化的響應變量,,能抵御強影響點的干擾 |
|
|
2.OLS回歸
OLS回歸是通過預測變量的加權和來預測量化的因變量,,其中權重是通過數(shù)據(jù)估計而得以的參數(shù)。
使殘差平方和最小
為能夠恰當?shù)亟忉孫LS模型的系數(shù),,數(shù)據(jù)必須滿足以下統(tǒng)計假設:
(1) 正態(tài)性對于固定的自變量,,因變量值成正態(tài)分布
(2) 獨立性 Yi值之間相互獨立
(3) 線性 因變量與自變量之間為線性相關
(4) 同方差性因變量的方差不隨自變量的水平不同而變化,即不變方差或同方差性
3. 用lm()擬合回歸模型
擬合線性模型最基本的函數(shù)就是lm(),,格式為:
myfit<-lm(formula,data)
formula指要擬合的模型形式,,data是一個數(shù)據(jù)框,,包含了用于擬合模型的數(shù)據(jù)
formula形式如下:Y~X1+X2+……+Xk (~左邊為響應變量,右邊為各個預測變量,,預測變量之間用+符號分隔)
R表達式中常用的符號
|
符號
|
用途
|
~
|
分隔符號,,左邊為響應變量,右邊為解釋變量,,eg:要通過x,、z和w預測y,代碼為y~x+z+w
|
+
|
分隔預測變量
|
:
|
表示預測變量的交互項 eg:要通過x,、z及x與z的交互項預測y,,代碼為y~x+z+x:z
|
*
|
表示所有可能交互項的簡潔方式,代碼y~x*z*w可展開為y~x+z+w+x:z+x:w+z:w+x:z:w
|
^
|
表示交互項達到某個次數(shù),,代碼y~(x+z+w)^2可展開為y~x+z+w+x:z+x:w+z:w
|
.
|
表示包含除因變量外的所有變量,,eg:若一個數(shù)據(jù)框包含變量x、y,、z和w,,代碼y~.可展開為y~x+z+w
|
-
|
減號,表示從等式中移除某個變量,,eg:y~(x+z+w)^2-x:w可展開為y~x+z+w+x:z+z:w
|
-1
|
刪除截距項,,eg:表示y~x-1擬合y在x上的回歸,并強制直線通過原點
|
I()
|
從算術的角度來解釋括號中的元素,。Eg:y~x+(z+w)^2將展開為y~x+z+w+z:w,。相反,代碼y~x+I((z+w)^2)將展開為y~x+h,,h是一個由z和w的平方和創(chuàng)建的新變量
|
function
|
可以在表達式中用的數(shù)學函數(shù),,例如log(y)~x+z+w表示通過x、z和w來預測log(y)
|
對擬合線性模型非常有用的其他函數(shù)
|
函數(shù)
|
用途
|
Summary()
|
展示擬合的詳細結(jié)果
|
Coefficients()
|
列出擬合模型的模型參數(shù)(截距項和斜率)
|
Cofint()
|
提供模型參數(shù)的置信區(qū)間(默認95%)
|
Fitted()
|
列出擬合模型的預測值
|
Residuals()
|
列出擬合模型的殘差值
|
Anova()
|
生成一個擬合模型的方差分析,,或者比較兩個或更多擬合模型的方差分析表
|
Vcov()
|
列出模型參數(shù)的協(xié)方差矩陣
|
AIC()
|
輸出赤池信息統(tǒng)計量
|
Plot()
|
生成評價擬合模型的診斷圖
|
Predict()
|
用擬合模型對新的數(shù)據(jù)集預測響應變量值
|
4. 簡單線性回歸
eg:
- fit<-lm(weight~height,data=women)
- summary(fit)
在Pr(>|t|)欄,,可以看到回歸系數(shù)(3.45)顯著不為0(p<0.001),表明身高每增加1英寸,,體重將預期地增加3.45磅
R平方項(0.991)表明模型可以解釋體重99.1%的方差,,它也是實際和預測值之間的相關系數(shù)(R^2=r^2)
殘差的標準誤(1.53lbs)則可認為模型用身高預測體重的平均誤差
F統(tǒng)計量檢驗所有的預測變量預測響應變量是否都在某個幾率水平之上
- plot(women$height,women$weight,
- xlab="Height (in inches)",
- ylab="Weight(in pounds)")
- abline(fit)
5. 多項式回歸
- fit2<-lm(weight~height+I(height^2),data=women)
- summary(fit2)
- plot(women$height,women$weight,
- xlab="Height(in inches)",
- ylab="Weight(in lbs)")
- lines(women$height,fitted(fit2))
一般來說,n次多項式生成一個n-1個彎曲的曲線
car包中的scatterplot()函數(shù),,可以很容易,、方便地繪制二元關系圖
- scatterplot(weight~height,
- data=women,
- spread=FALSE,
- lty.smooth=2,
- pch=19,
- main="Women Age 30-39",
- xlab="Height (inches)",
- ylab="Weight(lbs.)")
6.多元線性回歸
采用的數(shù)據(jù)集:state.x77
- states<-as.data.frame(state.x77[,c("Murder","Population","Illiteracy","Income","Frost")])
檢測二變量關系
- library(car)
- scatterplotMatrix(states,spread=FALSE,lty.smooth=2,main="Scatter Plot Matrix")
scatterplotMatrix()函數(shù)默認在非對角線區(qū)域繪制變量間的散點圖,并添加平滑(loess)和線性擬合曲線
多元線性回歸
- fit<-lm(Murder~Population+Illiteracy+Income+Frost,data=states)
- summary(fit)
7.有交互項的多元線性回歸
- fit<-lm(mpg~hp+wt+hp:wt,data=mtcars)
- summary(fit)
通過effects包中的effect()函數(shù),,可以用圖形展示交互項的結(jié)果
- fit<-lm(mpg~hp+wt+hp:wt,data=mtcars)
- summary(fit)
-
- install.packages("effects")
- library(effects)
- plot(effect("hp:wt",fit,
- list(wt=c(2.2,3.2,4.2))),multiline=TRUE)
8.回歸診斷
(1)標準方法
- fit<-lm(weight~height,data=women)
- par(mfrow=c(2,2))
- plot(fit)
正態(tài)性:當預測變量值固定時,,因變量成正態(tài)頒,則殘差圖也應是一個均值為0的正態(tài)頒,。正態(tài)Q-Q圖是在正態(tài)頒對應的值上,,標準化殘差的概率圖,若滿足正態(tài)假設,,則圖上的點應該落在嚇45度角的直線上,,若不是,則違反了正態(tài)性假設,。
獨立性:只能從收集的數(shù)據(jù)中來驗證,。
線性:若因變量與自變量線性相關,則殘差值與預測(擬合)值就沒有任務系統(tǒng)關聯(lián),,若存在關系,,則說明可能城要對回歸模型進行調(diào)整。
同方差性:若滿足不變方差假設,,則在位置尺度圖(Scale-Location Graph)中,,水平線周圍的點應隨機分布。
二次擬合診斷圖
- fit2<-lm(weight~height+I(height^2),data=women)
- par(mfrow=c(2,2))
- plot(fit2)
(2)改進的方法
(car包中的)回歸診斷實用函數(shù)
函數(shù) |
目的 |
qqPlot() |
分位數(shù)比較圖 |
durbinWatsonTest() |
對誤差自相關性做Durbin-Watson檢驗 |
crPlots() |
成分與殘差圖 |
ncvTest() |
對非恒定的誤差方差做得分檢驗 |
spreadLevelPlot() |
分散水平檢驗 |
outlierTest() |
Bonferroni離群點檢驗 |
avPlots() |
添加的變量圖形 |
inluencePlot() |
回歸影響圖 |
scatterplot() |
增強的散點圖 |
scatterplotMatrix() |
增強的散點圖矩陣 |
vif() |
方差膨脹因子 |
另gvlma包提供了對所有線性模型進行檢驗的方法
正態(tài)性:
與 plot()函數(shù)相比,,qqplot()函數(shù)提供了更為精確的正態(tài)假設檢驗方法,,畫出了n-p-1個自由度的t分布下的學生化殘差圖形,n為樣本大小,,p是回歸參數(shù)的數(shù)目(包括截距項)
eg:
- library(car)
- fit<-lm(Murder~Population+Illiteracy+Income+Frost,data=states)
- qqPlot(fit,labels=row.names(states),id.method="identify",simulate=TRUE,main="Q-Q Plot")
繪制學生殘差圖的函數(shù)
- residplot<-function(fit,nbreaks=10){
- z<-rstudent(fit)
- hist(z,breaks=nbreaks,freq=FALSE,
- xlab="Studnetized Residual",
- main="Distribution of Errors")
- rug(jitter(z),col="brown")
- curve(dnorm(x,mean=mean(z),sd=sd(z)),
- add=TRUE,col="blue",lwd=2)
- lines(density(z)$x,density(z)$y,
- col="red",lwd=2,lty=2)
- legend("topright",
- legend=c("Normal Curve","Kernel Density Curve"),
- lty=1:2,col=c("blue","red"),cex=0.7)}
- residplot(fit)
誤差的獨立性:
之前提到可依據(jù)收集數(shù)據(jù)判斷因變量是否獨立
car包中提供了一個可做Durbin-Watson檢驗的函數(shù),,可檢測誤差的序列相關性
線性:
可通過成分殘差圖即偏殘差圖,判斷因變量與自變量之間是否呈非線性關系,,也可以看是否不同于已設定線性模型的系統(tǒng)偏差,,圖形可用car包中crPlots()函數(shù)繪制
- library(car)
- crPlots(fit)
若圖形存在非線性,則說明可能對預測變量的函數(shù)形式建模不夠充分
car包提供了兩個有用的函數(shù),,可判斷誤差方差是否恒定
ncvTest()函數(shù)生成一個計分檢驗,,零假設為誤差方差不變
spreadLevelPlot()函數(shù)創(chuàng)建一個添加了最佳擬合曲線的散點圖,展示標準化殘差絕對值與擬合值的關系
檢驗同方差性:
- library(car)
- ncvTest(fit)
- spreadLevelPlot(fit)
(3)線性模型假設的綜合驗證
gvlma包中的gvlma()函數(shù)
- install.packages("gvlma")
- library(gvlma)
- gvmodel<-gvlma(fit)
- summary(gvmodel)
(4)多重共線性
VIF(Variance Inflation Factor,,方差膨脹因子)進行檢測
一般原則下,,(VIF)^1/2 >2表明存在多重共線性問題
- library(car)
- vif(fit)
- sqrt(vif(fit))>2
9.異常觀測值
(1)離群點
離群點指那些模型預測效果不佳的觀測點,通常有很大的,、或正或負的殘差,,正殘差說明模型低估了響應值,負殘差說明高佑了響應值
- library(car)
- outlierTest(fit)
outlierTest()函數(shù)是根據(jù)單個最大(或正或負)殘差值的顯著性來判斷是否有離群點,,若不顯著,,則說明數(shù)據(jù)集中沒有離群點,若顯著,,則必須刪除該離群點,,然后再檢驗是否還有其他離群點存在。
(2)高杠桿值點
高杠桿值觀測點,,即是與其他預測變量有關的離群點,,即它們是由許多異常的預測變量組合起來的,,與響應變量值沒有關系。
高杠桿值的觀測點可通過帽子統(tǒng)計量(hat statistic)判斷,。對于一個給定的數(shù)據(jù)集,,帽子均值為p/n,其中p是模型估計的參數(shù)數(shù)目(包含截距項),,n是樣本量,。一般來說,若觀測點的帽子值大于帽子均值的2或3倍,,則可認定為高杠桿值點,。
- hat.plot<-function(fit){
- p<-length(coefficients(fit))
- n<-length(fitted(fit))
- plot(hatvalues(fit),main="Index Plot of Hat Values")
- abline(h=c(2,3)*p/n,col="red",lty=2)
- identify(1:n,hatvalues(fit),names(hatvalues(fit)))
- }
- hat.plot(fit)
(3)強影響點
強影響點,即對模型參數(shù)估計值影響有些比例失衡的點,。例如,,當移除 模型的一個觀測點時模型會發(fā)生巨大的改變,那么需要檢測一下數(shù)據(jù)中是否存在強影響點,。
檢測方法
Cook距離,,或稱為D統(tǒng)計量 Cook's D值大于4/(n-k-1),則表明它是強影響點,,其中n為樣本量大小,,k是預測變量數(shù)目(有助于鑒別強影響點,但并不提供關于這些點如何影響模型的信息)
變量添加圖(added variable plot)(彌補了該缺陷)(對于每個預測變量Xk,,繪制Xk在其他k-1個預測變量上回歸的殘差值相對于響應變量在其他k-1個預測變量上回歸的殘差值的關系圖)
- cutoff<-4/(nrow(states)-length(fit$coefficients)-2)
- plot(fit,which=4,cook.levels=cutoff)
- abline(h=cutoff,lty=2,col="red")
- library(car)
- avPlots(fit,ask=FALSE,onepage=TRUE,id.method="identify")
car包中的influencePlot()函數(shù),,可將離群點、杠桿點和強影響點的信息整合到一幅圖形中
- library(car)
- influencePlot(fit,id.method="identify",main="Influence Plot",
- sub="Circle size if proportional to Cook's distance")
影響圖,??v坐標超過2或小于-2的州可被認為是離群點,水平軸超過0.2或0.3的州有高杠桿值(通常為預測值的組合),。圓圈大小與影響成比例,,圓圈很大的點可能是對模型估計造成的不成比例影響的強影響點。
10.改進的措施
(1)刪除觀測點
刪除觀測點可提高數(shù)據(jù)集對于 正態(tài)假設的擬合度,,而強影響點會干擾結(jié)果,,通常也會被刪除。刪除最大的離群點或強影響點,,模型需要重新擬合,,若離群點或強影響點仍然存在,重復以上過程直到獲得比較滿意的擬合,。
對刪除觀測點應持謹慎態(tài)度,。
(2)變量變換
當模型不符合正態(tài)性、線性或同方差性假設時,一個或多個變量的變換通??梢愿纳苹蛘{(diào)整模型效果,。
當模型違反了正態(tài)假設時,通??梢詫憫兞繃L試某種變換,。
car包中的powerTransform()函數(shù)
Box-Cox正態(tài)變換
- library(car)
- summary(powerTransform(states$Murder))
(3)增刪變量
改變模型的變量會影響模型的擬合度,增加或刪除變量
多重共線問題:嶺回歸
11.選擇“最佳”的回歸模型
(1)模型比較
anova()函數(shù)可比較兩個嵌套模型的擬合優(yōu)度
嵌套模型即指它的一個些項完全飲食在另一個模型中
用anova()函數(shù)比較
- fit1<-lm(Murder~Population+Illiteracy+Income+Frost,data=states)
- fit2<-lm(Murder~Population+Illiteracy,data=states)
- anova(fit2,fit1)
模型1嵌套在模型2中,,檢驗不顯著,基礎知識 不需要將Income和Frost添加到線性模型中,,可將它們從模型中刪除
AIC(Akaike Information Criterion,,赤池信息準則)可用來比較模型,考慮了模型的統(tǒng)計擬合度及用來擬合的參數(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)
(2)變量選擇
逐步回歸法(stepwise method):
向前逐步回歸(forward stepwise)每次添加一個預測變量到模型中,,直到添加變量不會使模型有所改進為止。
向后逐步回歸(backward stepwise)從模型包含所有預測變量開始,,一次刪除一個變量直到會降低模型質(zhì)量為止,。
向前向后逐步回歸(stepwise stepwise 逐步回歸)
MASS包中的steAIC()函數(shù)可實現(xiàn)逐步回歸模型,依據(jù)的是精確AIC準則
- 后向回歸
- library(MASS)
- fit1<-lm(Murder~Population+Illiteracy+Income+Frost,data=states)
- stepAIC(fit,direction="backward")
全子集回歸(all-subsets regression):
全子集回歸,,即所有可能的酣籃隊支被檢驗,,可選擇展示所有可能的結(jié)果,也可展示n個不同子集大?。ㄒ粋€,、兩個或多個預測變量)的最佳模型
可用leaps包中的regsubsets()函數(shù)實現(xiàn)
可通過R平方、調(diào)整R平方或Mallows Cp統(tǒng)計量等準則來選擇“最佳”模型
R平方是預測變量解釋響應變量的程度
調(diào)整R平方與之類似,,但考慮了模型的參數(shù)數(shù)目
Mallows Cp統(tǒng)計量也用來作為逐步回歸的判停規(guī)則,,對于一個好的模型,它的Cp統(tǒng)計量非常迫近于模型的參數(shù)數(shù)目(包括截距項)
- install.packages("leaps")
- library(leaps)
- leaps<-regsubsets(Murder~Population+Illiteracy+Income+Frost,data=states,nbest=4)
- plot(leaps,scale="adjr2")
- library(car)
- subsets(leaps,statistic="cp",main="Cp Plot for All Subsets Regression")
- abline(1,1,lty=2,col="red")
12. 深層次分析
(1)交叉驗證
交叉驗證即將一定比例的數(shù)據(jù)挑選出來作為訓練樣本,,另外的樣本作為保留樣本,,先在訓練樣本上獲取回歸方程,然后在保留樣本上做預測,。 由于保留樣本不涉及模型及參數(shù)的選擇,,該樣本可獲得比新數(shù)據(jù)更為精確的估計。
k重交叉難中,,樣本被分為k個子樣本,,輪流將k-1個子樣本組合作為訓練集,另外1個子樣本作為保留集,,這樣會獲得k個預測方程,,記錄k個保留樣本的預測表現(xiàn)結(jié)果,然后求其平均值?!井攏是觀測總數(shù)目,,k為n時,該方法又稱作刀切法(jackknifing)】
bootstrap包中的crossval()函數(shù)可實現(xiàn)k重交叉驗證
- install.packages("bootstrap")
- 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)
- fit2<-lm(Murder~Population+Illiteracy,data=states)
- shrinkage(fit2)
(2)相對重要性
- zstates<-as.data.frame(scale(states))
- zfit<-lm(Murder~Population+Income+Illiteracy+Frost,data=zstates)
- coef(zfit)
相對權重:是對所有可能子模型添加一個預測變量引起的R平方均增加量的一個近似值,。
- relweights<-function(fit,……){
- R<-cor(fit$model)
- nvar<-ncol(R)
- rxx<-R[2:nvar,2:nvar]
- rxy<-R[2:nvar,1]
- svd<-eigen(rxx)
- evec<-svd$vectors
- ev<-svd$values
- delta<-diag(sqrt(ev))
- lambda<-evec%*%delta%*%t(evec)
- lambdasq<-lambda^2
- beta<-solve(lambda)%*%rxy
- rsqrare<-colSums(beta^2)
- rawwgt<-lambdasq%*%beta^2
- import<-(rawwgt/rsquare)*100
- lbls<-names(fit$model[2:nvar])
- rownames(import)<-lbls
- colnames(import)<-"Weight"
- barplot(t(import),names.arg=lbls,
- ylab="% of R-Square",
- xlab="Predictor Variables",
- main="Relative Importance of Predictor Variables",
- sub=paste("R-Square=",round(rsquare,digits=3)),……)
- return(import)
- }
- fit<-lm(Murder~Population+Illiteracy+Income+Frost,data=states)
- relweights(fit,col="lightgrey")
|