cdfMvne#
Purpose#
Computes multivariate Normal cumulative distribution function with error management.
Format#
- { y, err, retcode } = cdfMvne(ctl, x, corr, nonc)#
- Parameters:
ctl (struct) –
instance of a
cdfmControl
structure with membersctl.maxEvaluations
scalar, maximum number of evaluations.
ctl.absErrorTolerance
scalar absolute error tolerance.
ctl.relErrorTolerance
error tolerance.
x (1xK vector or NxK matrix) – Upper limits at which to evaluate the lower tail of the multivariate normal cumulative distribution function. x must have K columns–one for each variable. If x has more than one row, each row will be treated as a separate set of upper limits.
corr (KxK matrix) – correlation matrix.
nonc (Kx1 vector) – non-centrality vector.
- Returns:
p (Nx1 vector) – Each element in p is the cumulative distribution function of the multivariate normal distribution for each corresponding columns in x. p will have as many elements as the input, x, has columns.
err (Nx1 vector) – estimates of absolute error.
retcode (Nx1 vector) –
return codes.
0
normal completion with err < ctl.absErrorTolerance.
1
\(err > ctl.absErrorTolerance\) and ctl.maxEvaluations exceeded; increase ctl.maxEvaluations to decrease error
2
\(K > 100\) or \(K < 1\)
3
R not positive semi-definite
missing
R not properly defined
Examples#
Compute the multivariate normal cdf at 3 separate pairs of upper limits#
/*
** Upper limits of integration
** x1 ≤ -1 and x2 ≤ -1.1
** x1 ≤ 0 and x2 ≤ 0.1
** x1 ≤ 1 and x2 ≤ 1.1
*/
x = { -1 -1.1,
0 0.1,
1 1.1 };
// Correlation matrix
corr = { 1 0.31,
0.31 1 };
// Define non-centrality vector
nonc = { 0, 0 };
// Define control structure
struct cdfmControl ctl;
ctl = cdfmControlCreate();
/*
** Calculate cumulative probability of
** each pair of upper limits
*/
{ p, err, retcode } = cdfMvne(ctl, x, corr, nonc);
After the above code, p should equal:
0.040741382
0.31981965
0.74642007
which means that:
Compute the non central multivariate normal cdf#
/* Upper limits of integration
** x1 ≤ -1 and x2 ≤ -1.1
** x1 ≤ 0 and x2 ≤ 0.1
** x1 ≤ 1 and x2 ≤ 1.1
*/
x = { -1 -1.1,
0 0.1,
1 1.1 };
// Correlation matrix
corr = { 1 0.31,
0.31 1 };
// Define non-centrality parameter for each variable
nonc = { 1, -2.5 };
// Define control structure
struct cdfmControl ctl;
ctl = cdfmControlCreate();
/*
** Calculate cumulative probability of
** each pair of upper limits
*/
{ p, err, retcode } = cdfMvne(ctl, x, corr, nonc);
After the above code, p should equal:
0.02246034
0.15854761
0.49998320
which means with non-central vector, the multivariate normal cdf are:
Remarks#
cdfMvne evaluates the MVN integral, where \(1\leqslant i \leqslant N\) For the non-central MVN we have where \(z\) denotes \(K\) -dimensional multivariate normal distribution, denotes the \(K \times 1\) non-centrality vector with \(-\infty<\:\ \delta_k <\:\ \infty\) .
The correlation matrix \(R\) is defined by \(\Sigma = DRD\), where \(D\) denotes the diagonal matrix which has the square roots of the diagonal entries for covariance matrix \(\Sigma\) on its diagonal.
References#
Genz, A. and F. Bretz,’’Numerical computation of multivariate t-probabilities with application to power calculation of multiple contrasts,’’ Journal of Statistical Computation and Simulation, 63:361-378, 1999.
Genz, A., ‘’Numerical computation of multivariate normal probabilities,’’ Journal of Computational and Graphical Statistics, 1:141-149, 1992.
See also
Functions cdfMvne()
, cdfMvn2e()
, cdfMvte()