| rmvg {kernelboot} | R Documentation |
Random generation from multivariate Gaussian kernel density
Description
Random generation from multivariate Gaussian kernel density
Usage
rmvg(n, y, bw = bw.silv(y), weights = NULL, adjust = 1)
Arguments
n |
number of observations. If |
y |
numeric matrix or data.frame. |
bw |
numeric matrix with number of rows and columns equal to
|
weights |
numeric vector of length equal to |
adjust |
scalar; the bandwidth used is actually |
Details
Multivariate kernel density estimator with multivariate Gaussian (normal) kernels
K_H is defined as
\hat{f_H}(\mathbf{x}) = \sum_{i=1}^n w_i \, K_H \left( \mathbf{x}-\boldsymbol{y}_i \right)
where w is a vector of weights such that all w_i \ge 0
and \sum_i w_i = 1 (by default uniform 1/n weights are used),
K_H is kernel K parametrized by bandwidth matrix H and
\boldsymbol{y} is a matrix of data points used for estimating the kernel density.
Random generation from multivariate normal distribution is possible by taking
x = A' z + \mu
where z is a vector of m i.i.d. standard normal deviates,
\mu is a vector of means and A is a m \times m
matrix such that A'A=\Sigma (A is a Cholesky
factor of \Sigma). In the case of multivariate Gaussian kernel
density, \mu, is the i-th row of \boldsymbol{y},
where i is drawn randomly with replacement with probability
proportional to w_i, and \Sigma is the bandwidth
matrix H.
For functions estimating kernel densities please check KernSmooth, ks, or other packages reviewed by Deng and Wickham (2011).
References
Deng, H. and Wickham, H. (2011). Density estimation in R. http://vita.had.co.nz/papers/density-estimation.pdf
See Also
Examples
set.seed(1)
dat <- mtcars[, c(1,3)]
bw <- bw.silv(dat)
X <- rmvg(5000, dat, bw = bw)
if (requireNamespace("ks", quietly = TRUE)) {
pal <- colorRampPalette(c("chartreuse4", "yellow", "orange", "brown"))
col <- pal(10)[cut(ks::kde(dat, H = bw, eval.points = X)$estimate, breaks = 10)]
plot(X, col = col, pch = 19, axes = FALSE,
main = "Multivariate Gaussian Kernel")
points(dat, pch = 2, col = "blue")
axis(1); axis(2)
} else {
plot(X, pch = 16, axes = FALSE, col = "#458B004D",
main = "Multivariate Gaussian Kernel")
points(dat, pch = 2, col = "red", lwd = 2)
axis(1); axis(2)
}