scipy.special.fdtrc#

scipy.special.fdtrc(dfn, dfd, x, out=None) = <ufunc 'fdtrc'>#

F survival function.

Returns the complemented F-distribution function (the integral of the density from x to infinity).

Parameters:
dfnarray_like

First parameter (positive float).

dfdarray_like

Second parameter (positive float).

xarray_like

Argument (nonnegative float).

outndarray, optional

Optional output array for the function values

Returns:
yscalar or ndarray

The complemented F-distribution function with parameters dfn and dfd at x.

See also

fdtr

F distribution cumulative distribution function

fdtri

F distribution inverse cumulative distribution function

scipy.stats.f

F distribution

Notes

The regularized incomplete beta function is used, according to the formula,

\[F(d_n, d_d; x) = I_{d_d/(d_d + xd_n)}(d_d/2, d_n/2).\]

Wrapper for the Cephes [1] routine fdtrc. The F distribution is also available as scipy.stats.f. Calling fdtrc directly can improve performance compared to the sf method of scipy.stats.f (see last example below).

References

[1]

Cephes Mathematical Functions Library, http://www.netlib.org/cephes/

Examples

Calculate the function for dfn=1 and dfd=2 at x=1.

>>> import numpy as np
>>> from scipy.special import fdtrc
>>> fdtrc(1, 2, 1)
0.42264973081037427

Calculate the function at several points by providing a NumPy array for x.

>>> x = np.array([0.5, 2., 3.])
>>> fdtrc(1, 2, x)
array([0.5527864 , 0.29289322, 0.22540333])

Plot the function for several parameter sets.

>>> import matplotlib.pyplot as plt
>>> dfn_parameters = [1, 5, 10, 50]
>>> dfd_parameters = [1, 1, 2, 3]
>>> linestyles = ['solid', 'dashed', 'dotted', 'dashdot']
>>> parameters_list = list(zip(dfn_parameters, dfd_parameters,
...                            linestyles))
>>> x = np.linspace(0, 30, 1000)
>>> fig, ax = plt.subplots()
>>> for parameter_set in parameters_list:
...     dfn, dfd, style = parameter_set
...     fdtrc_vals = fdtrc(dfn, dfd, x)
...     ax.plot(x, fdtrc_vals, label=rf"$d_n={dfn},\, d_d={dfd}$",
...             ls=style)
>>> ax.legend()
>>> ax.set_xlabel("$x$")
>>> ax.set_title("F distribution survival function")
>>> plt.show()
../../_images/scipy-special-fdtrc-1_00_00.png

The F distribution is also available as scipy.stats.f. Using fdtrc directly can be much faster than calling the sf method of scipy.stats.f, especially for small arrays or individual values. To get the same results one must use the following parametrization: stats.f(dfn, dfd).sf(x)=fdtrc(dfn, dfd, x).

>>> from scipy.stats import f
>>> dfn, dfd = 1, 2
>>> x = 1
>>> fdtrc_res = fdtrc(dfn, dfd, x)  # this will often be faster than below
>>> f_dist_res = f(dfn, dfd).sf(x)
>>> f_dist_res == fdtrc_res  # test that results are equal
True