R: HAC from NeweyWest using dynlm

This is what I would like to do:

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)

      

No problem with the function summary(m1)

However, if I want to use HAC by NeweyWest, that is, coeftest(m1, vcov=NeweyWest)

I get the following error and I don't know why: Error in na.fail.default(as.ts(x)) : missing values in object

What do I need to change in my code to get the result with coeftest()

? Note. Missing values ​​are missing, as you can see from the example data. Many thanks!

Sample data:

    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

      

Edit I think the problem is with this command:, zooX = zoo(test[, -1], order.by = test$Date)

namely the function order.by()

. If you remove this part, all others are equal, you can calculate the HAC by NeweyWest (of course, you also need to change start = as.Date("2005-01-25")

to the index number, eg start=50

.) But by removing it, you will lose the start and end dates of the Date regression output, which was very useful. So if anyone knows the way around, please let me know!

+1


source to share


1 answer


NeweyWest

calculates the "delay" with this code:

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

      

... and when called with default arguments, it replicates your error (and my replication):

>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

      



The example on the page ?NeweyWest

assumes the lag preset was the original. I ran your calls coeftest

with 2,3 and 4 delays and don't see much sensitivity to lag selection:

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

      

I'm not sure if this is oversight by authors dynlm

or authors sandwich

. You can email them to get more authoritative comment on statistical reliability issues.

+2


source







All Articles