I was wondering if anyone has an idea on how to calculate the contribution to variance of each independent variable in a Zero-Inflated Poisson. How would it even work if you actually have two models within it (the count and the zero-inflated)?

Here's my function call in R in case it might be helpful, I'm using the pscl package to run the Zero-Inflated Poisson. Ideally I would like to keep using R for this solution, but other solutions are welcomed.

> zip <- zeroinfl(Y ~ X, dist = 'poisson')
> summary(zip)

1 Answer 1


I would recommend proceeding by analogy to the OLS case. In OLS, you interpret $R^2$ as total variance explained and decompose it additively into contributions from each predictor.

First, you need an alternative to $R^2$ that makes sense for ZIP regression. You could look at the various pseudo-$R^2$, or look at measures of deviance.

Once you have an "$R^2$", it is straightforward to adapt OLS variance decomposition to ZIP regression. Essentially, you will add your regressors to the model one by one and record the increase in "$R^2$" as you add it. Since this depends on the regressors already in the model, you need to repeat this for all possible orders in which your regressors could enter the model, and finally average over all orders. Grömping (2007, The American Statistician) has some pointers to literature.

  • $\begingroup$ Thank you Stephan. I do have 8 independent variables. That would be 8*7*6*5*4*3*2 combinations right? So I should test them all for each independent variable and average the pseudo-R2? Any tips on how to do this? $\endgroup$ Commented May 9, 2016 at 7:08
  • 1
    $\begingroup$ Yes, that's $8! = 40320$ different orders in which your regressors can enter the model. It should be possible to run this in a loop, perhaps overnight. Record the incremental pseudo-$R^2$ as each regressor enters the model. For each regressor, you will get 40320 different pseudo-$R^2$ increments. Average these for each regressor. $\endgroup$ Commented May 9, 2016 at 8:37

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.