Uses the guide table aided inversion method (also know as indexed search method) for simulating a discrete/categorical probability distribution (that takes on only a finite number of values) from its probability mass function.

rpmf.table(x, prob = 1/length(x), m, n = 1000, as.factor = FALSE)



numeric vector giving the possible values of the discrete random variable.


numeric vector giving the probabilities corresponding to x.


size of the table with starting points for the search.


number of observations to generate.


logical; if TRUE, the returned vector is encoded as a factor with levels x.


Returns a numeric vector, or a factor if as.factor = TRUE, with the random deviates and an attribute ncomp with the required number of comparisons in the sequential search.


# Simulation of a binomial distribution
n <- 10
p <- 0.5
nsim <- 10^5
x <- 0:n
pmf <- dbinom(x, n, p)
rx <- rpmf.table(x, pmf, n-1, nsim)
# Relative frequency plot
plot(table(rx)/nsim, ylab = "Relative frequency", xlab = "Value")
abline(v = mean(rx))
# Theoretical values
points(x, pmf, pch = 4, col = "blue")
abline(v = p*n, lty = 2, col = "blue")

# Number of comparisons
ncomp <- attr(rx, "ncomp")
ncomp/nsim # mean number
#> [1] 0.55951
sum((1:length(x))*pmf) # theoretical expected number with sequential search
#> [1] 6