# FDist

##### The F Distribution

Density, distribution function, quantile function and random
generation for the F distribution with `df1`

and `df2`

degrees of freedom (and optional non-centrality parameter `ncp`

).

- Keywords
- distribution

##### Usage

```
df(x, df1, df2, ncp, log = FALSE)
pf(q, df1, df2, ncp, lower.tail = TRUE, log.p = FALSE)
qf(p, df1, df2, ncp, lower.tail = TRUE, log.p = FALSE)
rf(n, df1, df2, ncp)
```

##### Arguments

- x, q
- vector of quantiles.
- p
- vector of probabilities.
- n
- number of observations. If
`length(n) > 1`

, the length is taken to be the number required. - df1, df2
- degrees of freedom.
`Inf`

is allowed. - ncp
- non-centrality parameter. If omitted the central F is assumed.
- log, log.p
- logical; if TRUE, probabilities p are given as log(p).
- lower.tail
- logical; if TRUE (default), probabilities are $P[X \le x]$, otherwise, $P[X > x]$.

##### Details

The F distribution with `df1 =`

$n1$ and `df2 =`

$n2$ degrees of freedom has density
$$
f(x) = \frac{\Gamma(n_1/2 + n_2/2)}{\Gamma(n_1/2)\Gamma(n_2/2)}
\left(\frac{n_1}{n_2}\right)^{n_1/2} x^{n_1/2 -1}
\left(1 + \frac{n_1 x}{n_2}\right)^{-(n_1 + n_2) / 2}%
$$
for $x > 0$.

It is the distribution of the ratio of the mean squares of $n1$ and $n2$ independent standard normals, and hence of the ratio of two independent chi-squared variates each divided by its degrees of freedom. Since the ratio of a normal and the root mean-square of $m$ independent normals has a Student's $t_m$ distribution, the square of a $t_m$ variate has a F distribution on 1 and $m$ degrees of freedom.

The non-central F distribution is again the ratio of mean squares of
independent normals of unit variance, but those in the numerator are
allowed to have non-zero means and `ncp`

is the sum of squares of
the means. See Chisquare for further details on
non-central distributions.

##### Value

`df`

gives the density,
`pf`

gives the distribution function
`qf`

gives the quantile function, and
`rf`

generates random deviates.Invalid arguments will result in return value `NaN`

, with a warning.The length of the result is determined by `n`

for
`rf`

, and is the maximum of the lengths of the
numerical arguments for the other functions.The numerical arguments other than `n`

are recycled to the
length of the result. Only the first elements of the logical
arguments are used.
##### Note

Supplying `ncp = 0`

uses the algorithm for the non-central
distribution, which is not the same algorithm used if `ncp`

is
omitted. This is to give consistent behaviour in extreme cases with
values of `ncp`

very near zero.

The code for non-zero `ncp`

is principally intended to be used
for moderate values of `ncp`

: it will not be highly accurate,
especially in the tails, for large values.

##### Source

For the central case of `df`

, computed *via* a binomial
probability, code contributed by Catherine Loader (see
`dbinom`

); for the non-central case computed *via*
`dbeta`

, code contributed by Peter Ruckdeschel. For `pf`

, *via* `pbeta`

(or for large
`df2`

, *via* `pchisq`

). For `qf`

, *via* `qchisq`

for large `df2`

,
else *via* `qbeta`

.

##### References

Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988)
*The New S Language*.
Wadsworth & Brooks/Cole.

Johnson, N. L., Kotz, S. and Balakrishnan, N. (1995)
*Continuous Univariate Distributions*, volume 2, chapters 27 and 30.
Wiley, New York.

##### See Also

Distributions for other standard distributions, including
`dchisq`

for chi-squared and `dt`

for Student's
t distributions.

##### Examples

`library(stats)`

```
## Equivalence of pt(.,nu) with pf(.^2, 1,nu):
x <- seq(0.001, 5, len = 100)
nu <- 4
stopifnot(all.equal(2*pt(x,nu) - 1, pf(x^2, 1,nu)),
## upper tails:
all.equal(2*pt(x, nu, lower=FALSE),
pf(x^2, 1,nu, lower=FALSE)))
## the density of the square of a t_m is 2*dt(x, m)/(2*x)
# check this is the same as the density of F_{1,m}
all.equal(df(x^2, 1, 5), dt(x, 5)/x)
## Identity: qf(2*p - 1, 1, df)) == qt(p, df)^2) for p >= 1/2
p <- seq(1/2, .99, length = 50); df <- 10
rel.err <- function(x, y) ifelse(x == y, 0, abs(x-y)/mean(abs(c(x,y))))
quantile(rel.err(qf(2*p - 1, df1 = 1, df2 = df), qt(p, df)^2), .90) # ~= 7e-9
```

*Documentation reproduced from package stats, version 3.1.1, License: Part of R 3.1.1*