VGAM (version 1.0-4)

# nbolf: Negative Binomial-Ordinal Link Function

## Description

Computes the negative binomial-ordinal transformation, including its inverse and the first two derivatives.

## Usage

```nbolf(theta, cutpoint = NULL, k = NULL,
inverse = FALSE, deriv = 0, short = TRUE, tag = FALSE)```

## Arguments

theta

Numeric or character. See below for further details.

cutpoint, k

Here, `k` is the \(k\) parameter associated with the negative binomial distribution; see `negbinomial`. The cutpoints should be non-negative integers. If `nbolf()` is used as the link function in `cumulative` then one should choose `reverse = TRUE, parallel = TRUE`.

inverse, deriv, short, tag

Details at `Links`.

## Value

See Yee (2017) for details.

## Warning

Prediction may not work on `vglm` or `vgam` etc. objects if this link function is used.

## Details

The negative binomial-ordinal link function (NBOLF) can be applied to a parameter lying in the unit interval. Its purpose is to link cumulative probabilities associated with an ordinal response coming from an underlying negative binomial distribution.

See `Links` for general information about VGAM link functions.

## References

Yee, T. W. (2017) Ordinal ordination with normalizing link functions for count data, (in preparation).

`Links`, `negbinomial`, `polf`, `golf`, `nbolf2`, `cumulative`, `CommonVGAMffArguments`.

## Examples

Run this code
```# NOT RUN {
nbolf("p", cutpoint = 2, k = 1, short = FALSE)
nbolf("p", cutpoint = 2, k = 1, tag = TRUE)

p <- seq(0.02, 0.98, by = 0.01)
y <- nbolf(p,cutpoint = 2, k = 1)
y. <- nbolf(p,cutpoint = 2, k = 1, deriv = 1)
max(abs(nbolf(y,cutpoint = 2, k = 1, inv = TRUE) - p))  # Should be 0

#\ dontrun{ par(mfrow = c(2, 1), las = 1)
#plot(p, y, type = "l", col = "blue", main = "nbolf()")
#abline(h = 0, v = 0.5, col = "red", lty = "dashed")
#
#plot(p, y., type = "l", col = "blue",
#     main = "(Reciprocal of) first NBOLF derivative") }

# Another example
nn <- 1000
x2 <- sort(runif(nn))
x3 <- runif(nn)
mymu <- exp( 3 + 1 * x2 - 2 * x3)
k <- 4
y1 <- rnbinom(nn, mu = mymu, size = k)
cutpoints <- c(-Inf, 10, 20, Inf)
cuty <- Cut(y1, breaks = cutpoints)
#\ dontrun{ plot(x2, x3, col = cuty, pch = as.character(cuty)) }
table(cuty) / sum(table(cuty))
fit <- vglm(cuty ~ x2 + x3, trace = TRUE,
cumulative(reverse = TRUE, multiple.responses = TRUE,
parallel = TRUE,
link = nbolf(cutpoint = cutpoints[2:3], k = k)))