posnegbinomial {VGAM} | R Documentation

## Positive Negative Binomial Distribution Family Function

### Description

Maximum likelihood estimation of the two parameters of a positive negative binomial distribution.

### Usage

    posnegbinomial(lmunb = "loge", lk = "loge",
                   emunb =list(), ek = list(), ik = NULL, zero = -2,
                   cutoff = 0.995, shrinkage.init=0.95, method.init=1)

### Arguments

`lmunb` | Link function applied to the `munb` parameter, which is the mean munb of an ordinary negative binomial distribution. See `Links` for more choices.
`lk` | Parameter link function applied to the dispersion parameter, called `k`. See `Links` for more choices.
`emunb, ek` | List. Extra argument for the respective links. See `earg` in `Links` for general information.
`ik` | Optional initial value for `k`, an index parameter. The value `1/k` is known as a dispersion parameter. If failure to converge occurs try different values (and/or use `method.init`). If necessary this vector is recycled to length equal to the number of responses. A value `NULL` means an initial value for each response is computed internally using a range of values.
`zero` | Integer valued vector, usually assigned -2 or 2 if used at all. Specifies which of the two linear/additive predictors are modelled as an intercept only. By default, the `k` parameter (after `lk` is applied) is modelled as a single unknown number that is estimated. It can be modelled as a function of the explanatory variables by setting `zero=NULL`. A negative value means that the value is recycled, so setting -2 means all `k` are intercept only.
`cutoff` | A numeric which is close to 1 but never exactly 1. Used to specify how many terms of the infinite series are actually used. The sum of the probabilites are added until they reach this value or more. It is like specifying `p` in an imaginary function `qnegbin(p)`.
`shrinkage.init, method.init` | See `negbinomial`.

### Details

The positive negative binomial distribution is an ordinary negative binomial distribution but with the probability of a zero response being zero. The other probabilities are scaled to sum to unity.

This family function is based on `negbinomial` and most details can be found there. To avoid confusion, the parameter `munb` here corresponds to the mean of an ordinary negative binomial distribution `negbinomial`. The mean of `posnegbinomial` is

munb / (1-p(0))

where p(0) = (k/(k + munb))^k is the probability an ordinary negative binomial distribution has a zero value.

The parameters `munb` and `k` are not independent in the positive negative binomial distribution, whereas they are in the ordinary negative binomial distribution.

This function handles multivariate responses, so that a matrix can be used as the response. The number of columns is the number of species, say, and setting `zero=-2` means that all species have a `k` equalling a (different) intercept only.

### Value

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

### Warning

The Poisson model corresponds to `k` equalling infinity. If the data is Poisson or close to Poisson, numerical problems may occur. Possibly a loglog link could be added in the future to try help handle this problem.

### Note

This family function can handle a multivariate response.

### Author(s)

Thomas W. Yee

### References

Barry, S. C. and Welsh, A. H. (2002) Generalized additive modelling and zero inflated count data. Ecological Modelling, 157, 179–188.

### See Also

`rposnegbin`, `pospoisson`, `negbinomial`, `zanegbinomial`, `rnbinom`.

### Examples

    x = runif(nn <- 2000)
    y1 = rposnegbin(nn, munb=exp(0+2*x), size=exp(1))
    y2 = rposnegbin(nn, munb=exp(1+2*x), size=exp(3))
    fit = vglm(cbind(y1,y2) ~ x, posnegbinomial, trace=TRUE)
    coef(fit, matrix=TRUE)
    dim(fit@y)

    # Another artificial data example
    munb = exp(2); size = k = exp(3); nn = 1000
    y = rposnegbin(nn, munb=munb, size=size)
    table(y)
    fit = vglm(y ~ 1, posnegbinomial, trace=TRUE)
    coef(fit, matrix=TRUE)
    mean(y)    # Sample mean
    munb / (1 - (size/(size+munb))^size) # Population mean
    head(fitted(fit))
    head(predict(fit))

[Package VGAM version 0.7-9 Index]