## Description

Computes the logit transformation, including its inverse and the first two derivatives.

## Usage

 ```1 2 3 4``` ```logitlink(theta, bvalue = NULL, inverse = FALSE, deriv = 0, short = TRUE, tag = FALSE) extlogitlink(theta, min = 0, max = 1, bminvalue = NULL, bmaxvalue = NULL, inverse = FALSE, deriv = 0, short = TRUE, tag = FALSE) ```

## Arguments

 `theta` Numeric or character. See below for further details. `bvalue, bminvalue, bmaxvalue` See `Links`. These are boundary values. For `extlogitlink`, values of `theta` less than or equal to A or greater than or equal to B can be replaced by `bminvalue` and `bmaxvalue`.
 `min, max` For `extlogitlink`, `min` gives A, `max` gives B, and for out of range values, `bminvalue` and `bmaxvalue`. `inverse, deriv, short, tag` Details at `Links`.

## Details

The logit link function is very commonly used for parameters that lie in the unit interval. It is the inverse CDF of the logistic distribution. Numerical values of `theta` close to 0 or 1 or out of range result in `Inf`, `-Inf`, `NA` or `NaN`.

The extended logit link function `extlogitlink` should be used more generally for parameters that lie in the interval (A,B), say. The formula is

log((theta-A)/(B-theta))

and the default values for A and B correspond to the ordinary logit function. Numerical values of `theta` close to A or B or out of range result in `Inf`, `-Inf`, `NA` or `NaN`. However these can be replaced by values bminvalue and bmaxvalue first before computing the link function.

## Value

For `logitlink` with `deriv = 0`, the logit of `theta`, i.e., `log(theta/(1-theta))` when `inverse = FALSE`, and if `inverse = TRUE` then `exp(theta)/(1+exp(theta))`.

For `deriv = 1`, then the function returns d `eta` / d `theta` as a function of `theta` if `inverse = FALSE`, else if `inverse = TRUE` then it returns the reciprocal.

Here, all logarithms are natural logarithms, i.e., to base e.

## Note

Numerical instability may occur when `theta` is close to 1 or 0 (for `logitlink`), or close to A or B for `extlogitlink`. One way of overcoming this is to use, e.g., `bvalue`.

In terms of the threshold approach with cumulative probabilities for an ordinal response this link function corresponds to the univariate logistic distribution (see `logistic`).

Thomas W. Yee

## References

McCullagh, P. and Nelder, J. A. (1989). Generalized Linear Models, 2nd ed. London: Chapman & Hall.

`Links`, `logitoffsetlink`, `probitlink`, `clogloglink`, `cauchitlink`, `logistic1`, `loglink`, `Logistic`, `multilogitlink`.
 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59``` ```p <- seq(0.01, 0.99, by = 0.01) logitlink(p) max(abs(logitlink(logitlink(p), inverse = TRUE) - p)) # Should be 0 p <- c(seq(-0.02, 0.02, by = 0.01), seq(0.97, 1.02, by = 0.01)) logitlink(p) # Has NAs logitlink(p, bvalue = .Machine\$double.eps) # Has no NAs p <- seq(0.9, 2.2, by = 0.1) extlogitlink(p, min = 1, max = 2, bminvalue = 1 + .Machine\$double.eps, bmaxvalue = 2 - .Machine\$double.eps) # Has no NAs ## Not run: par(mfrow = c(2,2), lwd = (mylwd <- 2)) y <- seq(-4, 4, length = 100) p <- seq(0.01, 0.99, by = 0.01) for (d in 0:1) { myinv <- (d > 0) matplot(p, cbind( logitlink(p, deriv = d, inverse = myinv), probitlink(p, deriv = d, inverse = myinv)), type = "n", col = "purple", ylab = "transformation", las = 1, main = if (d == 0) "Some probability link functions" else "1 / first derivative") lines(p, logitlink(p, deriv = d, inverse = myinv), col = "limegreen") lines(p, probitlink(p, deriv = d, inverse = myinv), col = "purple") lines(p, clogloglink(p, deriv = d, inverse = myinv), col = "chocolate") lines(p, cauchitlink(p, deriv = d, inverse = myinv), col = "tan") if (d == 0) { abline(v = 0.5, h = 0, lty = "dashed") legend(0, 4.5, c("logitlink", "probitlink", "clogloglink", "cauchitlink"), col = c("limegreen", "purple", "chocolate", "tan"), lwd = mylwd) } else abline(v = 0.5, lty = "dashed") } for (d in 0) { matplot(y, cbind(logitlink(y, deriv = d, inverse = TRUE), probitlink(y, deriv = d, inverse = TRUE)), las = 1, type = "n", col = "purple", xlab = "transformation", ylab = "p", main = if (d == 0) "Some inverse probability link functions" else "First derivative") lines(y, logitlink(y, deriv = d, inverse = TRUE), col = "limegreen") lines(y, probitlink(y, deriv = d, inverse = TRUE), col = "purple") lines(y, clogloglink(y, deriv = d, inverse = TRUE), col = "chocolate") lines(y, cauchitlink(y, deriv = d, inverse = TRUE), col = "tan") if (d == 0) { abline(h = 0.5, v = 0, lty = "dashed") legend(-4, 1, c("logitlink", "probitlink", "clogloglink", "cauchitlink"), col = c("limegreen", "purple", "chocolate", "tan"), lwd = mylwd) } } p <- seq(0.21, 0.59, by = 0.01) plot(p, extlogitlink(p, min = 0.2, max = 0.6), type = "l", col = "black", ylab = "transformation", xlim = c(0, 1), las = 1, main = "extlogitlink(p, min = 0.2, max = 0.6)") par(lwd = 1) ## End(Not run) ```