Nonparametric robust covariance matrix estimators a la Newey and West for panel models with serial correlation.

vcovNW(x, ...)

# S3 method for class 'plm'
vcovNW(
  x,
  type = c("HC0", "sss", "HC1", "HC2", "HC3", "HC4"),
  maxlag = NULL,
  wj = function(j, maxlag) 1 - j/(maxlag + 1),
  ...
)

# S3 method for class 'pcce'
vcovNW(
  x,
  type = c("HC0", "sss", "HC1", "HC2", "HC3", "HC4"),
  maxlag = NULL,
  wj = function(j, maxlag) 1 - j/(maxlag + 1),
  ...
)

Arguments

x

an object of class "plm" or "pcce"

...

further arguments

type

the weighting scheme used, one of "HC0", "sss", "HC1", "HC2", "HC3", "HC4", see Details,

maxlag

either NULL or a positive integer specifying the maximum lag order before truncation

wj

weighting function to be applied to lagged terms,

Value

An object of class "matrix" containing the estimate of the covariance matrix of coefficients.

Details

vcovNW is a function for estimating a robust covariance matrix of parameters for a panel model according to the Newey and West (1987) method. The function works as a restriction of the Driscoll and Kraay (1998) covariance (see vcovSCC()) to no cross–sectional correlation.

Weighting schemes specified by type are analogous to those in sandwich::vcovHC() in package sandwich and are justified theoretically (although in the context of the standard linear model) by MacKinnon and White (1985) and Cribari–Neto (2004) (see Zeileis 2004) .

The main use of vcovNW (and the other variance-covariance estimators provided in the package vcovHC, vcovBK, vcovDC, vcovSCC) is to pass it to plm's own functions like summary, pwaldtest, and phtest or together with testing functions from the lmtest and car packages. All of these typically allow passing the vcov or vcov. parameter either as a matrix or as a function, e.g., for Wald–type testing: argument vcov. to coeftest(), argument vcov to waldtest() and other methods in the lmtest package; and argument vcov. to linearHypothesis() in the car package (see the examples), see (see also Zeileis 2004) , 4.1-2, and examples below.

References

Cribari–Neto F (2004). “Asymptotic Inference Under Heteroskedasticity of Unknown Form.” Computational Statistics & Data Analysis, 45, 215–233.

Driscoll JC, Kraay AC (1998). “Consistent covariance matrix estimation with spatially dependent panel data.” Review of economics and statistics, 80(4), 549–560.

MacKinnon JG, White H (1985). “Some Heteroskedasticity–Consistent Covariance Matrix Estimators With Improved Finite Sample Properties.” Journal of Econometrics, 29, 305–325.

Newey WK, West KD (1987). “A Simple, Positive Semi-definite, Heteroskedasticity and Autocorrelation Consistent Covariance Matrix.” Econometrica, 55(3), 703–08.

Zeileis A (2004). “Econometric Computing With HC and HAC Covariance Matrix Estimators.” Journal of Statistical Software, 11(10), 1–17. https://www.jstatsoft.org/article/view/v011i10.

See also

sandwich::vcovHC() from the sandwich package for weighting schemes (type argument).

Author

Giovanni Millo

Examples


data("Produc", package="plm")
zz <- plm(log(gsp)~log(pcap)+log(pc)+log(emp)+unemp, data=Produc, model="pooling")
## as function input to plm's summary method (with and without additional arguments):
summary(zz, vcov = vcovNW)
#> Pooling Model
#> 
#> Note: Coefficient variance-covariance matrix supplied: vcovNW
#> 
#> Call:
#> plm(formula = log(gsp) ~ log(pcap) + log(pc) + log(emp) + unemp, 
#>     data = Produc, model = "pooling")
#> 
#> Balanced Panel: n = 48, T = 17, N = 816
#> 
#> Residuals:
#>        Min.     1st Qu.      Median     3rd Qu.        Max. 
#> -0.23176215 -0.06103699 -0.00010248  0.05085197  0.35111348 
#> 
#> Coefficients:
#>               Estimate Std. Error t-value  Pr(>|t|)    
#> (Intercept)  1.6433023  0.1143540 14.3703 < 2.2e-16 ***
#> log(pcap)    0.1550070  0.0299283  5.1793 2.812e-07 ***
#> log(pc)      0.3091902  0.0206394 14.9806 < 2.2e-16 ***
#> log(emp)     0.5939349  0.0316213 18.7827 < 2.2e-16 ***
#> unemp       -0.0067330  0.0020247 -3.3254 0.0009225 ***
#> ---
#> Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#> 
#> Total Sum of Squares:    849.81
#> Residual Sum of Squares: 6.2942
#> R-Squared:      0.99259
#> Adj. R-Squared: 0.99256
#> F-statistic: 12659.9 on 4 and 16 DF, p-value: < 2.22e-16
summary(zz, vcov = function(x) vcovNW(x, method="arellano", type="HC1"))
#> Pooling Model
#> 
#> Note: Coefficient variance-covariance matrix supplied: function(x) vcovNW(x, method = "arellano", type = "HC1")
#> 
#> Call:
#> plm(formula = log(gsp) ~ log(pcap) + log(pc) + log(emp) + unemp, 
#>     data = Produc, model = "pooling")
#> 
#> Balanced Panel: n = 48, T = 17, N = 816
#> 
#> Residuals:
#>        Min.     1st Qu.      Median     3rd Qu.        Max. 
#> -0.23176215 -0.06103699 -0.00010248  0.05085197  0.35111348 
#> 
#> Coefficients:
#>               Estimate Std. Error t-value  Pr(>|t|)    
#> (Intercept)  1.6433023  0.1147060 14.3262 < 2.2e-16 ***
#> log(pcap)    0.1550070  0.0300204  5.1634 3.053e-07 ***
#> log(pc)      0.3091902  0.0207029 14.9346 < 2.2e-16 ***
#> log(emp)     0.5939349  0.0317186 18.7251 < 2.2e-16 ***
#> unemp       -0.0067330  0.0020309 -3.3152 0.0009563 ***
#> ---
#> Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#> 
#> Total Sum of Squares:    849.81
#> Residual Sum of Squares: 6.2942
#> R-Squared:      0.99259
#> Adj. R-Squared: 0.99256
#> F-statistic: 12582.3 on 4 and 16 DF, p-value: < 2.22e-16
## standard coefficient significance test
library(lmtest)
coeftest(zz)
#> 
#> t test of coefficients:
#> 
#>               Estimate Std. Error t value  Pr(>|t|)    
#> (Intercept)  1.6433023  0.0575873 28.5359 < 2.2e-16 ***
#> log(pcap)    0.1550070  0.0171538  9.0363 < 2.2e-16 ***
#> log(pc)      0.3091902  0.0102720 30.1003 < 2.2e-16 ***
#> log(emp)     0.5939349  0.0137475 43.2032 < 2.2e-16 ***
#> unemp       -0.0067330  0.0014164 -4.7537 2.363e-06 ***
#> ---
#> Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#> 
## NW robust significance test, default
coeftest(zz, vcov.=vcovNW)
#> 
#> t test of coefficients:
#> 
#>               Estimate Std. Error t value  Pr(>|t|)    
#> (Intercept)  1.6433023  0.1143540 14.3703 < 2.2e-16 ***
#> log(pcap)    0.1550070  0.0299283  5.1793 2.812e-07 ***
#> log(pc)      0.3091902  0.0206394 14.9806 < 2.2e-16 ***
#> log(emp)     0.5939349  0.0316213 18.7827 < 2.2e-16 ***
#> unemp       -0.0067330  0.0020247 -3.3254 0.0009225 ***
#> ---
#> Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#> 
## idem with parameters, pass vcov as a function argument
coeftest(zz, vcov.=function(x) vcovNW(x, type="HC1", maxlag=4))
#> 
#> t test of coefficients:
#> 
#>               Estimate Std. Error t value  Pr(>|t|)    
#> (Intercept)  1.6433023  0.1399123 11.7452 < 2.2e-16 ***
#> log(pcap)    0.1550070  0.0367023  4.2234 2.679e-05 ***
#> log(pc)      0.3091902  0.0256858 12.0374 < 2.2e-16 ***
#> log(emp)     0.5939349  0.0388977 15.2691 < 2.2e-16 ***
#> unemp       -0.0067330  0.0023634 -2.8488  0.004499 ** 
#> ---
#> Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#> 
## joint restriction test
waldtest(zz, update(zz, .~.-log(emp)-unemp), vcov=vcovNW)
#> Wald test
#> 
#> Model 1: log(gsp) ~ log(pcap) + log(pc) + log(emp) + unemp
#> Model 2: log(gsp) ~ log(pcap) + log(pc)
#>   Res.Df Df  Chisq Pr(>Chisq)    
#> 1    811                         
#> 2    813 -2 480.18  < 2.2e-16 ***
#> ---
#> Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
if (FALSE) { # \dontrun{
## test of hyp.: 2*log(pc)=log(emp)
library(car)
linearHypothesis(zz, "2*log(pc)=log(emp)", vcov.=vcovNW)
} # }