2015-05-02 23 views
1

這是我想要做什麼:R:HAC通過NeweyWest使用dynlm

library("lmtest") 
library("dynlm") 
test$Date = as.Date(test$Date, format = "%d.%m.%Y") 
zooX = zoo(test[, -1], order.by = test$Date) 
f <- d(Euribor3) ~ d(Ois3) + d(CDS) + d(Vstoxx) + d(log(omo)) + d(L(Euribor3)) 
m1 <- dynlm(f, data = zooX, start = as.Date("2005-01-05"),end = as.Date("2005-01-24")) 
m2 <- dynlm(f, data = zooX, start = as.Date("2005-01-25"), end=as.Date("2005-02-14")) 
summary(m1) 
summary(m2) 
coeftest(m1, vcov=NeweyWest) 
coeftest(m2, vcov=NeweyWest) 

有一個與功能summary(m1) 但是如果我想NeweyWest使用HAC沒有問題即coeftest(m1, vcov=NeweyWest) 我得到的以下錯誤消息,我不知道爲什麼:Error in na.fail.default(as.ts(x)) : missing values in object 我需要更改我的代碼才能使用coeftest()獲得結果?注意:您可以從示例數據中看到沒有缺失值。非常感謝!

樣本數據:

Date Euribor3 Ois3 Vstoxx CDS omo 
1 03.01.2005 2.154 2.089 14.47 17.938 344999 
2 04.01.2005 2.151 2.084 14.51 17.886 344999 
3 05.01.2005 2.151 2.087 14.42 17.950 333998 
4 06.01.2005 2.150 2.085 13.80 17.950 333998 
5 07.01.2005 2.146 2.086 13.57 17.913 333998 
6 10.01.2005 2.146 2.087 12.92 17.958 333998 
7 11.01.2005 2.146 2.089 13.68 17.962 333998 
8 12.01.2005 2.145 2.085 14.05 17.886 339999 
9 13.01.2005 2.144 2.084 13.64 17.568 339999 
10 14.01.2005 2.144 2.085 13.57 17.471 339999 
11 17.01.2005 2.143 2.085 13.20 17.365 339999 
12 18.01.2005 2.144 2.085 13.17 17.214 347999 
13 19.01.2005 2.143 2.086 13.63 17.143 354499 
14 20.01.2005 2.144 2.087 14.17 17.125 354499 
15 21.01.2005 2.143 2.087 13.96 17.193 354499 
16 24.01.2005 2.143 2.086 14.11 17.283 354499 
17 25.01.2005 2.144 2.086 13.63 17.083 354499 
18 26.01.2005 2.143 2.086 13.32 17.348 347999 
19 27.01.2005 2.144 2.085 12.46 17.295 352998 
20 28.01.2005 2.144 2.084 12.81 17.219 352998 
21 31.01.2005 2.142 2.084 12.72 17.143 352998 
22 01.02.2005 2.142 2.083 12.36 17.125 352998 
23 02.02.2005 2.141 2.083 12.25 17.000 357499 
24 03.02.2005 2.144 2.088 12.38 16.808 357499 
25 04.02.2005 2.142 2.084 11.60 16.817 357499 
26 07.02.2005 2.142 2.084 11.99 16.798 359999 
27 08.02.2005 2.141 2.083 11.92 16.804 355500 
28 09.02.2005 2.142 2.080 12.19 16.589 355500 
29 10.02.2005 2.140 2.080 12.04 16.500 355500 
30 11.02.2005 2.140 2.078 11.99 16.429 355500 
31 14.02.2005 2.139 2.078 12.52 16.042 355500 

編輯我認爲這個問題是在此命令:zooX = zoo(test[, -1], order.by = test$Date),即功能order.by()。如果你刪除這個部分,其他所有相同的你可以通過NeweyWest計算HAC(當然你也需要將start = as.Date("2005-01-25")更改爲索引號,例如start=50)。但是通過刪除它,你在迴歸輸出中丟失了開始日期和結束日期,這非常有用。所以如果有人知道解決方法,請讓我知道!

回答

2

NeweyWest計算 '滯後' 與此代碼:

lag <- floor(bwNeweyWest(x, order.by = order.by, prewhite = prewhite, 
     ar.method = ar.method, data = data)) 

...當使用默認參數調用它複製你的(和我對它的複製)錯誤:

>bwNeweyWest(m2,lag = NULL, order.by = NULL, prewhite = TRUE, adjust = FALSE, 
+  diagnostics = FALSE, sandwich = TRUE, ar.method = "ols", 
+  data = list(), verbose = FALSE) 
Error in na.fail.default(as.ts(x)) : missing values in object 

?NeweyWest頁面上的示例表明,預先指定滯後是原始策略。我和2,3和4滯後運行coeftest電話,並沒有看到太多的敏感性滯後的選擇:

coeftest(m1, vcov=NeweyWest(m1, lag = 2, prewhite = FALSE)) 
#------------- 
t test of coefficients: 

        Estimate Std. Error t value Pr(>|t|) 
(Intercept) -0.00088591 0.00024838 -3.5667 0.007329 ** 
d(Ois3)  -0.01256761 0.20243315 -0.0621 0.952020 
d(CDS)   0.00010732 0.00097169 0.1104 0.914774 
d(Vstoxx)  0.00121163 0.00051398 2.3573 0.046150 * 
d(log(omo))  0.01245017 0.01916762 0.6495 0.534190 
d(L(Euribor3)) -0.42173541 0.11765274 -3.5846 0.007141 ** 
--- 
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

#---------- 
coeftest(m2, vcov=NeweyWest(m2 , lag = 2, prewhite = FALSE)) 
#------------ 
t test of coefficients: 

        Estimate Std. Error t value Pr(>|t|) 
(Intercept) -0.00055562 0.00029246 -1.8998 0.08992 . 
d(Ois3)   0.25659641 0.17004507 1.5090 0.16558 
d(CDS)   -0.00276703 0.00197776 -1.3991 0.19530 
d(Vstoxx)  -0.00091397 0.00063662 -1.4357 0.18493 
d(log(omo)) -0.01524269 0.02810579 -0.5423 0.60076 
d(L(Euribor3)) -0.51430803 0.17335182 -2.9668 0.01578 * 
--- 
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

我不知道這是否是對的一部分的監督dynlm作者或sandwich作者。您可能會發送電子郵件,以獲得有關統計有效性問題的更權威評論。

+0

非常感謝!不幸的是,我對R是新手,但我只是嘗試了以下方法:但我只是嘗試了以下內容:'coeftest(m1,vcov = NeweyWest(m1,prewhite = FALSE),order.by = test $ Date)''。現在不再有錯誤消息。但我不確定我所做的是否正確。你怎麼看? –

+1

我在線閱讀這些材料表明,您需要評估自協方差估計的性質,以決定是否省略預先白化會帶來顯着偏見:www.wouterdenhaan.com/papers/HAND30.pdf –

+0

非常感謝您的關注研究!! –