Displaying 1 result from an estimated 1 matches for "icmf".
Did you mean:
icm
2007 Sep 04
2
Efficient sampling from a discrete distribution in R
...'t bring back anything. So, here's my first attempt at a
solution. I'm hoping someone here knows of a more efficient way.
# Sample from a discrete distribution with given probability mass function
rdiscrete = function(size, pmf) {
stopifnot(length(pmf) > 1)
cmf = cumsum(pmf)
icmf = function(p) {
min(which(p < cmf))
}
ps = runif(size)
sapply(ps, icmf)
}
test.rdiscrete = function(N = 10000) {
err.tol = 6.0 / sqrt(N)
xs = rdiscrete(N, c(0.5, 0.5))
err = abs(sum(xs == 1) / N - 0.5)
stopifnot(err < err.tol)
list(e = err, xs = xs)
}
Thanks,
Issac