Kernel Consistent Model Specification Test with Mixed Data Types
np.cmstest.Rdnpcmstest implements a consistent test for correct
specification of parametric regression models (linear or nonlinear) as
described in Hsiao, Li, and Racine (2007).
Details
Documentation guide: see np.kernels for kernels,
np.options for global options, and
plot for plotting options.
Arguments
Data, Bandwidth Inputs And Formula Interface
These arguments identify the model formula/data interface and explicit data inputs.
- data
an optional data frame, list or environment (or object coercible to a data frame by
as.data.frame) containing the variables in the model. If not found in data, the variables are taken fromenvironment(formula), typically the environment from which the function is called.- formula
a symbolic description of the model to be tested. If
xdatandydatare omitted, the data are extracted from this formula anddata.- model
a model object obtained from a call to
lm(orglm). Important: the call to eitherglmorlmmust have the argumentsx=TRUEandy=TRUEornpcmstestwill not work. Also, the test is based on residual bootstrapping hence the outcome must be continuous (which rules out Logit, Probit, and Count models).- subset
an optional vector specifying a subset of observations to be used.
- xdat
a \(p\)-variate data frame of explanatory data (training data) used to calculate the regression estimators.
- ydat
a one (1) dimensional numeric or integer vector of dependent data, each element \(i\) corresponding to each observation (row) \(i\) of
xdat.
Bootstrap And Test Controls
These arguments control the test statistic, bootstrap procedure, and reproducibility settings.
- boot.method
a character string used to specify the bootstrap method.
iidwill generate independent identically distributed draws.wildwill use a wild bootstrap.wild-rademacherwill use a wild bootstrap with Rademacher variables. Defaults toiid.- boot.num
an integer value specifying the number of bootstrap replications to use. Defaults to
399.- density.weighted
a logical value specifying whether the statistic should be weighted by the density of
xdat. Defaults toTRUE.- distribution
a character string used to specify the method of estimating the distribution of the statistic to be calculated.
bootstrapwill conduct bootstrapping.asymptoticwill use the normal distribution. Defaults tobootstrap.- pivot
a logical value specifying whether the statistic should be normalised such that it approaches \(N(0,1)\) in distribution. Defaults to
TRUE.- random.seed
an integer used to seed R's random number generator. This is to ensure replicability. Defaults to 42.
Additional Arguments
Further arguments are passed to the bandwidth-selection routines used by the test.
- ...
additional arguments supplied to control bandwidth selection on the residuals. One can specify the bandwidth type, kernel types, and so on. To do this, you may specify any of
bwscaling,bwtype,ckertype,ckerorder,ukertype,okertype, as described innpregbw. This is necessary if you specifybwsas a \(p\)-vector and not abandwidthobject, and you do not desire the default behaviours.
Value
npcmstest returns an object of type cmstest with the
following components, components will contain information
related to Jn or In depending on the value of pivot:
- Jn
the statistic
Jn- In
the statistic
In- Omega.hat
as described in Hsiao, C. and Q. Li and J.S. Racine.
- q.*
the various quantiles of the statistic
Jn(orInifpivot=FALSE) are in componentsq.90,q.95,q.99(one-sided 1%, 5%, 10% critical values)- P
the P-value of the statistic
- Jn.bootstrap
if
pivot=TRUEcontains the bootstrap replications ofJn- In.bootstrap
if
pivot=FALSEcontains the bootstrap replications ofIn
summary supports object of type cmstest.
Book And Method Pointers
npcmstest tests a parametric conditional-mean specification
against a nonparametric alternative, using residual-based bootstrap or
asymptotic calibration as selected by distribution. The
statistic is designed for continuous outcomes and fitted
lm or glm objects whose model frame, model
matrix, and response are available.
For book-length background, see Li and Racine (2007), Chapter 12 Model Specification Tests, especially Section 12.1 and Section 12.1.2. For the conditional-mean estimation context used by the test, see Racine (2019), Chapter 6 Conditional Mean Function Estimation.
References
Aitchison, J. and C.G.G. Aitken (1976), “Multivariate binary discrimination by the kernel method,” Biometrika, 63, 413-420.
Hsiao, C. and Q. Li and J.S. Racine (2007), “A consistent model specification test with mixed categorical and continuous data,” Journal of Econometrics, 140, 802-826.
Li, Q. and J.S. Racine (2007), Nonparametric Econometrics: Theory and Practice, Princeton University Press.
Maasoumi, E. and J.S. Racine and T. Stengos (2007), “Growth and convergence: a profile of distribution dynamics and mobility,” Journal of Econometrics, 136, 483-508.
Murphy, K. M. and F. Welch (1990), “Empirical age-earnings profiles,” Journal of Labor Economics, 8, 202-229.
Pagan, A. and A. Ullah (1999), Nonparametric Econometrics, Cambridge University Press.
Wang, M.C. and J. van Ryzin (1981), “A class of smooth estimators for discrete distributions,” Biometrika, 68, 301-309.
Author
Tristen Hayfield tristen.hayfield@gmail.com, Jeffrey S. Racine racinej@mcmaster.ca
Usage Issues
npcmstest supports regression objects generated by
lm and uses features specific to objects of type
lm hence if you attempt to pass objects of a different
type the function cannot be expected to work.
If you are using data of mixed types, then it is advisable to use the
data.frame function to construct your input data and not
cbind, since cbind will typically not work as
intended on mixed data types and will coerce the data to the same
type.
Examples
if (FALSE) { # \dontrun{
# EXAMPLE 1: For this example, we conduct a consistent model
# specification test for a parametric wage regression model that is
# quadratic in age. The work of Murphy and Welch (1990) would suggest
# that this parametric regression model is misspecified.
data("cps71")
with(cps71, {
model <- lm(logwage~age+I(age^2), x=TRUE, y=TRUE)
if (interactive()) plot(age, logwage)
lines(age, fitted(model))
# Note - this may take a few minutes depending on the speed of your
# computer...
npcmstest(model = model, xdat = age, ydat = logwage, boot.num=9, nmulti = 1)
# Next try Murphy & Welch's (1990) suggested quintic specification.
model <- lm(logwage~age+I(age^2)+I(age^3)+I(age^4)+I(age^5), x=TRUE, y=TRUE)
if (interactive()) plot(age, logwage)
lines(age, fitted(model))
X <- data.frame(age)
# Note - this may take a few minutes depending on the speed of your
# computer...
npcmstest(model = model, xdat = age, ydat = logwage, boot.num=9, nmulti = 1)
# Note - you can pass in multiple arguments to this function. For
# instance, to use local linear rather than local constant regression,
# you would use npcmstest(model, X, regtype="ll"), while you could also
# change the kernel type (default is second order Gaussian), numerical
# search tolerance, or feed in your own vector of bandwidths and so
# forth.
})
# EXAMPLE 2: For this example, we replicate the application in Maasoumi,
# Racine, and Stengos (2007) (see oecdpanel for details). We
# estimate a parametric model that is used in the literature, then
# subject it to the model specification test.
data("oecdpanel")
with(oecdpanel, {
model <- lm(growth ~ oecd +
factor(year) +
initgdp +
I(initgdp^2) +
I(initgdp^3) +
I(initgdp^4) +
popgro +
inv +
humancap +
I(humancap^2) +
I(humancap^3) - 1,
x=TRUE,
y=TRUE)
X <- data.frame(factor(oecd), factor(year), initgdp, popgro, inv, humancap)
npcmstest(model = model, xdat = X, ydat = growth, boot.num=9, nmulti = 1)
})
} # }