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!,  y≥1P(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 overdispersed ⇒ ZINB.
  • 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​