Learn R Programming

PoissonBinomial (version 1.0.2-1)

Poisson-Binomial-Distribution: The Poisson Binomial Distribution

Description

Density, distribution function, quantile function and random generation for the Poisson binomial distribution with probability vector probs.

Usage

dpbinom(x, probs, wts = NULL, method = "DivideFFT", log = FALSE)

ppbinom( x, probs, wts = NULL, method = "DivideFFT", lower.tail = TRUE, log.p = FALSE )

qpbinom( p, probs, wts = NULL, method = "DivideFFT", lower.tail = TRUE, log.p = FALSE )

rpbinom(n, probs, wts = NULL, method = "DivideFFT")

Arguments

x

Either a vector of observed numbers of successes or NULL. If NULL, probabilities of all possible observations are returned.

probs

Vector of probabilities of success of each Bernoulli trial.

wts

Vector of non-negative integer weights for the input probabilities.

method

Character string that specifies the method of computation and must be one of "DivideFFT", "Convolve", "Characteristic", "Recursive", "Mean", "GeoMean", "GeoMeanCounter", "Poisson", "Normal" or "RefinedNormal" (abbreviations are allowed).

log, log.p

Logical value indicating if results are given as logarithms.

lower.tail

Logical value indicating if results are \(P[X \leq x]\) (if TRUE; default) or \(P[X > x]\) (if FALSE).

p

Vector of probabilities for computation of quantiles.

n

Number of observations. If length(n) > 1, the length is taken to be the number required.

Value

dpbinom gives the density, ppbinom gives the distribution function, qpbinom gives the quantile function and rpbinom generates random deviates.

For rpbinom, the length of the result is determined by n, and is the lengths of the numerical arguments for the other functions.

Details

See the references for computational details. The Divide and Conquer ("DivideFFT") and Direct Convolution ("Convolve") algorithms are derived and described in Biscarri et al. (2018). The Discrete Fourier Transformation of the Characteristic Function ("Characteristic"), the Recursive Formula ("Recursive"), the Poisson Approximation ("Poisson"), the Normal Approach ("Normal") and the Refined Normal Approach ("RefinedNormal") are described in Hong (2013). The calculation of the Recursive Formula was modified to overcome the excessive memory requirements of Hong's implementation.

The "Mean" method is a naive binomial approach using the arithmetic mean of the probabilities of success. Similarly, the "GeoMean" and "GeoMeanCounter" procedures are binomial approximations, too, but they form the geometric mean of the probabilities of success ("GeoMean") and their counter probabilities ("GeoMeanCounter"), respectively.

In some special cases regarding the values of probs, the method parameter is ignored.

All values are 0 or 1:

The Distribution is not random can can only attain one value, which is the number of ones, \(n_1\).

Only one value is different from 0 or 1:

The Distribution essentially is a Bernoulli Distribution and can only attain \(n_1\) or \(n_1 + 1\).

All values are equal:

The Distribution is an ordinary Binomial Distribution.

References

Hong, Y. (2013). On computing the distribution function for the Poisson binomial distribution. Computational Statistics & Data Analysis, 59, pp. 41-51. doi: 10.1016/j.csda.2012.10.006

Biscarri, W., Zhao, S. D. and Brunner, R. J. (2018) A simple and fast method for computing the Poisson binomial distribution. Computational Statistics and Data Analysis, 31, pp. 216<U+2013>222. doi: 10.1016/j.csda.2018.01.007

Examples

Run this code
# NOT RUN {
set.seed(1)
pp <- c(0, 0, runif(995), 1, 1, 1)
qq <- seq(0, 1, 0.01)

dpbinom(NULL, pp, method = "DivideFFT")
ppbinom(450:550, pp, method = "DivideFFT")
qpbinom(qq, pp, method = "DivideFFT")
rpbinom(100, pp, method = "DivideFFT")

dpbinom(NULL, pp, method = "Convolve")
ppbinom(450:550, pp, method = "Convolve")
qpbinom(qq, pp, method = "Convolve")
rpbinom(100, pp, method = "Convolve")

dpbinom(NULL, pp, method = "Characteristic")
ppbinom(450:550, pp, method = "Characteristic")
qpbinom(qq, pp, method = "Characteristic")
rpbinom(100, pp, method = "Characteristic")

dpbinom(NULL, pp, method = "Recursive")
ppbinom(450:550, pp, method = "Recursive")
qpbinom(qq, pp, method = "Recursive")
rpbinom(100, pp, method = "Recursive")

dpbinom(NULL, pp, method = "Mean")
ppbinom(450:550, pp, method = "Mean")
qpbinom(qq, pp, method = "Mean")
rpbinom(100, pp, method = "Mean")

dpbinom(NULL, pp, method = "GeoMean")
ppbinom(450:550, pp, method = "GeoMean")
qpbinom(qq, pp, method = "GeoMean")
rpbinom(100, pp, method = "GeoMean")

dpbinom(NULL, pp, method = "GeoMeanCounter")
ppbinom(450:550, pp, method = "GeoMeanCounter")
qpbinom(qq, pp, method = "GeoMeanCounter")
rpbinom(100, pp, method = "GeoMeanCounter")

dpbinom(NULL, pp, method = "Poisson")
ppbinom(450:550, pp, method = "Poisson")
qpbinom(qq, pp, method = "Poisson")
rpbinom(100, pp, method = "Poisson")

dpbinom(NULL, pp, method = "Normal")
ppbinom(450:550, pp, method = "Normal")
qpbinom(qq, pp, method = "Normal")
rpbinom(100, pp, method = "Normal")

dpbinom(NULL, pp, method = "RefinedNormal")
ppbinom(450:550, pp, method = "RefinedNormal")
qpbinom(qq, pp, method = "RefinedNormal")
rpbinom(100, pp, method = "RefinedNormal")
# }

Run the code above in your browser using DataLab