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)
Arguments
-
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 length(n) > 1
, the length is taken to be the number required.
Details
If p Beta(α,β) and X Binomial(n,p), then X BetaBinomial(n,α,β).
Probability mass function
f(x)=(xn)B(α,β)B(x+α,n−x+β)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 c("\n", "B(x,y)=(Gamma(x)Gamma(y))/Gamma(x+y)\n"), and that c("\n", "choose(n,k)=prod((n+1−(1:k))/(1:k))\n"). This enables re-writing probability mass function as
f(x)=(i=1∏xin+1−i)B(α,β)(α+β+n−1)!(α+x−1)!(β+n−x−1)!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)=(i=1∏xin+1−i)x+1n+1−x+1B(α,β)(α+β+n−1)!(α+β+n)(α+x−1)!(α+x)(β+n−x−1)!(β+n−x)−1f(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)=k=0∑xf(k)F(x)=f(0)+...+f(x)
Examples
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)
See Also
Beta
, Binomial