phypers {DPQ} | R Documentation |
The Four (4) Symmetric 'phyper()' Calls
Description
Compute the four (4) symmetric phyper()
calls which
mathematically would be identical but in practice typically slightly
differ numerically.
Usage
phypers(m, n, k, q = .suppHyper(m, n, k), tol = sqrt(.Machine$double.eps))
Arguments
m |
the number of white balls in the urn. |
n |
the number of black balls in the urn. |
k |
the number of balls drawn from the urn, hence must be in
|
q |
vector of quantiles representing the number of white balls
drawn without replacement from an urn which contains both black and
white balls. By default all “non-trivial” abscissa values
i.e., for which the mathematical value is strictly inside |
tol |
a non-negative number, the |
Value
a list
with components
q |
Description of 'comp1' |
phyp |
a numeric |
Author(s)
Martin Maechler
References
Johnson et al
See Also
R's phyper
. In package DPQmpfr,
phyperQ()
uses (package gmp based) exact
rational arithmetic, summing up dhyperQ()
, terms
computed by chooseZ()
, exact (long integer) arithmetic
binomial coefficients.
Examples
## The function is defined as
function(m,n,k, q = .suppHyper(m,n,k), tol = sqrt(.Machine$double.eps)) {
N <- m+n
pm <- cbind(ph = phyper(q, m, n , k), # 1 = orig.
p2 = phyper(q, k, N-k, m), # swap m <-> k (keep N = m+n)
## "lower.tail = FALSE" <==> 1 - p..(..)
Ip2= phyper(m-1-q, N-k, k, m, lower.tail=FALSE),
Ip1= phyper(k-1-q, n, m, k, lower.tail=FALSE))
## check that all are (approximately) the same :
stopifnot(all.equal(pm[,1], pm[,2], tolerance=tol),
all.equal(pm[,2], pm[,3], tolerance=tol),
all.equal(pm[,3], pm[,4], tolerance=tol))
list(q = q, phyp = pm)
}
str(phs <- phypers(20, 47, 31))
with(phs, cbind(q, phyp))
with(phs,
matplot(q, phyp, type = "b"), main = "phypers(20, 47, 31)")
## differences:
with(phs, phyp[,-1] - phyp[,1])
## *relative*
relE <- with(phs, { phM <- rowMeans(phyp); 1 - phyp/phM })
print.table(cbind(q = phs$q, relE / .Machine$double.eps), zero.print = ".")