[R] Obtaining a value of pie in a zero inflated model (fm-zinb2)

Ben Bolker bbo|ker @end|ng |rom gm@||@com
Mon Jan 8 03:04:15 CET 2024


    A little more.

   As Christopher Ryan points out, as long as the zero-inflation model 
is non-trivial (i.e. more complex than a single intercept for the whole 
population), there's a pi(i) for every observation i (you could 
certainly average the pi(i) values if you wanted, or compute pi for an 
averaged set of covariates).

library(pscl)
fm_zinb2 <- zeroinfl(art ~ . | ., data = bioChemists, dist = "poisson")

pi_i <- predict(fm_zinb2, type = "zero")
head(pi_i)
##          1          2          3          4          5          6
## 0.13392803 0.21936320 0.21973454 0.24697313 0.01890023 0.34281196


To get the conditional probability that a zero observation is a 
structural or a sampling zero, compute the probability of a sampling 
zero (exp(-mu[i]) for a Poisson model) and use Bayes' rule, assuming 
equal prior probs

## probability of _sampling_ zero

psampz <- exp(-predict(fm_zinb2, type = "count"))
head(psampz)
##          1          2          3          4          5          6
## 0.09507376 0.18361241 0.18688646 0.14774602 0.08992667 0.27235498

pz <- 1 - (1-pi_i)*(1-psampz)  ## prob of zero of either type
##         1         2         3         4         5         6
## 0.2162687 0.3626978 0.3655556 0.3582299 0.1071273 0.5218004

psampz/pz
head(psampz)/head(pz)
##         1         2         3         4         5         6
## 0.4396093 0.5062408 0.5112395 0.4124336 0.8394378 0.5219524

    3. I'm not aware of a closed-form solution for zero-inflation models 
as long as the count and/or structural-zero components depend on 
covariates?  In any case, looking inside zeroinfl() you can see that it 
calls optim() [using BFGS by default, see ?pscl::zeroinfl.control]

   cheers
    Ben Bolker


On 2024-01-04 9:38 a.m., Christopher W. Ryan via R-help wrote:
> Are you referring to the zeroinfl() function in the countreg package? If
> so, I think
> 
> predict(fm_zinb2, type = "zero", newdata = some.new.data)
> 
> will give you pi for each combination of covariate values that you
> provide in some.new.data
> 
> where pi is the probability to observe a zero from the point mass component.
> 
> As to your second question, I'm not sure that's possible, for any
> *particular, individual* subject. Others will undoubtedly know better
> than I.
> 
> --Chris Ryan
> 
> Sorkin, John wrote:
>> I am running a zero inflated regression using the zeroinfl function similar to the model below:
>>    
>>   fm_zinb2 <- zeroinfl(art ~ . | ., data = bioChemists, dist = "poisson")
>> summary(fm_zinb2)
>>
>> I have three questions:
>>
>> 1) How can I obtain a value for the parameter pie, which is the fraction of the population that is in the zero inflated model vs the fraction in the count model?
>>
>> 2) For any particular subject, how can I determine if the subject is in the portion of the population that contributes a zero count because the subject is in the group of subjects who have structural zero responses vs. the subject being in the portion of the population who can contribute a zero or a non-zero response?
>>
>> 3) zero inflated models can be solved using closed form solutions, or using iterative methods. Which method is used by fm_zinb2?
>>
>> Thank you,
>> John
>>
>> John David Sorkin M.D., Ph.D.
>> Professor of Medicine, University of Maryland School of Medicine;
>>
>> Associate Director for Biostatistics and Informatics, Baltimore VA Medical Center Geriatrics Research, Education, and Clinical Center;
>>
>> PI Biostatistics and Informatics Core, University of Maryland School of Medicine Claude D. Pepper Older Americans Independence Center;
>>
>> Senior Statistician University of Maryland Center for Vascular Research;
>>
>> Division of Gerontology and Paliative Care,
>> 10 North Greene Street
>> GRECC (BT/18/GR)
>> Baltimore, MD 21201-1524
>> Cell phone 443-418-5382
>>
>>
>>
>> ______________________________________________
>> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
>>
> 
> ______________________________________________
> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.



More information about the R-help mailing list