stats (version 3.6.2)

Poisson: The Poisson Distribution


Density, distribution function, quantile function and random generation for the Poisson distribution with parameter lambda.


dpois(x, lambda, log = FALSE)
ppois(q, lambda, lower.tail = TRUE, log.p = FALSE)
qpois(p, lambda, lower.tail = TRUE, log.p = FALSE)
rpois(n, lambda)



vector of (non-negative integer) quantiles.


vector of quantiles.


vector of probabilities.


number of random values to return.


vector of (non-negative) means.

log, log.p

logical; if TRUE, probabilities p are given as log(p).


logical; if TRUE (default), probabilities are \(P[X \le x]\), otherwise, \(P[X > x]\).


dpois gives the (log) density, ppois gives the (log) distribution function, qpois gives the quantile function, and rpois generates random deviates.

Invalid lambda will result in return value NaN, with a warning.

The length of the result is determined by n for rpois, and is the maximum of the lengths of the numerical arguments for the other functions.

The numerical arguments other than n are recycled to the length of the result. Only the first elements of the logical arguments are used.


The Poisson distribution has density $$p(x) = \frac{\lambda^x e^{-\lambda}}{x!}$$ for \(x = 0, 1, 2, \ldots\) . The mean and variance are \(E(X) = Var(X) = \lambda\).

Note that \(\lambda = 0\) is really a limit case (setting \(0^0 = 1\)) resulting in a point mass at \(0\), see also the example.

If an element of x is not integer, the result of dpois is zero, with a warning. \(p(x)\) is computed using Loader's algorithm, see the reference in dbinom.

The quantile is right continuous: qpois(p, lambda) is the smallest integer \(x\) such that \(P(X \le x) \ge p\).

Setting lower.tail = FALSE allows to get much more precise results when the default, lower.tail = TRUE would return 1, see the example below.

See Also

Distributions for other standard distributions, including dbinom for the binomial and dnbinom for the negative binomial distribution.



Run this code

-log(dpois(0:7, lambda = 1) * gamma(1+ 0:7)) # == 1
Ni <- rpois(50, lambda = 4); table(factor(Ni, 0:max(Ni)))

1 - ppois(10*(15:25), lambda = 100)  # becomes 0 (cancellation)
    ppois(10*(15:25), lambda = 100, lower.tail = FALSE)  # no cancellation

par(mfrow = c(2, 1))
x <- seq(-0.01, 5, 0.01)
plot(x, ppois(x, 1), type = "s", ylab = "F(x)", main = "Poisson(1) CDF")
plot(x, pbinom(x, 100, 0.01), type = "s", ylab = "F(x)",
     main = "Binomial(100, 0.01) CDF")

## The (limit) case  lambda = 0 :
stopifnot(identical(dpois(0,0), 1),
	  identical(ppois(0,0), 1),
	  identical(qpois(1,0), 0))
# }

Run the code above in your browser using DataLab