Zero-Inflated Poisson Distribution
Density, distribution function, quantile function and random generation
for the zero-inflated and zero-deflated
Poisson distribution with parameter pstr0
.
dzipois(x, lambda, pstr0 = 0, log = FALSE) pzipois(q, lambda, pstr0 = 0) qzipois(p, lambda, pstr0 = 0) rzipois(n, lambda, pstr0 = 0)
x, q |
vector of quantiles. |
p |
vector of probabilities. |
n |
number of observations. Must be a single positive integer. |
lambda |
Vector of positive means. |
pstr0 |
Probability of a structural zero (i.e., ignoring the Poisson distribution), called phi. The default value of phi = 0 corresponds to the response having an ordinary Poisson distribution. This argument may be negative to allow for 0-deflation, hence its interpretation as a probability ceases. |
log |
Logical. Return the logarithm of the answer? |
The probability function of Y is 0 with probability phi, and Poisson(lambda) with probability 1-phi. Thus
P(Y=0) = phi + (1-phi) * P(W=0)
where W is distributed Poisson(lambda).
dzipois
gives the density,
pzipois
gives the distribution function,
qzipois
gives the quantile function, and
rzipois
generates random deviates.
The argument pstr0
is recycled to the required length, and
must have values which lie in the interval [0,1].
These functions actually allow for the zero-deflated
Poisson distribution. Here, pstr0
is also permitted
to lie in the interval [-1/expm1(lambda), 0]
. The
resulting probability of a zero count is less than
the nominal Poisson value, and the use of pstr0
to
stand for the probability of a structural zero loses its
meaning. When pstr0
equals -1/expm1(lambda)
this corresponds to the positive-Poisson distribution
(e.g., see Gaitpois
).
T. W. Yee
lambda <- 3; pstr0 <- 0.2; x <- (-1):7 (ii <- dzipois(x, lambda, pstr0 = pstr0)) max(abs(cumsum(ii) - pzipois(x, lambda, pstr0 = pstr0))) # Should be 0 table(rzipois(100, lambda, pstr0 = pstr0)) table(qzipois(runif(100), lambda, pstr0)) round(dzipois(0:10, lambda, pstr0 = pstr0) * 100) # Should be similar ## Not run: x <- 0:10 par(mfrow = c(2, 1)) # Zero-inflated Poisson barplot(rbind(dzipois(x, lambda, pstr0 = pstr0), dpois(x, lambda)), beside = TRUE, col = c("blue", "orange"), main = paste("ZIP(", lambda, ", pstr0 = ", pstr0, ") (blue) vs", " Poisson(", lambda, ") (orange)", sep = ""), names.arg = as.character(x)) deflat.limit <- -1 / expm1(lambda) # Zero-deflated Poisson newpstr0 <- round(deflat.limit / 1.5, 3) barplot(rbind(dzipois(x, lambda, pstr0 = newpstr0), dpois(x, lambda)), beside = TRUE, col = c("blue","orange"), main = paste("ZDP(", lambda, ", pstr0 = ", newpstr0, ") (blue) vs", " Poisson(", lambda, ") (orange)", sep = ""), names.arg = as.character(x)) ## End(Not run)
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.