# Zero-inflated vs not Zero-inflated models for count data

I am analyzing a small dataset of urinary track infections and functional status in 29 residents in long-term care institution over 6 months.

I used Poisson regression to explore the association between number of infections as a function of functional status. I tested for overdispersion using the likelihood ratio test, which was non-significant. Hence, I decided to keep the Poisson regression approach instead of performing a negative binomial regression.

A reviewer asked if zero-inflated Poisson Regression wouldn’t be more appropriate given the proportion of zeros in the outcome variable. I could not find a clear reference in several textbooks and websites defining clearly what proportion of zeros should prompt the use of zero-inflated models.

Can anyone provide me with some guidance on this issue?

n_inf stands for the number of infections

funClass stands for a functional classification ranging from 0 two 3

d$funClass = as.factor(c(0, 0, 1, 3, 2, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1)) d$n_inf = c( 1, 1, 1, 1, 1, 1, 0, 2, 3, 2, 1, 0, 2, 0, 2, 0, 1, 2, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1)

# Poisson regression

m.pois = glm(d$$n_inf ~ d$$funClass, family= "poisson")

# Testing for over dispersion

with(m.pois, cbind(res.deviance = deviance, df = df.residual, p = pchisq(deviance, df.residual, lower.tail=FALSE)))

• Try the vignette in the pscl package for some tips. By the way your example does not run, did you mean to make functional classification a factor rather than number of infections? Apr 9, 2019 at 15:24
• Yes, I meant making functional classification as a factor but mistyped the example. I just edited my question. Thank you for pointing out the problem with my original post! Apr 9, 2019 at 20:50
• I am also grateful for your reference to the vignette in the pscl package. I just accessed it and intend to read it as soon as possible. I will explain below how others interested in this subject may have access to that text. First we have to install the pscl package, then load it using 'library(pscl)', then type 'vignette("counters", package = "pscl"). Apr 9, 2019 at 21:04

First, there are some problems with the formatting of your post. I made a working version of your code, below).

Over dispersion is a different matter from 0 inflation (although they are often related). NB is a response to overdispersion, not zero inflation. (That's one reason there are zero inflated Poisson and zero inflated NB as well as regular versions of both).

I can suggest two approaches to this.

1. Compare the actual distribution to the predicted distribution using the Poisson. Look and see if the number of 0s is much too low in the predicted version. Unfortunately, your model gives all 1s (with rounding):

 funClass = c(0, 0, 1, 3, 2, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1)

n_inf = c( 1, 1, 1, 1, 1, 1, 0, 2, 3, 2, 1, 0, 2, 0, 2, 0, 1, 2, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1)

m.pois = glm(n_inf ~ funClass, family= "poisson")

table(round(m.pois$fitted.values))  gives all 1's. So, yes, it's too few 0's, but it's also an indication that the model isn't working very well, in general. Now let's try a ZIP model: install.packages("pscl") library(pscl) m.zip <- zeroinfl(n_inf ~ funClass) table(round(m.zip$fitted.values))


Unfortunately, this also gives all 1's.

1. You can compare the fitted values of the two models:

 plot(m.zip$fitted.values, m.pois$fitted.values)

This shows that the two models predict exactly the same values. A ZINB model has the same problem.

So ... what is going on? Let us go back to simple:

table(funClass,n_inf)


shows why no model is finding anything - there is really no relationship.

• I am very grateful to you for taking your time to answer my question and for sharing your expertise. I agree that there is no relationship between the two variables, which was a noteworthy finding for the purposes of that study. In this case, because the Poisson and the Zero-inflated models yielded similar fitted values, this mean that I should stick with the Poisson regression, which entails simpler interpretation. Apr 9, 2019 at 21:26
• If I may, I would like to ask you further questions regarding your first answer. What should be considered a a "too low" number of zeros in the predicted values of the Poisson regression to allow a judgment that a zero-inflated model would not be necessary? When comparing the predicted values of the Poisson regression with the predicted values of the zero-inflated poisson regression, what kind of findings suggest that one should favor one model over the other. Again, thank you so much! Apr 9, 2019 at 21:26
• I don't think there is a hard and fast answer to this. Is the difference big enough to be important to you? Will others in your field find it big? Or, in business terms, will it make a difference in how you behave? Apr 10, 2019 at 12:16