# logit() and logistic() functions in R

Published on

In statistics, a pair of standard functions logit() and logistic() are defined as follows:

\[ \begin{align*} \operatorname{logit}(p) &= \log\frac{p}{1-p}; \\ \operatorname{logistic}(x) &= \frac{1}{1+\exp(-x)}. \end{align*} \]

Given the ubiquity of these functions, it may be puzzling and
frustrating for an R user that there are no pre-defined functions
`logit()`

and `logistic()`

in R.

```
> logit(0.6)
Error in logit(0.6) : could not find function "logit"
```

Some CRAN packages define this function, and some users even import these packages for the sole reason to have access to logit() and/or logistic(). Others define them directly via log() and exp().

All this is unnecessary: the standard `stats`

package
actually defines these functions, just under different names. logit()
and logistic() are the quantile and cumulative distribution functions
for the logistic distribution, so in line with R’s conventions for
probability distributions, they are called `qlogis()`

and
`plogis()`

, respectively.

```
> qlogis(0.6) # logit
[1] 0.4054651
> plogis(0.4054651) # logistic
[1] 0.6
```

If you still prefer to use the familiar names logit() and logistic() in your code, simply include in your script

```
logit <- qlogis
logistic <- plogis
```

One advantage of using these standard functions over defining your
own or importing some random CRAN package is that they can work on the
log scale, by setting `log.p = TRUE`

.

```
> qlogis(log(0.6), log.p = TRUE)
[1] 0.4054651
```

Working with log-probabilities is often necessary to avoid underflow,
and implementing logit() and logistic() that work accurately on the log
scale is not trivial; see Accurately
Computing \(\log(1-\exp(-|a|))\)
for the details. You can see how these functions are implemented in R in
`src/nmath/qlogis.c`

and `src/nmath/plogis.c`

.

And while we’re at it, here’s another trick. Let’s say you are
working with probabilities very close to 1. Then the appropriate
representation is not \(\log p\) but
\(\log (1-p)\). To convert a
probability from a log-complement scale to the logit scale, use
`lower.tail = FALSE`

:

```
> qlogis(-3, log.p = TRUE, lower.tail = FALSE)
[1] 2.948931
```