dchisqApprox {DPQ} | R Documentation |
Approximations of the (Noncentral) Chi-Squared Density
Description
Compute the density function f(x, *)
of the (noncentral) chi-squared
distribution.
Usage
dnchisqR (x, df, ncp, log = FALSE,
eps = 5e-15, termSml = 1e-10, ncpLarge = 1000)
dnchisqBessel(x, df, ncp, log = FALSE)
dchisqAsym (x, df, ncp, log = FALSE)
dnoncentchisq(x, df, ncp, kmax = floor(ncp/2 + 5 * (ncp/2)^0.5))
Arguments
x |
non-negative numeric vector. |
df |
degrees of freedom (parameter), a positive number. |
ncp |
non-centrality parameter |
log |
logical indicating if the result is desired on the log scale. |
eps |
positive convergence tolerance for the series expansion: Terms
are added while |
termSml |
positive tolerance: in the series expansion, terms are
added to the sum as long as they are not smaller than |
ncpLarge |
in the case where |
kmax |
the number of terms in the sum for |
Details
dnchisqR()
is a pure R implementation of R's own C implementation
in the sources, ‘R/src/nmath/dnchisq.c’, additionally exposing the
three “tuning parameters” eps
, termSml
, and ncpLarge
.
dnchisqBessel()
implements Fisher(1928)'s exact closed form formula
based on the Bessel function I_{nu}
, i.e., R's
besselI()
function;
specifically formula (29.4) in Johnson et al. (1995).
dchisqAsym()
is the simple asymptotic approximation from
Abramowitz and Stegun's formula 26.4.27
, p. 942.
dnoncentchisq()
uses the (typically defining) infinite series expansion
directly, with truncation at kmax
, and terms t_k
which
are products of a Poisson probability and a central chi-square density, i.e.,
terms t.k := dpois(k, lambda = ncp/2) * dchisq(x, df = 2*k + df)
for k = 0, 1, ..., kmax
.
Value
numeric vector similar to x
, containing the (logged if
log=TRUE
) values of the density f(x,*)
.
Note
These functions are mostly of historical interest, notably as R's
dchisq()
was not always very accurate in the noncentral
case, i.e., for ncp > 0
.
Note
R's dchisq()
is typically more uniformly
accurate than the approximations nowadays, apart from dnchisqR()
which should behave the same.
There may occasionally exist small differences between dnchisqR(x, *)
and dchisq(x, *)
for the same parameters.
Author(s)
Martin Maechler, April 2008
References
Abramowitz, M. and Stegun, I. A. (1972) Handbook of Mathematical Functions. New York: Dover. https://en.wikipedia.org/wiki/Abramowitz_and_Stegun provides links to the full text which is in public domain.
Johnson, N.L., Kotz, S. and Balakrishnan, N. (1995) Continuous Univariate Distributions Vol~2, 2nd ed.; Wiley; chapter 29, Section 3 Distribution, (29.4), p. 436.
See Also
R's own dchisq()
.
Examples
x <- sort(outer(c(1,2,5), 2^(-4:5)))
fRR <- dchisq (x, 10, 2)
f.R <- dnchisqR(x, 10, 2)
all.equal(fRR, f.R, tol = 0) # 64bit Lnx (F 30): 1.723897e-16
stopifnot(all.equal(fRR, f.R, tol = 4e-15))