npindexbw  R Documentation 
npindexbw
computes a npindexbw
bandwidth specification
using the model Y = G(X\beta) + \epsilon
. For continuous Y
, the approach is that of Hardle, Hall
and Ichimura (1993) which jointly minimizes a leastsquares
crossvalidation function with respect to the parameters and
bandwidth. For binary Y
, a likelihoodbased crossvalidation
approach is employed which jointly maximizes a likelihood
crossvalidation function with respect to the parameters and
bandwidth. The bandwidth object contains parameters for the single
index model and the (scalar) bandwidth for the index function.
npindexbw(...)
## S3 method for class 'formula'
npindexbw(formula, data, subset, na.action, call, ...)
## S3 method for class 'NULL'
npindexbw(xdat = stop("training data xdat missing"),
ydat = stop("training data ydat missing"),
bws,
...)
## Default S3 method:
npindexbw(xdat = stop("training data xdat missing"),
ydat = stop("training data ydat missing"),
bws,
bandwidth.compute = TRUE,
nmulti,
random.seed,
optim.method,
optim.maxattempts,
optim.reltol,
optim.abstol,
optim.maxit,
only.optimize.beta,
...)
## S3 method for class 'sibandwidth'
npindexbw(xdat = stop("training data xdat missing"),
ydat = stop("training data ydat missing"),
bws,
bandwidth.compute = TRUE,
nmulti,
random.seed = 42,
optim.method = c("NelderMead", "BFGS", "CG"),
optim.maxattempts = 10,
optim.reltol = sqrt(.Machine$double.eps),
optim.abstol = .Machine$double.eps,
optim.maxit = 500,
only.optimize.beta = FALSE,
...)
formula 
a symbolic description of variables on which bandwidth selection is to be performed. The details of constructing a formula are described below. 
data 
an optional data frame, list or environment (or object
coercible to a data frame by 
subset 
an optional vector specifying a subset of observations to be used in the fitting process. 
na.action 
a function which indicates what should happen when the data contain

call 
the original function call. This is passed internally by

xdat 
a 
ydat 
a one (1) dimensional numeric or integer vector of dependent data, each
element 
bws 
a bandwidth specification. This can be set as a

method 
the single index model method, one of either “ichimura”
(Ichimura (1993)) or “kleinspady” (Klein and Spady
(1993)). Defaults to

nmulti 
integer number of times to restart the process of finding extrema of
the crossvalidation function from different (random) initial
points. Defaults to 
random.seed 
an integer used to seed R's random number generator. This ensures replicability of the numerical search. Defaults to 42. 
bandwidth.compute 
a logical value which specifies whether to do a numerical search for
bandwidths or not. If set to 
optim.method 
method used by the default method is an implementation of that of Nelder and Mead (1965), that uses only function values and is robust but relatively slow. It will work reasonably well for nondifferentiable functions. method method 
optim.maxattempts 
maximum number of attempts taken trying to achieve successful
convergence in 
optim.abstol 
the absolute convergence tolerance used by 
optim.reltol 
relative convergence tolerance used by 
optim.maxit 
maximum number of iterations used by 
only.optimize.beta 
signals the routine to only minimize the objective function with respect to beta 
... 
additional arguments supplied to specify the parameters to the

We implement Ichimura's (1993) method via joint estimation of the bandwidth and coefficient vector using leaveoneout nonlinear least squares. We implement Klein and Spady's (1993) method maximizing the leaveoneout log likelihood function jointly with respect to the bandwidth and coefficient vector. Note that Klein and Spady's (1993) method is for binary outcomes only, while Ichimura's (1993) method can be applied for any outcome data type (i.e., continuous or discrete).
We impose the identification condition that the first element of the coefficient vector beta is equal to one, while identification also requires that the explanatory variables contain at least one continuous variable.
npindexbw
may be invoked either with a formulalike
symbolic description of variables on which bandwidth selection is to
be performed or through a simpler interface whereby data is
passed directly to the function via the xdat
and ydat
parameters. Use of these two interfaces is mutually exclusive.
Note that, unlike most other bandwidth methods in the np
package, this implementation uses the R optim
nonlinear
minimization routines and npksum
. We have implemented
multistarting and strongly encourage its use in practice. For
exploratory purposes, you may wish to override the default search
tolerances, say, setting optim.reltol=.1
and conduct
multistarting (the default is to restart min(5, ncol(xdat)) times) as is done
for a number of examples.
Data for which bandwidths are to be estimated may be specified
symbolically. A typical description has the form dependent data
~ explanatory data
, where dependent data
is a univariate
response, and explanatory data
is a series of variables
specified by name, separated by the separation character '+'. For
example y1 ~ x1 + x2
specifies that the bandwidth object for
the regression of response y1
and semiparametric regressors
x1
and x2
are to be estimated. See below for further
examples.
npindexbw
returns a sibandwidth
object, with the
following components:
bw 
bandwidth(s), scale factor(s) or nearest neighbours for the
data, 
beta 
coefficients of the model 
fval 
objective function value at minimum 
If bwtype
is set to fixed
, an object containing a scalar
bandwidth for the function G(X\beta)
and an estimate of
the parameter vector \beta
is returned.
If bwtype
is set to generalized_nn
or
adaptive_nn
, then instead the scalar k
th nearest neighbor
is returned.
The functions coef
, predict
,
summary
, and plot
support
objects of this class.
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.
Caution: multivariate datadriven bandwidth selection methods are, by
their nature, computationally intensive. Virtually all methods
require dropping the i
th observation from the data set,
computing an object, repeating this for all observations in the
sample, then averaging each of these leaveoneout estimates for a
given value of the bandwidth vector, and only then repeating
this a large number of times in order to conduct multivariate
numerical minimization/maximization. Furthermore, due to the potential
for local minima/maxima, restarting this procedure a large
number of times may often be necessary. This can be frustrating for
users possessing large datasets. For exploratory purposes, you may
wish to override the default search tolerances, say, setting
optim.reltol=.1
and conduct multistarting (the default is to
restart min(5, ncol(xdat)) times). Once the procedure terminates, you can
restart search with default tolerances using those bandwidths obtained
from the less rigorous search (i.e., set bws=bw
on subsequent
calls to this routine where bw
is the initial bandwidth
object). A version of this package using the Rmpi
wrapper is
under development that allows one to deploy this software in a
clustered computing environment to facilitate computation involving
large datasets.
Tristen Hayfield tristen.hayfield@gmail.com, Jeffrey S. Racine racinej@mcmaster.ca
Aitchison, J. and C.G.G. Aitken (1976), “Multivariate binary discrimination by the kernel method,” Biometrika, 63, 413420.
Hardle, W. and P. Hall and H. Ichimura (1993), “Optimal Smoothing in SingleIndex Models,” The Annals of Statistics, 21, 157178.
Ichimura, H., (1993), “Semiparametric least squares (SLS) and weighted SLS estimation of singleindex models,” Journal of Econometrics, 58, 71120.
Klein, R. W. and R. H. Spady (1993), “An efficient semiparametric estimator for binary response models,” Econometrica, 61, 387421.
Li, Q. and J.S. Racine (2007), Nonparametric Econometrics: Theory and Practice, Princeton University Press.
Wang, M.C. and J. van Ryzin (1981), “A class of smooth estimators for discrete distributions,” Biometrika, 68, 301309.
## Not run:
# EXAMPLE 1 (INTERFACE=FORMULA): Generate a simple linear model then
# compute coefficients and the bandwidth using Ichimura's nonlinear
# least squares approach.
set.seed(12345)
n < 100
x1 < runif(n, min=1, max=1)
x2 < runif(n, min=1, max=1)
y < x1  x2 + rnorm(n)
# Note  this may take a minute or two depending on the speed of your
# computer. Note also that the first element of the vector beta is
# normalized to one for identification purposes, and that X must contain
# at least one continuous variable.
bw < npindexbw(formula=y~x1+x2, method="ichimura")
summary(bw)
# Sleep for 5 seconds so that we can examine the output...
Sys.sleep(5)
# EXAMPLE 1 (INTERFACE=DATA FRAME): Generate a simple linear model then
# compute coefficients and the bandwidth using Ichimura's nonlinear
# least squares approach.
set.seed(12345)
n < 100
x1 < runif(n, min=1, max=1)
x2 < runif(n, min=1, max=1)
y < x1  x2 + rnorm(n)
X < cbind(x1, x2)
# Note  this may take a minute or two depending on the speed of your
# computer. Note also that the first element of the vector beta is
# normalized to one for identification purposes, and that X must contain
# at least one continuous variable.
bw < npindexbw(xdat=X, ydat=y, method="ichimura")
summary(bw)
# Sleep for 5 seconds so that we can examine the output...
Sys.sleep(5)
# EXAMPLE 2 (INTERFACE=DATA FRAME): Generate a simple binary outcome
# model then compute coefficients and the bandwidth using Klein and
# Spady's likelihoodbased approach.
n < 100
x1 < runif(n, min=1, max=1)
x2 < runif(n, min=1, max=1)
y < ifelse(x1 + x2 + rnorm(n) > 0, 1, 0)
# Note that the first element of the vector beta is normalized to one
# for identification purposes, and that X must contain at least one
# continuous variable.
bw < npindexbw(formula=y~x1+x2, method="kleinspady")
summary(bw)
# EXAMPLE 2 (INTERFACE=DATA FRAME): Generate a simple binary outcome
# model then compute coefficients and the bandwidth using Klein and
# Spady's likelihoodbased approach.
n < 100
x1 < runif(n, min=1, max=1)
x2 < runif(n, min=1, max=1)
y < ifelse(x1 + x2 + rnorm(n) > 0, 1, 0)
X < cbind(x1, x2)
# Note that the first element of the vector beta is normalized to one
# for identification purposes, and that X must contain at least one
# continuous variable.
bw < npindexbw(xdat=X, ydat=y, method="kleinspady")
summary(bw)
## End(Not run)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.