pmvnorm package:mvtnorm R Documentation _M_u_l_t_i_v_a_r_i_a_t_e _N_o_r_m_a_l _D_i_s_t_r_i_b_u_t_i_o_n _D_e_s_c_r_i_p_t_i_o_n: Computes the distribution function of the multivariate normal distribution for arbitrary limits and correlation matrices based on algorithms by Genz and Bretz. _U_s_a_g_e: pmvnorm(lower=-Inf, upper=Inf, mean=rep(0, length(lower)), corr=NULL, sigma=NULL, maxpts = 25000, abseps = 0.001, releps = 0) _A_r_g_u_m_e_n_t_s: lower: the vector of lower limits of length n. upper: the vector of upper limits of length n. mean: the mean vector of length n. corr: the correlation matrix of dimension n. sigma: the covariance matrix of dimension n. Either 'corr' or 'sigma' can be specified. If 'sigma' is given, the problem is standardized. If neither 'corr' nor 'sigma' is given, the identity matrix is used for 'sigma'. maxpts: maximum number of function values as integer. abseps: absolute error tolerance as double. releps: relative error tolerance as double. _D_e_t_a_i_l_s: This program involves the computation of multivariate normal probabilities with arbitrary correlation matrices. It involves both the computation of singular and nonsingular probabilities. The methodology is described in Genz (1992, 1993). Note that both '-Inf' and '+Inf' may be specified in 'lower' and 'upper'. For more details see 'pmvt'. The multivariate normal case is treated as a special case of 'pmvt' with 'df=0' and univariate problems are passed to 'pnorm'. Multivariate normal density and random numbers are available using 'dmvnorm' and 'rmvnorm'. _V_a_l_u_e: The evaluated distribution function is returned with attributes error: estimated absolute error and msg: status messages. _R_e_f_e_r_e_n_c_e_s: Genz, A. (1992). Numerical computation of multivariate normal probabilities. _Journal of Computational and Graphical Statistics_, *1*, 141-150 Genz, A. (1993). Comparison of methods for the computation of multivariate normal probabilities. _Computing Science and Statistics_, *25*, 400-405 _S_e_e _A_l_s_o: 'qmvnorm' _E_x_a_m_p_l_e_s: n <- 5 mean <- rep(0, 5) lower <- rep(-1, 5) upper <- rep(3, 5) corr <- diag(5) corr[lower.tri(corr)] <- 0.5 corr[upper.tri(corr)] <- 0.5 prob <- pmvnorm(lower, upper, mean, corr) print(prob) stopifnot(pmvnorm(lower=-Inf, upper=3, mean=0, sigma=1) == pnorm(3)) a <- pmvnorm(lower=-Inf,upper=c(.3,.5),mean=c(2,4),diag(2)) stopifnot(round(a,16) == round(prod(pnorm(c(.3,.5),c(2,4))),16)) a <- pmvnorm(lower=-Inf,upper=c(.3,.5,1),mean=c(2,4,1),diag(3)) stopifnot(round(a,16) == round(prod(pnorm(c(.3,.5,1),c(2,4,1))),16)) # Example from R News paper (original by Genz, 1992): m <- 3 sigma <- diag(3) sigma[2,1] <- 3/5 sigma[3,1] <- 1/3 sigma[3,2] <- 11/15 pmvnorm(lower=rep(-Inf, m), upper=c(1,4,2), mean=rep(0, m), corr=sigma) # Correlation and Covariance a <- pmvnorm(lower=-Inf, upper=c(2,2), sigma = diag(2)*2) b <- pmvnorm(lower=-Inf, upper=c(2,2)/sqrt(2), corr=diag(2)) stopifnot(all.equal(round(a,5) , round(b, 5)))