Quantiles of the Multivariate t Distribution
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, ...)
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. |
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]. |
... |
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.
## 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))
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.