Kernel Consistent Pairwise Nonlinear Dependence Test for Univariate Processes
np.deptest.Rdnpdeptest implements the consistent metric entropy test of
pairwise independence as described in Maasoumi and Racine (2002).
Usage
npdeptest(data.x = NULL,
data.y = NULL,
method = c("integration","summation"),
bootstrap = TRUE,
boot.num = 399,
random.seed = 42)Arguments
Data, Bandwidth Inputs And Formula Interface
These arguments identify the paired samples being tested.
- data.x, data.y
-
two univariate vectors containing two variables that are of type
numeric. - method
-
a character string used to specify whether to compute the integral version or the summation version of the statistic. Can be set as
integrationorsummation(see below for details). Defaults tointegration.
- boot.num
an integer value specifying the number of bootstrap replications to use. Defaults to
399.- bootstrap
a logical value which specifies whether to conduct the bootstrap test or not. If set to
FALSE, only the statistic will be computed. Defaults toTRUE.- random.seed
an integer used to seed R's random number generator. This is to ensure replicability. Defaults to 42.
Value
npdeptest returns an object of type deptest with the
following components
- Srho
the statistic
Srho- Srho.bootstrap.vec
contains the bootstrap replications of
Srho- P
the P-value of the Srho statistic
- bootstrap
a logical value indicating whether bootstrapping was performed
- boot.num
number of bootstrap replications
- bw.data.x
the numeric bandwidth for
data.xmarginal density- bw.data.y
the numeric bandwidth for
data.ymarginal density- bw.joint
the numeric matrix of bandwidths for
dataand laggeddatajoint density at lagnum.lag
summary supports object of type deptest.
Book And Method Pointers
npdeptest compares the joint density or probability law of two
variables with the product of their marginals. Departures from the
product form indicate dependence, lack of fit, or predictability
depending on how the two inputs are constructed.
For book-length background, see Li and Racine (2007), Chapter 13 Nonsmoothing Tests, especially Sections 13.4 and 13.5, and Chapter 12 Model Specification Tests, especially Sections 12.4.1 and 12.4.3. For entropy and density context, see Racine (2019), Chapter 2.
References
Granger, C.W. and E. Maasoumi and J.S. Racine (2004), “A dependence metric for possibly nonlinear processes”, Journal of Time Series Analysis, 25, 649-669.
Maasoumi, E. and J.S. Racine (2002), “Entropy and Predictability of Stock Market Returns,” Journal of Econometrics, 107, 2, pp 291-312.
Author
Tristen Hayfield tristen.hayfield@gmail.com, Jeffrey S. Racine racinej@mcmaster.ca
Details
Documentation guide: see np.kernels for kernels, np.options for global options, and plot for plotting options.
npsdeptest computes the nonparametric metric entropy
(normalized Hellinger of Granger, Maasoumi and Racine (2004)) for
testing pairwise nonlinear dependence between the densities of two
data series. See Maasoumi and Racine (2002) for details. Default
bandwidths are of the Kullback-Leibler variety obtained via
likelihood cross-validation. The null distribution is obtained via
bootstrap resampling under the null of pairwise independence.
npdeptest computes the distance between the joint distribution
and the product of marginals (i.e. the joint distribution under the
null), \(D[f(y, \hat y), f(y)\times f(\hat y)]\). Examples include, (a) a measure/test of “fit”,
for in-sample values of a variable \(y\) and its fitted values,
\(\hat y\), and (b) a measure of “predictability” for
a variable \(y\) and its predicted values \(\hat y\) (from
a user implemented model).
The summation version of this statistic will be numerically unstable
when data.x and data.y lack common support or are sparse
(the summation version involves division of densities while the
integration version involves differences). Warning messages are
produced should this occur (‘integration recommended’) and should be
heeded.
Usage Issues
The integration version of the statistic uses multidimensional
numerical methods from the cubature package. See
adaptIntegrate for details. The integration
version of the statistic will be substantially slower than the
summation version, however, it will likely be both more
accurate and powerful.
Examples
if (FALSE) { # \dontrun{
set.seed(1234)
## Test/measure lack of fit between y and its fitted value from a
## regression model when x is relevant using the `summation' version.
n <- 100
x <- rnorm(n)
y <- 1 + x + rnorm(n)
model <- lm(y~x)
y.fit <- fitted(model)
npdeptest(y,y.fit,boot.num=99,method="summation")
if (interactive()) Sys.sleep(5)
## Test/measure lack of fit between y and its fitted value from a
## regression model when x is irrelevant using the `summation' version.
n <- 100
x <- runif(n,-2,2)
y <- 1 + rnorm(n)
model <- lm(y~x)
y.fit <- fitted(model)
npdeptest(y,y.fit,boot.num=99,method="summation")
## Test/measure lack of fit between y and its fitted value from a
## regression model when x is relevant using the `integration'
## version (default, slower than summation version).
n <- 100
x <- rnorm(n)
y <- 1 + x + rnorm(n)
model <- lm(y~x)
y.fit <- fitted(model)
npdeptest(y,y.fit,boot.num=99)
if (interactive()) Sys.sleep(5)
## Test/measure lack of fit between y and its fitted value from a
## regression model when x is irrelevant using the `integration'
## version (default, slower than summation version).
n <- 100
x <- runif(n,-2,2)
y <- 1 + rnorm(n)
model <- lm(y~x)
y.fit <- fitted(model)
npdeptest(y,y.fit,boot.num=99)
} # }