# Calculate a quantile from a distribution function

`cdf2quantile.Rd`

Numerically calculate a quantile from a distribution function.

## Arguments

- p
a number in the interval (0,1).

- cdf
cumulative distribution function, a function.

- interval
interval in which to look for the root, see Details.

- lower
lower end point of the interval.

- upper
upper end point of the interval.

- ...
any further arguments to be passed to the root finding function and the cdf, see Details.

## Details

The quantile, \(q\), is computed numerically as the solution of the equation \(cdf(q)-p=0\).

Function `uniroot`

is used to find the root. To request higher
precision, set argument `tol`

. Other arguments in `...`

are
passed on to `cdf`

.

`uniroot`

needs an interval where to look for the root.
There is a default one, which is extended automatically if it does not
contain the quantile. This assumes that argument `cdf`

is an
increasing function (as it should be).

To override the default interval, use argument `interval`

(a
vector of two numbers) or `lower`

and/or `upper`

. This may
be necessary if the support of the distribution is not the whole real
line and `cdf`

does not cope with values outside the support of
the distribution.

## Examples

```
cdf2quantile(0.95, pnorm)
#> [1] 1.644851
cdf2quantile(0.05, pexp) # support [0,Inf) is no problem for
#> [1] 0.05129361
cdf2quantile(0.05, plnorm) # for built-in distributions.
#> [1] 0.1930405
## default predicision is about 4 digits after decimal point
cdf2quantile(0.95, pnorm, mean = 3, sd = 1)
#> [1] 4.644829
cdf2quantile(0.05, pnorm, mean = 3, sd = 1)
#> [1] 1.355143
qnorm(c(0.95, 0.05), mean = 3, sd = 1)
#> [1] 4.644854 1.355146
## request a higher precision:
cdf2quantile(0.05, pnorm, mean = 3, sd = 1, tol = 1e-8)
#> [1] 1.355146
cdf2quantile(0.05, pnorm, mean = 3, sd = 1, tol = 1e-12)
#> [1] 1.355146
## see also examples for plotpdf()
```