R: Zero-Altered Geometric Distribution

zageometric {VGAM} | R Documentation

## Zero-Altered Geometric Distribution

### Description

Fits a zero-altered geometric distribution based on a conditional model involving a Bernoulli distribution and a positive-geometric distribution.

### Usage

    zageometric(lpobs0 = "logitlink", lprob = "logitlink",
                type.fitted = c("mean", "prob", "pobs0", "onempobs0"),
                imethod = 1, ipobs0 = NULL, iprob = NULL, zero = NULL)
    zageometricff(lprob = "logitlink", lonempobs0 = "logitlink",
                  type.fitted = c("mean", "prob", "pobs0", "onempobs0"),
                  imethod = 1, iprob = NULL, ionempobs0 = NULL, zero = "onempobs0")

### Arguments

`lpobs0` | Link function for the parameter pobs0 or phi, called `pobs0` or `phi` here. See `Links` for more choices.
`lprob` | Parameter link function applied to the probability of success, called `prob` or p. See `Links` for more choices.
`type.fitted` | See `CommonVGAMffArguments` and `fittedvlm` for information.

`ipobs0, iprob` | Optional initial values for the parameters. If given, they must be in range. For multi-column responses, these are recycled sideways.
`lonempobs0, ionempobs0` | Corresponding argument for the other parameterization. See details below.
`zero, imethod` | See `CommonVGAMffArguments`.

### Details

The response Y is zero with probability pobs0, or Y has a positive-geometric distribution with probability 1-pobs0. Thus 0 < pobs0 < 1, which is modelled as a function of the covariates. The zero-altered geometric distribution differs from the zero-inflated geometric distribution in that the former has zeros coming from one source, whereas the latter has zeros coming from the geometric distribution too. The zero-inflated geometric distribution is implemented in the VGAM package. Some people call the zero-altered geometric a hurdle model.

The input can be a matrix (multiple responses). By default, the two linear/additive predictors of `zageometric` are (logit(phi), logit(prob))^T.

The VGAM family function `zageometricff()` has a few changes compared to `zageometric()`. These are: (i) the order of the linear/additive predictors is switched so the geometric probability comes first; (ii) argument `onempobs0` is now 1 minus the probability of an observed 0, i.e., the probability of the positive geometric distribution, i.e., `onempobs0` is `1-pobs0`; (iii) argument `zero` has a new default so that the `pobs0` is intercept-only by default. Now `zageometricff()` is generally recommended over `zageometric()`. Both functions implement Fisher scoring and can handle multiple responses.

### Value

An object of class `"vglmff"` (see `vglmff-class`). The object is used by modelling functions such as `vglm`, and `vgam`.

The `fitted.values` slot of the fitted object, which should be extracted by the generic function `fitted`, returns the mean mu (default) which is given by

mu = (1- phi) / p.

If `type.fitted = "pobs0"` then pobs0 is returned.

### Warning

Convergence for this VGAM family function seems to depend quite strongly on providing good initial values.

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.

### Note

Note this family function allows pobs0 to be modelled as functions of the covariates. It is a conditional model, not a mixture model.

This family function effectively combines `binomialff` and `posgeometric()` and `geometric` into one family function. However, `posgeometric()` is not written because it is trivially related to `geometric`.

### Author(s)

T. W. Yee

### See Also

`dzageom`, `geometric`, `zigeometric`, `dgeom`, `CommonVGAMffArguments`, `simulate.vlm`.

### Examples

    zdata <- data.frame(x2 = runif(nn <- 1000))
    zdata <- transform(zdata, pobs0 = logitlink(-1 + 2*x2, inverse = TRUE),
                              prob  = logitlink(-2 + 3*x2, inverse = TRUE))
    zdata <- transform(zdata, y1 = rzageom(nn, prob = prob, pobs0 = pobs0),
                              y2 = rzageom(nn, prob = prob, pobs0 = pobs0))
    with(zdata, table(y1))

    fit <- vglm(cbind(y1, y2) ~ x2, zageometric, data = zdata, trace = TRUE)
    coef(fit, matrix = TRUE)
    head(fitted(fit))
    head(predict(fit))
    summary(fit)

[Package VGAM version 1.1-3 Index]