# NegBinomial {stats}

The Negative Binomial Distribution
Package:
stats
Version:
R 3.0.2

### Description

Density, distribution function, quantile function and random generation for the negative binomial distribution with parameters `size` and `prob`.

### Usage

```dnbinom(x, size, prob, mu, log = FALSE)
pnbinom(q, size, prob, mu, lower.tail = TRUE, log.p = FALSE)
qnbinom(p, size, prob, mu, lower.tail = TRUE, log.p = FALSE)
rnbinom(n, size, prob, mu)
```

### Arguments

x
vector of (non-negative integer) quantiles.
q
vector of quantiles.
p
vector of probabilities.
n
number of observations. If `length(n) > 1`, the length is taken to be the number required.
size
target for number of successful trials, or dispersion parameter (the shape parameter of the gamma mixing distribution). Must be strictly positive, need not be integer.
prob
probability of success in each trial. `0 < prob <= 1`.
mu
alternative parametrization via mean: see ‘Details’.
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].

### Details

The negative binomial distribution with `size` = n and `prob` = p has density for x = 0, 1, 2, ..., n > 0 and 0 < p ≤ 1.

This represents the number of failures which occur in a sequence of Bernoulli trials before a target number of successes is reached. The mean is n(1-p)/p and variance n(1-p)/p^2.

A negative binomial distribution can also arise as a mixture of Poisson distributions with mean distributed as a gamma distribution (see`pgamma`) with scale parameter `(1 - prob)/prob` and shape parameter `size`. (This definition allows non-integer values of `size`.)

An alternative parametrization (often used in ecology) is by the mean `mu`, and `size`, the dispersion parameter, where `prob` = `size/(size+mu)`. The variance is `mu + mu^2/size` in this parametrization.

If an element of `x` is not integer, the result of `dnbinom` is zero, with a warning.

The case `size == 0` is the distribution concentrated at zero. This is the limiting distribution for `size` approaching zero, even if `mu` rather than `prob` is held constant. Notice though, that the mean of the limit distribution is 0, whatever the value of `mu`.

The quantile is defined as the smallest value x such that F(x) ≥ p, where F is the distribution function.

### Values

`dnbinom` gives the density, `pnbinom` gives the distribution function, `qnbinom` gives the quantile function, and `rnbinom` generates random deviates.

Invalid `size` or `prob` will result in return value `NaN`, with a warning. The length of the result is determined by `n` for `rnbinom`, and is the maximum of the lengths of the numerical parameters for the other functions. The numerical parameters other than `n` are recycled to the length of the result. Only the first elements of the logical parameters are used.

Distributions for standard distributions, including `dbinom` for the binomial, `dpois` for the Poisson and `dgeom` for the geometric distribution, which is a special case of the negative binomial.

### Examples

```require(graphics)
x <- 0:11
dnbinom(x, size = 1, prob = 1/2) * 2^(1 + x) # == 1
126 /  dnbinom(0:8, size  = 2, prob  = 1/2) #- theoretically integer

## Cumulative ('p') = Sum of discrete prob.s ('d');  Relative error :
summary(1 - cumsum(dnbinom(x, size = 2, prob = 1/2)) /
pnbinom(x, size  = 2, prob = 1/2))

x <- 0:15
size <- (1:20)/4
persp(x, size, dnb <- outer(x, size, function(x,s) dnbinom(x, s, prob = 0.4)),
xlab = "x", ylab = "s", zlab = "density", theta = 150)
title(tit <- "negative binomial density(x,s, pr = 0.4)  vs.  x & s")

image  (x, size, log10(dnb), main = paste("log [", tit, "]"))
contour(x, size, log10(dnb), add = TRUE)

## Alternative parametrization
x1 <- rnbinom(500, mu = 4, size = 1)
x2 <- rnbinom(500, mu = 4, size = 10)
x3 <- rnbinom(500, mu = 4, size = 100)
h1 <- hist(x1, breaks = 20, plot = FALSE)
h2 <- hist(x2, breaks = h1\$breaks, plot = FALSE)
h3 <- hist(x3, breaks = h1\$breaks, plot = FALSE)
barplot(rbind(h1\$counts, h2\$counts, h3\$counts),
beside = TRUE, col = c("red","blue","cyan"),
names.arg = round(h1\$breaks[-length(h1\$breaks)]))```

Documentation reproduced from R 3.0.2. License: GPL-2.