Weighted kernel smoother
An unnormalised version of kernel density estimation where the weights are not required to sum to 1. The weights may be positive, negative or zero.
unnormdensity(x, ..., weights = NULL)
- Numeric vector of data
- Arguments passed to
density.default. Arguments must be named.
- Optional numeric vector of weights for the data.
This is an alternative to the standard Rkernel density estimation function
weights to be nonnegative numbers that add up to 1,
and returns a probability density (a function that integrates to 1).
unnormdensity does not impose any requirement
weights except that they be finite. Individual weights may be
positive, negative or zero. The result is a function that does not
necessarily integrate to 1 and may be negative. The result is
the convolution of the kernel $k$ with the weighted data,
$$f(x) = \sum_i w_i k(x- x_i)$$
where $x_i$ are the data points and $w_i$ are the
The algorithm first selects the kernel bandwidth by
density.default to the data
x with normalised, positive weight vector
w = abs(weights)/sum(abs(weights)) and
extracting the selected bandwidth.
Then the result is computed by applying
using the normalised positive and negative parts of the weights.
Note that the arguments
... must be passed by name,
i.e. in the form (
name=value). Arguments that do not match
an argument of
density.default will be ignored
- Object of class
"density"as described in
d <- unnormdensity(1:3, weights=c(-1,0,1)) if(interactive()) plot(d)