R語言與回歸分析幾個假設的檢驗

一、從線性回歸的假設說起

對於線性回歸而言,若要求回歸估計有一些良好性質比如無偏性,就需要加上一些假定條件。比如要達到估計的無偏性,我們通常需要加上高斯-馬爾科夫條件:

A1、對參數而言的線性性

A2、樣本的隨機抽樣性

A3、誤差的條件均值為0

A4、不存在完全共線性

A5、同方差假設

在上述條件上加上誤差項服從正態分佈,就得到了經典線性回歸模型的6大假定。保證了估計的良好性質。

現在我們來考慮一下這幾個條件,它們真的十分容易達到嗎?


我們先從比較容易滿足的的假設A4入手分析:完全共線性導致的結果是最小二乘的結果不唯一。所以這裡要求的是數據相關性不能為1,但並不是不能有相關性。導致完全共線性的原因不外乎以下三個:1、錯誤的將一系列已建立線性關係的因變數包括在處理的數據中(但其實這個的相關度還是達不到1的,但是會影響到回歸的效果,更加會影響到你的解釋)2、處理虛擬變數不當導致的錯誤。用r個虛擬變數表示離散變數取值時,多重共線性在所難免(這個是真正的完全共線性,因為離散變數表達了所有的情況)3、樣本量過小導致的無法識別。這個也只能增加樣本量來解決問題。


再來看A2,這個我們通過數據收集方式的先驗知識來判斷最優,我們不知道是也可以通過殘差的獨立性來看,在R的car包中提供了一個可做獨立性檢測(durbin-watson檢驗)的函數durbinWatsonTest()。該檢驗適用於時間獨立數據,對於非聚集型數據並不適用。

看A3說的是誤差項裏不包括自變數的任何信息,這個在作解釋是十分重要的。也可以證明均值為0的條件總是可以達到的,通過適當變換。

A1、A5就沒有那麼容易達到。雖然他們對無偏性的影響並不大,最小二乘的估計量仍是無偏且一致的(相合的),但是有效性時會受到影響的。

那麼,我們現在的問題就是如何判定這兩個假定成立?

二、異方差的線性回歸

關於異方差我們必須注意到這樣一個事實:即便誤差具有一致的方差,最小二乘殘差仍有不等的方差。我們可以通過對學生殘差(主要是排除一些異常值,讓數據平穩一些)根據擬合值繪製散點圖來辨別之。當然我們也有統計的辦法如Breusch-Pagan檢驗

在R中,擴展包lmtest中的Breusch-Pagan檢驗。或者利用car包中的ncv.test()函數。二者工作的原理都是相同的。在回歸之後,我們可以對擬合的模型採用bptest()函數

unrestricted<-lm(z~x)

bptest(unrestricted)

這將得到檢驗的「學生化的」(studentized)結果。如果為了保持與其他軟體結論的一致性(包括ncv.test()),我們可以設置studentize=FALSE

我們來看一個例子:以下數據取自伍德里奇的《計量經濟學導論》均保留原數據名

library(foreign)

B<-read.dta("D:/R/data/SAVING.dta")#導入數據

library(lmtest)

result2<-lm(sav~inc+size+educ+age+black,data=B)

bptest(result2)

studentized Breusch-Pagan test

data: result2

BP =5.5756, df = 5, p-value = 0.3497 #從這裡看得出數據是不具有異方差性的

C<-read.dta("D:/R/data/SMOKE.dta")

result3<-lm(cigs~log(income)+cigpric+educ+age+restaurn,data=C)

bptest(result3)

studentized Breusch-Pagan test

data: result3

BP =11.0583, df = 5, p-value = 0.05024#這裡可以認為數據有異方差性,但表現的不是特彆強烈

如果去掉「學生化」我們可以得到:

>result3<-lm(cigs~log(income)+cigpric+educ+age+restaurn,data=C)

>bptest(result3,studentize=FALSE)

Breusch-Pagan test

data: result3

BP =24.6376, df = 5, p-value = 0.0001637#這裡可以看出異方差性是很明顯的。

這也說明瞭學生化對異方差的修正作用。

對smoke數據作圖分析也可以得到一個不錯的,直觀的結果。

異方差的存在性影響ols估計量的有效性,使得t檢驗與F檢驗不再有效,所以存在異方差時,必須使用異方差穩健標準誤代替標準誤。一般的,我們使用white一致標準誤來做假設檢驗。

為了計算異方差一致性的協方差矩陣,我們可以利用car包中的hccm()函數,而不是vcov()。

sandwich包中的vcovHC()命令可以實現同樣的功能。同時利用vcovHAC()或者NeweyWest()函數可以進行異方差和自相關穩健性Newey—West估計(注1)。

library(sandwich)

NeweyWest(result3)

neweywest<- coeftest(result3, vcov = NeweyWest(result3))

print(neweywest)#得出穩健的估計

summary(result3)

對比兩個估計的結果:(注意P值的變化)

穩健估計的:

Estimate Std.Error t value Pr(>|t|)

(Intercept) -2.054967 8.496552 -0.2419 0.808951

log(income) 1.891021 0.642539 2.9430 0.003344 **

cigpric -0.004685 0.099792 -0.0469 0.962567

educ -0.377021 0.169621 -2.2227 0.026513 *

age -0.045268 0.023225 -1.9491 0.051633.

restaurn -2.945906 1.042941 -2.8246 0.004851 **

---

Signif.codes: 0 『***』 0.001 『**』 0.01 『*』 0.05『.』 0.1 『 』 1

直接回歸估計的:

Coefficients:

Estimate Std. Error t value Pr(>|t|)

(Intercept) -2.054967 8.778358 -0.234 0.81497

log(income) 1.891021 0.712092 2.656 0.00807 **

cigpric -0.004685 0.102518 -0.046 0.96356

educ -0.377021 0.167975 -2.244 0.02507 *

age -0.045268 0.028682 -1.578 0.11490

restaurn -2.945906 1.127952 -2.612 0.00918 **

---

Signif.codes: 0 『***』 0.001 『**』 0.01 『*』 0.05『.』 0.1 『 』 1

也可以看到協方差陣的變化:

vcovHAC(result3)

vcov(result3)

三、線性性的假設檢驗

car包中提供了一個函數可以自動的進行線性假設檢驗。根據我們對模型的設定,它既可以用一般的方法或調整後的協方差矩陣進行F或Wald檢驗。例如,如果我們有一個包括常數項的五個參數的模型,並且我們的零假設如下

H0:β0 =0, β3+β4=0

我們可以用如下的命令加以實現

unrestricted<-lm(y~x1+x2+x3+x4)

rhs<-c(0,1)

hm<-rbind<-(c(1,0,0,0,0),c(0,0,1,1,0))

linear.hypothesis(unrestricted,hm,rhs)

如果unrestricted是由lm得到的,默認狀態下將會進行F檢驗。如果是由glm得到的,取而代之的將是Kai方檢驗。檢驗的類型可以通過type進行修改。


同樣,如果我們想利用異方差或自相關穩健標準誤進行檢驗,我們既可以通過設定white.adjust=TRUE來使用white標準誤,也可以利用vcov計算我們自己的協方差矩陣。例如,如果我們想使用上述的Newey-West修正協方差矩陣,我們可以進行如下的設定:

linear.hypothesis(unrestricted,hm, rhs, vcov=NeweyWest(unrestricted))(注2)

四、附註

注1:Newey-West
的自相關異方差一致性估計:當異方差的形式未知的時候,加權最小二乘法(WLS)得到的估計結果雖然仍具有一致性,但是不在有效。為瞭解決這一問題,White(1980)提出了Heteroskedasticity
Consistent Covariances 方法使存在異方差時能夠對協方差矩陣進行一致性估計,而無須知道異方差的形式,但是 White
提出的方法假定序列的殘差是不存在自相關的,為瞭解決這一問題,Newey-West(1987)提出了一個更為一般的估計量,使存在異方差和自相關是仍然能對協方差矩陣進行一致性估計。

注2、設定white.adjust=TRUE將會通過提高white估計量的精度來修正異方差;如果要使用經典的white估計量,我們可以設定white.adjust="hc0"

注3、對於異方差檢驗的另一函數

調用library(lmtest)

Goldfeld-Quandt
Test,GQ檢驗的思想是先把時間序列數據按順序排列,然後截去一定數量的中間段數據,留下的數據就自然分成兩組,對這兩組數據各自回歸獲得各組的殘差平方和,把兩個殘差平方和除以各自的自由度,然後再相除,就獲得了GQ統計量,這是一個F統計量。GQ檢驗的零假設為回歸不存在異方差;備折假設則為存在異方差。

R語言中,使用函數gqtest()進行檢驗。

gqtest(formula, point=0.5, fraction=0, alternative=c("greater", "two.sided", order.by=NULL, data=list())

GQ檢驗的思想是對數據回歸得到殘差序列,然後把殘差作為被解釋變數,原方程各解釋變數作為解釋變數做回歸,得到bp的統計量

注4、異方差的手動演算法

## packages and data

library("AER")

data("CigarettesB")

## regression

cig_lm2 < - lm(packs ~ price + income, data = CigarettesB)

## auxiliary regression

aux <- residuals(cig_lm2)^2

aux_lm <- lm(aux ~ income * price + I(income^2) + I(price^2),

data = CigarettesB)

## test statistic

nrow(CigarettesB) * summary(aux_lm)$r.squared

pchisq( nrow(CigarettesB) * summary(aux_lm)$r.squared,df=5,lower.tail=F)

[1] 0.007896581


推薦閱讀:
相關文章