pcdtest {plm} | R Documentation |
Pesaran's CD or Breusch–Pagan's LM (local or global) tests for cross sectional dependence in panel models
pcdtest(x, ...) ## S3 method for class 'formula' pcdtest(x, data, index = NULL, model = NULL, test = c("cd", "sclm", "lm", "rho", "absrho"), w = NULL, ...) ## S3 method for class 'panelmodel' pcdtest(x, test = c("cd", "sclm", "lm", "rho", "absrho"), w = NULL, ...) ## S3 method for class 'pseries' pcdtest(x, test = c("cd", "sclm", "lm", "rho", "absrho"), w = NULL, ...)
x |
an object of class |
data |
a |
index |
an optional numerical index, in case |
model |
an optional character string indicating which type of model to estimate;
if left to |
test |
the type of test statistic to be returned. One of
|
w |
either |
... |
further arguments to be passed on to |
These tests are originally meant to use the residuals of separate estimation of one time–series regression for each cross-sectional unit in order to check for cross–sectional dependence. If a different model specification (within
, random
, ...) is assumed consistent, one can resort to its residuals for testing (which is common, e.g., when the time dimension's length is insufficient for estimating the heterogeneous model). If the time dimension is insufficient and model=NULL
, the function defaults to estimation of a within
model and issues a warning. The main argument of this function may be either a model of class panelmodel
or a formula
and dataframe
; in the second case, unless model
is set to NULL
, all usual parameters relative to the estimation of a plm
model may be passed on. The test is compatible with any consistent panelmodel
for the data at hand, with any specification of effect
. E.g., specifying effect=''time''
or effect=''twoways''
allows to test for residual cross-sectional dependence after the introduction of time fixed
effects to account for common shocks.
A local version of either test can be computed by supplying a proximity matrix (elements coercible to logical
) with argument w
which provides information on whether any pair of individuals are neighbours or not. If w
is supplied, only neighbouring pairs will be used in computing the test; else, w
will default to NULL
and all observations will be used. The matrix need not be binary, so commonly used “row–standardized” matrices can be employed as well. nb
objects from spdep must instead be transformed into matrices by spdep's function nb2mat
before using.
The methods implemented are suitable also for unbalanced panels.
Pesaran's CD test (test="cd"
), Breusch and Pagan's LM test (test="lm"
), and it's scaled version (test="sclm"
) are all described in Pesaran (2004) (and complemented by Pesaran (2015)). Breusch/Pagan (1980) is the original source for the LM test.
The test on a pseries
is the same as a test on a pooled regression model of that variable on a constant, i.e.
pcdtest(some_pseries)
is equivalent to pcdtest(plm(some_var ~ 1, data = some_pdata.frame, model = "pooling")
and also
equivalent to pcdtest(some_var ~ 1, data = some_data)
, where some_var
is the variable name in the data which
corresponds to some_pseries
.
An object of class "htest"
.
Breusch, T.S. and A.R. Pagan (1980), The Lagrange multiplier test and its applications to model specification in econometrics, Review of Economic Studies, 47(1), pp. 239–253.
Pesaran, M.H. (2004), General Diagnostic Tests for Cross Section Dependence in Panels, CESifo Working Paper 1229.
Pesaran, M.H. (2015), Testing Weak Cross–Sectional Dependence in Large Panels, Econometric Reviews, 34(6-10), pp. 1089–1117.
data(Grunfeld, package = "plm") ## test on heterogeneous model (separate time series regressions) pcdtest(inv ~ value + capital, data = Grunfeld, index = c("firm", "year")) ## test on two-way fixed effects homogeneous model pcdtest(inv ~ value + capital, data = Grunfeld, model = "within", effect = "twoways", index = c("firm", "year")) ## test on panelmodel object g <- plm(inv ~ value + capital, data = Grunfeld, index = c("firm", "year")) pcdtest(g) ## scaled LM test pcdtest(g, test = "sclm") ## test on pseries pGrunfeld <- pdata.frame(Grunfeld) pcdtest(pGrunfeld$value) ## local test ## define neighbours for individual 2: 1, 3, 4, 5 in lower triangular matrix w <- matrix(0, ncol= 10, nrow=10) w[2,1] <- w[3,2] <- w[4,2] <- w[5,2] <- 1 pcdtest(g, w = w)