I have used glm() to model some data I have. The code looks like the following:

for(ddm_idx in 1:90) {
    for(ppm_idx in 1:90) {
        mdfit <- glm(cuse[[4]] ~ cuse_ddm[[3 + ddm_idx]] + cuse_ddm[[3 + ddm_idx]]^2 + 
                                 cuse_ppm[[3 + ppm_idx]] + cuse_ppm[[3 + ppm_idx]]^2 + 
                                 cuse_ddm[[3 + ddm_idx]]*cuse_ppm[[3 + ppm_idx]], 
        mdfit_dev[ddm_idx, ppm_idx] <- deviance(mdfit)

It turns out that for each "case", I have about 90 different data points for ddm and ppm and so that's why I have the for loop run twice. I know this is correct because a post-doc in stats also ran the same in MATLAB and got the same results.

However, my next task to to use zero inflated Poisson distribution as I have a lot of zeros in my dataset. Some of these zeros are "true" zeros and some of them false.

How can I modify my code to use glm() for this distribution?

  • Could you clarify what you mean by a false zero? – Glen_b Mar 24 '14 at 3:24
  • 1
    Thanks. So both missing/NA and 0 are both coded as 0. – Glen_b Mar 24 '14 at 3:58
  • 1
    Do you know what regression is? As in the first sentence here? In Poisson regression (and glms more generally), regressors (predictors, independent variables) play the same conceptual role as in multiple linear regression. – Glen_b Mar 24 '14 at 4:14
  • 1
    This question appears to be off-topic because it is about asking for code. – gung Mar 27 '14 at 18:20
  • 2
    @gung Yes, this post does ask for code. But it also implicitly raises a question of how one could correctly handle mis-coded data in which true zeros are confounded with missing values. That question could only be answered here, not on SO, and a good answer would likely be much more useful than a pedestrian answer that points the OP to some blackbox code (which, if employed, would likely give bad results). – whuber Mar 27 '14 at 18:42
up vote 1 down vote accepted

zeroinfl() in the pscl package fits the zero-inflated Poisson regression model.

  • Welcome to the site, @pyoi. This isn't really an answer to the OP's question, it is more of a comment. Please only use the "Your Answer" field to provide answers. I know it's frustrating, but you will be able to comment anywhere when your reputation >50. Alternatively, you could expand this to make it more of an answer. Since you are new here, you may want to take our tour, which contains information for new users. – gung Mar 27 '14 at 18:22

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

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