假设我有一组我怀疑来自同一分布的数字。
set.seed(20130613)
x <- rcauchy(10)
我想要一个从相同的未知分布中随机生成数字的函数。我想到的一种方法是创建一个density
对象,然后从中获取 CDF 并获取随机统一变量的逆 CDF (参见 Wikipedia)。
den <- density(x)
#' Generate n random numbers from density() object
#'
#' @param n The total random numbers to generate
#' @param den The density object from which to generate random numbers
rden <- function(n, den)
{
diffs <- diff(den$x)
# Making sure we have equal increments
stopifnot(all(abs(diff(den$x) - mean(diff(den$x))) < 1e-9))
total <- sum(den$y)
den$y <- den$y / total
ydistr <- cumsum(den$y)
yunif <- runif(n)
indices <- sapply(yunif, function(y) min(which(ydistr > y)))
x <- den$x[indices]
return(x)
}
rden(1, den)
## [1] -0.1854121
我的问题如下:
- 是否有更好的(或内置于 R 中)从密度对象生成随机数的方法?
sample
关于如何从一组数字(除了)生成随机数还有其他想法吗?