計量經濟學

回歸 - 在存在異變異數的情況下測試自相關

  • January 20, 2018

我已經建構了一個線性時間序列回歸模型,並通過應用 OLS 估計了參數。我現在想測試適當的大樣本推斷的假設(漸近高斯馬爾可夫假設)是否得到滿足。

現在,我不確定如何測試殘差是否自相關。由於我的模型包含滯後因變數,我不能使用 Durbin-Watson 檢驗(因為我的自變數不是嚴格外生的)。在Wooldridge之後,我決定應用 Breusch-Godfrey 測試。但是殘差是異變異數的,我通過應用 Bresuch-Pagan 測試對其進行了測試。

Wooldridge說,在異變異數的情況下,不能應用通常的 Breusch-Godfrey 檢驗。在存在異變異數的情況下如何檢驗自相關?有什麼穩健的方法嗎?如果這有任何興趣 - 我正在使用 R,所以如果在 R 中有一個方法的實現(如果有的話)將會很有幫助。

編輯:我發現了一篇非常有趣的論文,它提出了一種處理該主題的方法:修改後的 Breusch-Godfrey 測試。連結: http: //www.naun.org/main/NAUN/mcs/17-542.pdf

然而,我沒有找到這個測試的​​任何實際實現。由於我(只是)一名本科生,我自己實施這些方法的可能性相當有限。所以我仍在尋找一種通用的方法/測試或方法。(而且我認為必須一種方法,因為我遇到的問題讓我覺得很常見。)謝謝!

**一般說明:**同變異數下的BG檢驗可以使用R包中的bgtest命令來完成。lmtest $ (n-p)R_{aux}^2 $ 連結中提到的版本僅在同變異數下有效。在存在異變異數的情況下,Wooldridge (1991, JoE)進行了討論(如您提到的 Wooldridge 教科書中所述)。

**我的想法:**我猜 Wooldridge 所做的是使用異變異數穩健變異數估計器。為此,(i) 獲得 OLS 殘差,(ii) 在 e(t-1)、…、e(tp) 和 X 上回歸 e(t),並測試 e(t-1) 的聯合顯著性, …, e(tp) 使用異變異數穩健共變異數估計。如果要使用 R,請對 AR(2) 執行以下操作:

DF <- data.frame(y=rnorm(100), x1=rnorm(100), x2=rnorm(100))
ols <- lm(y~x1+x2, data=DF)
DF$e <- ols$resid
DF$e1 <- c(NA,DF$e[-100])    # are there better ways to lag a variable?
DF$e2 <- c(NA,DF$e1[-100])
aux <- lm(e~e1+e2+x1+x2, data=DF)
library(car)
lht(aux, c('e1','e2'), white.adjust='hc3')

**討論:**也就是說,上面的回歸中存在生成回歸量的問題,即使用OLS回歸結果生成aux的一些RHS變數(e1和)。e2這通常會引起麻煩。但是,即使生成了回歸量,也可以進行一些測試。我想這是一個,但我還沒有正式檢查過。

進一步討論: BG測試是LM測試,而lhtWald測試。差異應該很小。

**模擬結果:**我做了模擬。普通的 BG 測試似乎失敗了。強化版本似乎有效。

library(car)
iterate <- 1000
n <- 400

ans <- data.frame(ord=rep(NA,iterate), rob=rep(NA,iterate))
set.seed(1)
for (iter in seq_len(iterate)) {
 x1 <- rnorm(n+1)
 x2 <- rnorm(n+1)
 u0 <- rnorm(n+1)
 u0[1:floor(n/2)] <- 2*u0[1:floor(n/2)]
 u <- sqrt(1+abs(x1+x2))*u0

 ## y(t) = 1+x1(t)+x2(t)+0.5*y(t-1)+u(t)
 y <- filter(1+x1+x2+u, 0.5, method='recursive')

 y1 <- y[-(n+1)]      # y(1), ..., y(n)
 y <- y[-1]           # y(2), ..., y(n+1)
 x1 <- x1[-1]         # x1(2), ..., x1(n+1)
 x2 <- x2[-1]         # x2(2), ..., x2(n+1)

 ols <- lm(y~x1+x2+y1)

 e <- ols$resid
 e1 <- c(NA,e[-n])    # NA, e(1), ..., e(n-1)
 e2 <- c(NA,e1[-n])   # NA, NA, e(1), ..., e(n-2)
 aux <- lm(e~e1+e2+x1+x2+y1)
 tst0 <- lht(aux, c('e1','e2'), white.adjust=FALSE)
 ans$ord[iter] <- as.numeric(tst0$`Pr(>F)`[2] < 0.05)
 tst1 <- lht(aux, c('e1','e2'), white.adjust=TRUE)
 ans$rob[iter] <- as.numeric(tst1$`Pr(>F)`[2] < 0.05)
}

print(colMeans(ans))
##   ord   rob
## 0.090 0.046

注意:我對模擬進行了很多編輯。我希望這個沒問題。

引用自:https://economics.stackexchange.com/questions/20170