cdfMvnce

Purpose

Computes the complement (upper tail) of the multivariate Normal cumulative distribution function with error management.

Format

{ y, err, retcode } = cdfMvnce(ctl, x, corr, nonc)
Parameters:
  • ctl (struct) –

    instance of a cdfmControl structure with members

    ctl.maxEvaluations

    scalar, maximum number of evaluations.

    ctl.absErrorTolerance

    scalar, absolute error tolerance.

    ctl.relErrorTolerance

    scalar, error tolerance.

  • x (NxK matrix) – Lower limits at which to evaluate the complement 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) – \(Pr(X ≥ x|corr, nonc)\). The probability in the upper tail of the multivariate normal cumulative distribution function for each corresponding set of limits in x.

  • 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

Uncorrelated variables

// Lower limits of integration for K dimensional multivariate distribution
x = { 0  0 };

/*
** Identity matrix, indicates
** zero correlation between variables
*/
corr = { 1 0,
         0 1 };

// Define non-centrality parameter for each variable
nonc  = { 0, 0};

// Define control structure
struct cdfmControl ctl;
ctl = cdfmControlCreate();

/*
** Calculate cumulative probability of
** both variables being ≥ 0
*/
{ p, err, retcode } = cdfMvnce(ctl, x, corr, nonc);

/*
** Calculate joint probability of two
** variables with zero correlation,
** both, being ≥ 0
*/
p2 = cdfnc(0) .* cdfnc(0);

After the above code, both p and p2 should be equal to 0.25.

\[\Phi = P(0 \leq X_1 < \infty \text{ and } 0 \leq X_2 < \infty) \approx 0.25.\]

Compute the upper tail of multivariate normal cdf at 3 separate pairs of lower limits

/*
** Lower 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  = { 0, 0 };

// Define control structure
struct cdfmControl ctl;
ctl = cdfmControlCreate();

/*
** Calculate cumulative probability of
** each pair of lower limits
*/
{ p, err, retcode }  = cdfMvnce(ctl, x, corr, nonc);

After the above code, p should equal:

0.74642007
0.27999181
0.04074138

which means that:

\[\begin{split}P(x_1 \geq -1 \text{ and } x_2 \geq -1.1) = 0.7464\\ P(x_1 \geq +0 \text{ and } x_2 \geq +0.1) = 0.2800\\ P(x_1 \geq 1 \text{ and } x_2 \geq 1.1) = 0.0407\end{split}\]

Compute the upper tail of noncentral multivariate normal cdf

/* Lower 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, Kx1
// vector, one for each variable
nonc  = { 1, -2.5 };

// Define control structure
struct cdfmControl ctl;
ctl = cdfmControlCreate();

/*
** Calculate cumulative probability of
** each pair of lower limits
*/
{ p, err, retcode } = cdfMvnce(ctl, x, corr, nonc);

After the above code, p should equal:

0.08046686
0.00455354
0.00014231

which means with non-central vector, the multivariate normal cdf are:

\[\begin{split}P(x_1 \geq -1 \text{ and } x_2 \geq -1.1) = 0.0805\\ P(x_1 \geq +0 \text{ and } x_2 \geq +0.1) = 0.0046\\ P(x_1 \geq 1 \text{ and } x_2 \geq 1.1) = 0.0001\end{split}\]

Remarks

  • The cdfMvnce() evaluates the upper tail of MVN integral, where \(1\leqslant i \leqslant N\) For the non-central MVN, we have where \(z\) denotes \(K\) -dimensional multivariate normal distribution, \(\delta\) 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

  1. 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.

  2. Genz, A., ‘’Numerical computation of multivariate normal probabilities’’, Journal of Computational and Graphical Statistics, 1:141-149, 1992.

See also

Functions cdfMvn2e(), cdfMvnce(), cdfMvte()