2.4 Bandwidth selection
As we saw in the previous sections, bandwidth selection is a key issue in density estimation. The purpose of this section is to introduce objective and automatic bandwidth selectors that attempt to minimize the estimation error of the target density
The first step is to define a global, rather than local, error criterion. The Integrated Squared Error (ISE),
is the squared distance between the kde and the target density. The ISE is a random quantity, since it depends directly on the sample As a consequence, looking for an optimal-ISE bandwidth is a hard task, since the optimality is dependent on the sample itself and not only on the population and To avoid this problematic, it is usual to compute the Mean Integrated Squared Error (MISE):
The MISE is convenient due to its mathematical tractability and its natural relation with the MSE. There are, however, other error criteria that present attractive properties, such as the Mean Integrated Absolute Error (MIAE):
The MIAE, unless the MISE, is invariant with respect to monotone transformations of the data. For example, if is the density of and then if the change of variables is made,
Despite this appealing property, the analysis of MIAE is substantially more complicated. We refer to Devroye and Györfi (1985) for a comprehensive treatment of absolute value metrics for kde.
Once the MISE is set as the error criterion to be minimized, our aim is to find
For that purpose, we need an explicit expression of the MISE that we can attempt to minimize. An asymptotic expansion for the MISE can be easily derived from the MSE expression.
Corollary 2.2 Under A1–A3,
Therefore, when
Proof. Trivial.
The dominating part of the MISE is denoted as AMISE, which stands for Asymptotic MISE: Due to its closed expression, it is possible to obtain a bandwidth that minimizes the AMISE.
Corollary 2.3 The bandwidth that minimizes the AMISE is
The optimal AMISE is:
Proof. Solving i.e. yields and gives the AMISE-optimal error.
The AMISE-optimal order deserves some further inspection. It can be seen in Section 3.2 of Scott (2015) that the AMISE-optimal order for the histogram of Section 2.1 is Two facts are of interest. First, the MISE of the histogram is asymptotically larger than the MISE of the kde (). This is a quantification of the quite apparent visual improvement of the kde over the histogram. Second, appears instead of evidencing that the histogram is affected not only by the curvature of the target density but also by how fast it varies.
Unfortunately, the AMISE bandwidth depends on which measures the curvature of the density. As a consequence, it can not be readily applied in practice. In the next subsection we will see how to plug-in estimates for
2.4.1 Plug-in rules
A simple solution to estimate is to assume that is the density of a and then plug-in the form of the curvature for such density:
While doing so, we approximate the curvature of an arbitrary density by means of the curvature of a Normal. We have that
Interestingly, the bandwidth is directly proportional to the standard deviation of the target density. Replacing by an estimate yields the normal scale bandwidth selector, which we denote by to emphasize its randomness:
The estimate can be chosen as the standard deviation or, in order to avoid the effects of potential outliers, as the standardized interquantile range:
Silverman (1986) suggests employing the minimum of both quantities,
When combined with a normal kernel, for which and (check (2.24)), this particularization of gives the famous rule-of-thumb for bandwidth selection:
is implemented in R through the function bw.nrd
(not to confuse with bw.nrd0
).
# Data
<- rnorm(100)
x
# Rule-of-thumb
bw.nrd(x = x)
## [1] 0.3897358
# Same as
<- diff(quantile(x, c(0.75, 0.25))) / diff(qnorm(c(0.75, 0.25)))
iqr 1.06 * length(x)^(-1/5) * min(sd(x), iqr)
## [1] 0.3871416
The previous selector is an example of a zero-stage plug-in selector, a terminology which lays on the fact that was estimated by plugging-in a parametric assumption at the “very beginning.” Because we could have opted to estimate nonparametrically and then plug-in the estimate into into Let’s explore this possibility in more detail. But first, note the useful equality
This holds by a iterative application of integration by parts. For example, for take and This gives
under the assumption that the derivatives vanish at infinity. Applying again integration by parts with and gives the result. This simple derivation has an important consequence: for estimating the functionals it is only required to estimate for the functionals
Particularly,
Thanks to the previous expression, a possible way to estimate nonparametrically is
where is the -th derivative of a kde with bandwidth and kernel i.e. Note that and can be different from and respectively. It turns out that estimating involves the adequate selection of a bandwidth The agenda is analogous to the one for but now taking into account that both and are scalar quantities:
Under certain regularity assumptions (see Section 3.5 in Wand and Jones (1995) for full details), the asymptotic bias and variance of are obtained. With them, we can compute the asymptotic expansion of the MSE and obtain the Asymptotic Mean Squared Error AMSE:
Note: is the highest integer such that In these notes we have restricted to the case for the kernels but there are theoretical gains if one allows high-order kernels with vanishing even moments larger than for estimating
Obtain the AMSE-optimal bandwidth:
The order of the optimal AMSE is
which shows that a parametric-like rate of convergence can be achieved with high-order kernels. If we consider and then
The above result has a major problem: it depends on ! Thus if we want to estimate by we will need to estimate But will depend on and so on. The solution to this convoluted problem is to stop estimating the functional after a given number of stages, therefore the terminology -stage plug-in selector. At the stage, the functional in the AMSE-optimal bandwidth for estimating is computed assuming that the density is a for which
Typically, two stages are considered a good trade-off between bias (mitigated when increases) and variance (augments with ) of the plug-in selector. This is the method proposed by Sheather and Jones (1991), where they consider and yielding what we call the direct plug-in (DPI). The algorithm is:
Estimate using where is given in (2.18)
Estimate using from (2.19), where
Estimate using from (2.19), where
The selected bandwidth is
Remark. The derivatives for the normal kernel can be obtained using Hermite polynomials: For and
is implemented in R through the function bw.SJ
(use method = "dpi"
). The package ks
provides hpi
, which is a faster implementation that allows for more flexibility and has a somehow more complete documentation.
# Data
<- rnorm(100)
x
# Rule-of-thumb
bw.SJ(x = x, method = "dpi")
## [1] 0.450495
# Similar to
library(ks)
hpi(x) # Default is two-stages
## [1] 0.4537216
2.4.2 Cross-validation
We turn now our attention to a different philosophy of bandwidth estimation. Instead of trying to minimize the AMISE by plugging-in estimates for the unknown curvature term, we directly attempt to minimize the MISE by using the sample twice: one for computing the kde and other for evaluating its performance on estimating To avoid the clear dependence on the sample, we do this evaluation in a cross-validatory way: the data used for computing the kde is not used for its evaluation.
We begin by expanding the square in the MISE expression:
Since the last term does not depend on minimizing is equivalent to minimizing
This quantity is unknown, but it can be estimated unbiasedly (see Exercise 2.7) by
where is the leave-one-out kde and is based on the sample with the removed:
The motivation for (2.20) is the following. The first term is unbiased by design. The second arises from approximating by Monte Carlo, or in other words, by replacing with This gives
and, in order to mitigate the dependence of the sample, we replace by above. In that way, we use the sample for estimating the integral involving but for each we compute the kde on the remaining points. The least squares cross-validation (LSCV) selector, also denoted unbiased cross-validation (UCV) selector, is defined as
Numerical optimization is required for obtaining contrary to the previous plug-in selectors, and there is little control on the shape of the objective function. This will be also the case for the forthcoming bandwidth selectors. The following remark warns about the dangers of numerical optimization in this context.
Remark. Numerical optimization of the LSCV function can be challenging. In practice, several local minima are possible, and the roughness of the objective function can vary notably depending on and As a consequence, optimization routines may get trapped in spurious solutions. To be on the safe side, it is always advisable to check the solution by plotting for a range of or to perform a search in a bandwidth grid:
is implemented in R through the function bw.ucv
. bw.ucv
uses R’s optimize
, which is quite sensible to the selection of the search interval (long intervals containing the solution may lead to unsatisfactory termination of the search; and short intervals might not contain the minimum). Therefore, some care is needed and that is why the bw.ucv.mod
function is presented.
# Data
set.seed(123456)
<- rnorm(100)
x
# UCV gives a warning
bw.ucv(x = x)
## [1] 0.4499177
# Extend search interval
args(bw.ucv)
## function (x, nb = 1000L, lower = 0.1 * hmax, upper = hmax, tol = 0.1 *
## lower)
## NULL
bw.ucv(x = x, lower = 0.01, upper = 1)
## [1] 0.5482419
# bw.ucv.mod replaces the optimization routine of bw.ucv by an exhaustive search on
# "h.grid" (chosen adaptatively from the sample) and optionally plots the LSCV curve
# with "plot.cv"
<- function(x, nb = 1000L,
bw.ucv.mod h.grid = diff(range(x)) * (seq(0.1, 1, l = 200))^2,
plot.cv = FALSE) {
if ((n <- length(x)) < 2L)
stop("need at least 2 data points")
<- as.integer(n)
n if (is.na(n))
stop("invalid length(x)")
if (!is.numeric(x))
stop("invalid 'x'")
<- as.integer(nb)
nb if (is.na(nb) || nb <= 0L)
stop("invalid 'nb'")
storage.mode(x) <- "double"
<- 1.144 * sqrt(var(x)) * n^(-1/5)
hmax <- .Call(stats:::C_bw_den, nb, x)
Z <- Z[[1L]]
d <- Z[[2L]]
cnt <- function(h) .Call(stats:::C_bw_ucv, n, d, cnt, h)
fucv # h <- optimize(fucv, c(lower, upper), tol = tol)$minimum
# if (h < lower + tol | h > upper - tol)
# warning("minimum occurred at one end of the range")
<- sapply(h.grid, function(h) fucv(h))
obj <- h.grid[which.min(obj)]
h if (plot.cv) {
plot(h.grid, obj, type = "o")
rug(h.grid)
abline(v = h, col = 2, lwd = 2)
}
h
}
# Compute the bandwidth and plot the LSCV curve
bw.ucv.mod(x = x, plot.cv = TRUE)
## [1] 0.5431732
# We can compare with the default bw.ucv output
abline(v = bw.ucv(x = x), col = 3)
The next cross-validation selector is based on biased cross-validation (BCV). The BCV selector presents a hybrid strategy that combines plug-in and cross-validation ideas. It starts by considering the AMISE expression in (2.17)
and then plugs-in an estimate for based on a modification of The modification is
a leave-out-diagonals estimate of It is designed to reduce the bias of since (Scott and Terrell 1987). Plugging-in (2.21) into the AMISE expression yields the BCV objective function and the BCV bandwidth selector:
The appealing property of is that it has a considerably smaller variance compared to This reduction in variance comes at the price of an increased bias, which tends to make larger than
is implemented in R through the function bw.bcv
. Again, bw.bcv
uses R’s optimize
so the bw.bcv.mod
function is presented to have better guarantees on finding the adequate minimum.
# Data
set.seed(123456)
<- rnorm(100)
x
# BCV gives a warning
bw.bcv(x = x)
## [1] 0.4500924
# Extend search interval
args(bw.bcv)
## function (x, nb = 1000L, lower = 0.1 * hmax, upper = hmax, tol = 0.1 *
## lower)
## NULL
bw.bcv(x = x, lower = 0.01, upper = 1)
## [1] 0.5070129
# bw.bcv.mod replaces the optimization routine of bw.bcv by an exhaustive search on
# "h.grid" (chosen adaptatively from the sample) and optionally plots the BCV curve
# with "plot.cv"
<- function(x, nb = 1000L,
bw.bcv.mod h.grid = diff(range(x)) * (seq(0.1, 1, l = 200))^2,
plot.cv = FALSE) {
if ((n <- length(x)) < 2L)
stop("need at least 2 data points")
<- as.integer(n)
n if (is.na(n))
stop("invalid length(x)")
if (!is.numeric(x))
stop("invalid 'x'")
<- as.integer(nb)
nb if (is.na(nb) || nb <= 0L)
stop("invalid 'nb'")
storage.mode(x) <- "double"
<- 1.144 * sqrt(var(x)) * n^(-1/5)
hmax <- .Call(stats:::C_bw_den, nb, x)
Z <- Z[[1L]]
d <- Z[[2L]]
cnt <- function(h) .Call(stats:::C_bw_bcv, n, d, cnt, h)
fbcv # h <- optimize(fbcv, c(lower, upper), tol = tol)$minimum
# if (h < lower + tol | h > upper - tol)
# warning("minimum occurred at one end of the range")
<- sapply(h.grid, function(h) fbcv(h))
obj <- h.grid[which.min(obj)]
h if (plot.cv) {
plot(h.grid, obj, type = "o")
rug(h.grid)
abline(v = h, col = 2, lwd = 2)
}
h
}
# Compute the bandwidth and plot the BCV curve
bw.bcv.mod(x = x, plot.cv = TRUE)
## [1] 0.5130493
# We can compare with the default bw.bcv output
abline(v = bw.bcv(x = x), col = 3)
2.4.3 Comparison of bandwidth selectors
We state next some insights from the convergence results of the DPI, LSCV, and BCV selectors. All of them are based in results of the kind
where depends only on and and measures how variable is the selector. The rate serves to quantify how fast the relative error decreases (the larger the the faster the convergence). Under certain regularity conditions, we have:
and Both selectors have a slow rate of convergence (compare it with the of the CLT). Inspection of the variances of both selectors reveals that, for the normal kernel Therefore, LSCV is considerably more variable than BCV.
Thus, the DPI selector has a convergence rate much faster than the cross-validation selectors. There is an appealing explanation for this phenomenon. Recall that minimizes the slightly modified version of given by
and
is a leave-out-diagonals estimate of Despite being different from it serves for building a DPI analogous to BCV that points towards the precise fact that drags down the performance of BCV. The modified version of the DPI minimizes
where is independent of The two methods differ on the the way is chosen: BCV sets and the modified DPI looks for the best in terms of the It can be seen that whereas the used in BCV is asymptotically This suboptimality on the choice of is the reason of the asymptotic deficiency of BCV.
We focus now on exploring the empirical performance of bandwidth selectors. The workhorse for doing that is simulation. A popular collection of simulation scenarios was given by Marron and Wand (1992) and are conveniently available through the package nor1mix
. They form a collection of normal -mixtures of the form
where and Densities of this form are specially attractive since they allow for arbitrarily flexibility and, if the normal kernel is employed, they allow for explicit and exact MISE expressions:
# Load package
library(nor1mix)
# Available models
?MarronWand
# Simulating
<- rnorMix(n = 500, obj = MW.nm9) # MW object in the second argument
samp hist(samp, freq = FALSE)
# Density evaluation
<- seq(-4, 4, length.out = 400)
x lines(x, dnorMix(x = x, obj = MW.nm9), col = 2)
# Plot a MW object directly
# A normal with the same mean and variance is plotted in dashed lines
par(mfrow = c(2, 2))
plot(MW.nm5)
plot(MW.nm7)
plot(MW.nm10)
plot(MW.nm12)
lines(MW.nm10) # Also possible
Figure 2.4 presents a visualization of the performance of the kde with different bandwidth selectors, carried out in the family of mixtures of Marron and Wand (1992).
Figure 2.4: Performance comparison of bandwidth selectors. The RT, DPI, LSCV, and BCV are computed for each sample for a normal mixture density. For each sample, computes the ISEs of the selectors and sorts them from best to worst. Changing the scenarios gives insight on the adequacy of each selector to hard- and simple-to-estimate densities. Application also available here.