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

I am analyzing a small dataset (d) of urinary track infections in a group of residents of a long-term care institution over a period of 6 months. The total number of patients was 29.

I had used Poisson regression to explore the association between number of infections and a functional classification. I tested for over dispersion using the likelihood test, which was negative. 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? – mdewey Apr 9 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! – user156625 Apr 9 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"). – user156625 Apr 9 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's going on? Let's go back to simple:

table(funClass,n_inf)


shows why no model is finding anything - there's 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. – user156625 Apr 9 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! – user156625 Apr 9 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? – Peter Flom Apr 10 at 12:16