Beta-binomial distribution
Probability mass function and random generation for the beta-binomial distribution.
dbbinom(x, size, alpha = 1, beta = 1, log = FALSE) pbbinom(q, size, alpha = 1, beta = 1, lower.tail = TRUE, log.p = FALSE) rbbinom(n, size, alpha = 1, beta = 1)
x, q |
vector of quantiles. |
size |
number of trials (zero or more). |
alpha, beta |
non-negative parameters of the beta distribution. |
log, log.p |
logical; if TRUE, probabilities p are given as log(p). |
lower.tail |
logical; if TRUE (default), probabilities are P[X ≤ x] otherwise, P[X > x]. |
n |
number of observations. If |
If p ~ Beta(α, β) and X ~ Binomial(n, p), then X ~ BetaBinomial(n, α, β).
Probability mass function
f(x) = choose(n, x) * B(x+α, n-x+β) / B(α, β)
Cumulative distribution function is calculated using recursive algorithm that employs the fact that Γ(x) = (x - 1)!, and B(x, y) = (Γ(x)Γ(y))/Γ(x+y) , and that choose(n,k) = prod((n+1-(1:k))/(1:k)) . This enables re-writing probability mass function as
f(x) = prod((n+1-(1:x))/(1:x)) * (((α+x-1)!*(β+n-x-1)!)/((α+β+n+1)!)) / B(α, β)
what makes recursive updating from x to x+1 easy using the properties of factorials
f(x+1) = prod((n+1-(1:x))/(1:x)) * ((n+1-x+1)/(x+1)) * (((α+x-1)!*(α+x)*(β+n-x-1)!/(β+n-x))/((α+β+n+1)!*(α+β+n))) / B(α, β)
and let's us efficiently calculate cumulative distribution function as a sum of probability mass functions
F(x) = f(0)+...+f(x)
x <- rbbinom(1e5, 1000, 5, 13) xx <- 0:1000 hist(x, 100, freq = FALSE) lines(xx-0.5, dbbinom(xx, 1000, 5, 13), col = "red") hist(pbbinom(x, 1000, 5, 13)) xx <- seq(0, 1000, by = 0.1) plot(ecdf(x)) lines(xx, pbbinom(xx, 1000, 5, 13), col = "red", lwd = 2)
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.