Bandwidth Selectors for Kernel Density Estimation
Bandwidth selectors for Gaussian kernels in
bw.ucv(x, nb = 1000, lower = 0.1 * hmax, upper = hmax, tol = 0.1 * lower)
bw.bcv(x, nb = 1000, lower = 0.1 * hmax, upper = hmax, tol = 0.1 * lower)
bw.SJ(x, nb = 1000, lower = 0.1 * hmax, upper = hmax, method = c("ste", "dpi"), tol = 0.1 * lower)
- numeric vector.
- number of bins to use.
- lower, upper
- range over which to minimize. The default is
almost always satisfactory.
hmaxis calculated internally from a normal reference bandwidth.
"dpi"("direct plug-in"). Can be abbreviated.
- for method
"ste", the convergence tolerance for
uniroot. The default leads to bandwidth estimates with only slightly more than one digit accuracy, which is sufficient for practical density estimation, but possibly not for theoretical simulation studies.
bw.nrd0 implements a rule-of-thumb for
choosing the bandwidth of a Gaussian kernel density estimator.
It defaults to 0.9 times the
minimum of the standard deviation and the interquartile range divided by
1.34 times the sample size to the negative one-fifth power
bw.nrd is the more common variation given by Scott (1992),
using factor 1.06.
bw.bcv implement unbiased and
biased cross-validation respectively.
bw.SJ implements the methods of Sheather & Jones (1991)
to select the bandwidth using pilot estimation of derivatives.
The algorithm for method
"ste" solves an equation (via
uniroot) and because of that, enlarges the interval
c(lower, upper) when the boundaries were not user-specified and
do not bracket the root.
- A bandwidth on a scale suitable for the
Scott, D. W. (1992) Multivariate Density Estimation: Theory, Practice, and Visualization. Wiley.
Sheather, S. J. and Jones, M. C. (1991) A reliable data-based bandwidth selection method for kernel density estimation. Journal of the Royal Statistical Society series B, 53, 683--690.
Silverman, B. W. (1986) Density Estimation. London: Chapman and Hall.
Venables, W. N. and Ripley, B. D. (2002) Modern Applied Statistics with S. Springer.
require(graphics) plot(density(precip, n = 1000)) rug(precip) lines(density(precip, bw = "nrd"), col = 2) lines(density(precip, bw = "ucv"), col = 3) lines(density(precip, bw = "bcv"), col = 4) lines(density(precip, bw = "SJ-ste"), col = 5) lines(density(precip, bw = "SJ-dpi"), col = 6) legend(55, 0.035, legend = c("nrd0", "nrd", "ucv", "bcv", "SJ-ste", "SJ-dpi"), col = 1:6, lty = 1)