Skip to main content

ZIP — Zero-Inflated Poisson

ZIP (Zero-Inflated Poisson) handles count data with excess zeros beyond what Poisson predicts, when zeros arise from two different mechanisms: an "always zero" group (structural zeros) and a Poisson-count group (which may incidentally be zero).

When to use

Use ZIP when count data has many zeros and you believe there is a group for which "the event never happens" (e.g. cigarettes/day: non-smokers are always 0).


Two-part mixture structure

P(Yi=0)=πi+(1πi)eμi,P(Yi=y)=(1πi)eμiμiyy!,  y1P(Y_i = 0) = \pi_i + (1 - \pi_i) e^{-\mu_i}, \qquad P(Y_i = y) = (1 - \pi_i) \frac{e^{-\mu_i}\mu_i^{y}}{y!}, \; y \ge 1

where πi\pi_i (probability of a structural zero) is modeled by logit/probit; μi=exp(Xiβ)\mu_i = \exp(X_i\beta).


Running in EcoLab

  1. Modeling module → Count data family → ZIP.
  2. Declare variables for the count part (XX) and the inflation part (predictors of "always zero").
  3. Run; compare with Poisson via the Vuong test; export the replication code.

Replication code

* ===== ZIP — Zero-Inflated Poisson =====
* Count part: patents ~ rd_spend + firm_size
* Inflation part: inflate(small_firm)
zip patents rd_spend firm_size, inflate(small_firm) vuong

* IRR for the count part
zip patents rd_spend firm_size, inflate(small_firm) irr

* Vuong test: significant ⇒ ZIP preferred over standard Poisson
* Shown at the bottom of the output

Limitations

  • If the count part is still overdispersedZINB.
  • More complex interpretation (two equations); needs clear theory for the zero mechanism.

Video tutorial

Video Tutorial: Guide to running Zero-Inflated Poisson (ZIP) in EcoLab

See also