qmvt | R Documentation |
Computes the equicoordinate quantile function of the multivariate t
distribution for arbitrary correlation matrices
based on inversion of pmvt
, using a stochastic root
finding algorithm described in Bornkamp (2018).
qmvt(p, interval = NULL, tail = c("lower.tail", "upper.tail", "both.tails"),
df = 1, delta = 0, corr = NULL, sigma = NULL, algorithm = GenzBretz(),
type = c("Kshirsagar", "shifted"), ptol = 0.001, maxiter = 500,
trace = FALSE, seed = NULL, ...)
p |
probability. |
interval |
optional, a vector containing the end-points of the interval to be searched. Does not need to contain the true quantile, just used as starting values by the root-finder. If equal to NULL a guess is used. |
tail |
specifies which quantiles should be computed.
|
delta |
the vector of noncentrality parameters of length n, for
|
df |
degree of freedom as integer. Normal quantiles are computed
for |
corr |
the correlation matrix of dimension n. |
sigma |
the covariance matrix of dimension n. Either |
algorithm |
an object of class |
type |
type of the noncentral multivariate t distribution
to be computed. The choice |
ptol , maxiter , trace |
Parameters passed to the stochastic root-finding
algorithm. Iteration stops when the 95% confidence interval
for the predicted quantile is inside [p-ptol, p+ptol]. |
seed |
an object specifying if and how the random number generator
should be initialized, see |
... |
additional parameters to be passed to
|
Only equicoordinate quantiles are computed, i.e., the quantiles in each dimension coincide. The result is seed dependend.
A list with two components: quantile
and f.quantile
give the location of the quantile and the difference between the distribution
function evaluated at the quantile and p
.
Bornkamp, B. (2018). Calculating quantiles of noisy distribution functions using local linear regressions. Computational Statistics, 33, 487–501.
pmvnorm
, qmvnorm
## basic evaluation
qmvt(0.95, df = 16, tail = "both")
## check behavior for df=0 and df=Inf
Sigma <- diag(2)
set.seed(29)
q0 <- qmvt(0.95, sigma = Sigma, df = 0, tail = "both")$quantile
set.seed(29)
q8 <- qmvt(0.95, sigma = Sigma, df = Inf, tail = "both")$quantile
set.seed(29)
qn <- qmvnorm(0.95, sigma = Sigma, tail = "both")$quantile
stopifnot(identical(q0, q8),
isTRUE(all.equal(q0, qn, tol = (.Machine$double.eps)^(1/3))))
## if neither sigma nor corr are provided, corr = 1 is used internally
df <- 0
set.seed(29)
qt95 <- qmvt(0.95, df = df, tail = "both")$quantile
set.seed(29)
qt95.c <- qmvt(0.95, df = df, corr = 1, tail = "both")$quantile
set.seed(29)
qt95.s <- qmvt(0.95, df = df, sigma = 1, tail = "both")$quantile
stopifnot(identical(qt95, qt95.c),
identical(qt95, qt95.s))
df <- 4
set.seed(29)
qt95 <- qmvt(0.95, df = df, tail = "both")$quantile
set.seed(29)
qt95.c <- qmvt(0.95, df = df, corr = 1, tail = "both")$quantile
set.seed(29)
qt95.s <- qmvt(0.95, df = df, sigma = 1, tail = "both")$quantile
stopifnot(identical(qt95, qt95.c),
identical(qt95, qt95.s))
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.