Learn R Programming

VGAM (version 0.8-7)

yip88: Zero-Inflated Poisson Distribution (Yip (1988) algorithm)

Description

Fits a zero-inflated Poisson distribution based on Yip (1988).

Usage

yip88(link.lambda = "loge", n.arg = NULL)

Arguments

link.lambda
Link function for the usual $\lambda$ parameter. See Links for more choices.
n.arg
The total number of observations in the data set. Needed when the response variable has all the zeros deleted from it, so that the number of zeros can be determined.

Value

Warning

Under- or over-flow may occur if the data is ill-conditioned. Yip (1988) only considered $\phi$ being a scalar and not modelled as a function of covariates. To get around this limitation, try zipoisson.

Inference obtained from summary.vglm and summary.vgam may or may not be correct. In particular, the p-values, standard errors and degrees of freedom may need adjustment. Use simulation on artificial data to check that these are reasonable.

Details

The method implemented here, Yip (1988), maximizes a conditional likelihood. Consequently, the methodology used here deletes the zeros from the data set, and is thus related to the positive Poisson distribution (where $P(Y=0) = 0$).

The probability function of $Y$ is 0 with probability $\phi$, and Poisson($\lambda$) with probability $1-\phi$. Thus $$P(Y=0) =\phi + (1-\phi) P(W=0)$$ where $W$ is Poisson($\lambda$). The mean, $(1-\phi) \lambda$, can be obtained by the extractor function fitted applied to the object.

This family function treats $\phi$ as a scalar. If you want to model both $\phi$ and $\lambda$ as a function of covariates, try zipoisson.

References

Yip, P. (1988) Inference about the mean of a Poisson distribution in the presence of a nuisance parameter. The Australian Journal of Statistics, 30, 299--306.

Angers, J-F. and Biswas, A. (2003) A Bayesian analysis of zero-inflated generalized Poisson model. Computational Statistics & Data Analysis, 42, 37--46.

See Also

zipoisson, Zipois, zapoisson, pospoisson, poissonff, dzipois.

Examples

Run this code
phi = 0.35; lambda = 2   # Generate some artificial data
y = rzipois(n <- 1000, lambda, phi)
table(y)

# Two equivalent ways of fitting the same model
fit1 = vglm(y ~ 1, yip88(n = length(y)), subset = y > 0, trace = TRUE)
fit2 = vglm(y ~ 1, yip88, trace = TRUE, crit = "c")
(true.mean = (1-phi) * lambda)
mean(y) 
head(fitted(fit1))
fit1@misc$phi      # The estimate of phi

# Compare the ZIP with the positive Poisson distribution 
pp = vglm(y ~ 1, pospoisson, subset = y > 0, trace = TRUE, crit = "c")
coef(pp)
Coef(pp)
coef(fit1) - coef(pp)            # Same 
head(fitted(fit1) - fitted(pp))  # Different 

# Another example (Angers and Biswas, 2003) ---------------------
abdata = data.frame(y = 0:7, w = c(182, 41, 12, 2, 2, 0, 0, 1))
abdata = subset(abdata, w > 0)

yy = with(abdata, rep(y, w))
fit3 = vglm(yy ~ 1, yip88(n = length(yy)), subset = yy > 0, trace = TRUE)
fit3@misc$phi # Estimate of phi (they get 0.5154 with SE 0.0707)
coef(fit3, matrix = TRUE)
Coef(fit3) # Estimate of lambda (they get 0.6997 with SE 0.1520)
head(fitted(fit3))
mean(yy) # Compare this with fitted(fit3)

Run the code above in your browser using DataLab