qtU | R Documentation |
Currently, R's own qt()
(aka qnt()
in the
non-central case) uses simple inversion of pt
to compute
quantiles in the case where ncp
is specified.
That simple inversion (of pnt()
) has seen to be deficient,
even in cases where pnt()
, i.e., R's pt(.., ncp=*)
does not loose accuracy.
This uniroot()
-based inversion does not suffer from
these deficits in some cases.
qtU()
is simply defined as
qtU <- Vectorize(qtU1, c("p","df","ncp"))
where in qtU1(p, df, ncp, *)
each of (p, df, ncp)
must be of
length one.
qtU1(p, df, ncp, lower.tail = TRUE, log.p = FALSE, interval = c(-10, 10),
tol = 1e-05, verbose = FALSE, ...)
qtU (p, df, ncp, lower.tail = TRUE, log.p = FALSE, interval = c(-10, 10),
tol = 1e-05, verbose = FALSE, ...)
p , df , ncp |
vectors of probabilities, degrees of freedom, and
non-centrality parameter; see |
lower.tail , log.p |
logical; see |
interval |
the interval in which quantiles should be searched;
passed to |
tol |
non-negative convergence tolerance passed to |
verbose |
logical indicating if every call of the objective function should produce a line of console output. |
... |
optional further arguments passed to |
numeric vector of t quantiles, properly recycled in (p, df, ncp)
.
Martin Maechler
uniroot
and pt
are the simple R level
building blocks. The length-1 argument version qtU1()
is short and
simple to understand.
qtU1 # simple definition {with extras only for 'verbose = TRUE'}
## An example, seen to be deficient
## Stephen Berman to R-help, 13 June 2022,
## "Why does qt() return Inf with certain negative ncp values?"
q2 <- seq(-3/4, -1/4, by=1/128)
pq2 <- pt(q2, 35, ncp=-7, lower.tail=FALSE)
### ==> via qtU(), a simple uniroot() - based inversion of pt()
qpqU <- qtU(pq2, 35, ncp=-7, lower.tail=FALSE, tol=1e-10)
stopifnot(all.equal(q2, qpqU, tol=1e-9)) # perfect!
## These two currently (2022-06-14) give Inf whereas qtU() works fine
qt (9e-12, df=35, ncp=-7, lower.tail=FALSE) # warnings; --> Inf
qntR(9e-12, df=35, ncp=-7, lower.tail=FALSE) # (ditto)
## verbose = TRUE shows all calls to pt():
qtU1(9e-12, df=35, ncp=-7, lower.tail=FALSE, verbose=TRUE)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.