Vector autoregression with Newey-West standard errors
On Tue, 9 Jun 2009, Matthieu Stigler wrote:
Hi I wasn't aware of the fact that HAC is not designed for time series model (thanks Achim!). But nevertheless I think that HC is still usable, well at least I saw it in couple of papers dealing with times series. So if you still want to use an HC, two solutions: A solve the problem (workaround):
No, there is no "problem" at least not from the "sandwich" point of view. If you want "sandwich" to cooperate with "varest" objects, you just need to provide the appropriate methods (essentially, bread() and estfun()) for "varest" objects. This is a clean and non-invasive solution and not very difficult to implement given that all this is OLS.
The problem is actually in an inconsistency in VAR() when working with
type=const or both, as in your case.
See from your example:
model.matrix(a)
model.matrix(temp.lm)
to get it working you should replace:
attr(equation[[colnames(yend)[i]]]$terms, "intercept") <- 1
by:
attr(equation[[colnames(yend)[i]]]$terms, "intercept") <- NULL
I'll see with Bernhard how to update it.
B: I was working myself on a Eicker -White cov-mat and implemented it in a
package (dev version of tsDyn) that also contains VAR, so you could use this
one.
Thanks for the pointer. My feeling would be that if you provided
appropriate methods, you would get the HC stuff (or Eicker-White or
Eicker-Huber-White or White or HCCM or sandwich or ...) for free from
"sandwich".
As I pointed out in my previous my, this is all documented in
vignette("sandwich-OOP", package = "sandwich")
Best,
Z
Bests Achim Zeileis a ?crit :
On Tue, 9 Jun 2009, Liviu Andronic wrote:
Dear all, I'm currently fitting vector autoregression using VAR() from package `vars'. It estimates VAR by using OLS, and by default it provides "naive" standard errors (not HC and not HAC).
The standard HAC approach only works if you have no lagged dependent variables among the regressors. The idea is that either (1) you don't model the autoregressive structure at all and just capture it in the correction of the standard errors or (2) you model the autoregressive structure by the model and need no correction of the standard errors.
However, I would like to obtain Heteroskedasticity-Autocorrelation Consistent standard errors using NeweyWest() from package `sandwich', which handles principally `lm' and `glm' objects.
The approach in "sandwich" is fully object-oriented, see
vignette("sandwich-OOP", package = "sandwich")
I noticed that the VAR() returns an object of class `varest', which contains a list of fitted `lm' objects. So I tried to apply NeweyWest() to individual `lm' components of `varest', unsuccessfully.
class(temp)
[1] "varest"
class(temp$varresult$e)
[1] "lm"
temp.lm <- temp$varresult$e class(temp.lm)
[1] "lm"
require(sandwich) NeweyWest(temp.lm)
Error in AA %*% t(X) : requires numeric matrix/vector arguments In addition: Warning message: In ar.ols(x, aic = aic, order.max = order.max, na.action = na.action, : model order: 1singularities in the computation of the projection matrixresults are only valid up to model order0
vcovHAC(temp.lm)
Error in bread. %*% meat. : non-conformable arguments I would have expected the above to have worked. For "standard" `lm' objects, I never had any such issues:
That's because the internal structure of "varest" objects does not contain `standard' "lm" objects... The constant/intercept is special cased and hence bread(temp$varresult$e) meatHAC(temp$varresult$e) are non-conformable. The warning from ar.ols() is thrown because prewhitening is used by default which really doesn't make any sense for VARs. To adapt "sandwich" to a new model class, bread() and estfun() methods need to be supplied (see the vignette above). This wouldn't be very difficult for "varest" objects, but as pointed out above, I don't think it is very useful. Best, Z
_______________________________________________ R-SIG-Finance at stat.math.ethz.ch mailing list https://stat.ethz.ch/mailman/listinfo/r-sig-finance -- Subscriber-posting only. -- If you want to post, subscribe first.