pbvnorm {pbv}R Documentation

Probabilities for Bivariate Normal Distribution

Description

The function pbvnorm computes probabilities Φ_2(x,y,ρ) for the standardized bivariate normal distribution (Drezner & Wesolowsky, 1990; West, 2004).

The function dbvnorm computes the corresponding density φ_2(x,y,ρ).

Usage

pbvnorm(x, y, rho)

dbvnorm(x, y, rho, log=FALSE)

Arguments

x

Vector of first ordinate

y

Vector of second ordinate

rho

Vector of correlations

log

Logical indicating whether logarithm of the density should be calculated

Value

Vector

Note

The pbv package can also be used to include Rcpp functions for computing bivariate probabilities at the C++ level. Numeric and vector versions are

double pbv::pbv_rcpp_pbvnorm0( double h1, double hk, double r)

Rcpp::NumericVector pbv::pbv_rcpp_pbvnorm( Rcpp::NumericVector x,
Rcpp::NumericVector y, Rcpp::NumericVector rho)

References

Drezner, Z., & Wesolowsky, G. O. (1990). On the computation of the bivariate normal integral. Journal of Statistical Computation and Simulation, 35(1-2), 101-107.

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

West, G. (2005). Better approximations to cumulative normal functions. Wilmott Magazine, 9, 70-76.

See Also

See pbivnorm::pbivnorm in the pbivnorm package and mnormt::biv.nt.prob in the mnormt package for alternative implementations (Genz, 1992).

Examples

#############################################################################
# EXAMPLE 1: Comparison with alternative implementations
#############################################################################

#*** simulate different values of ordinates and correlations
set.seed(9898)
N <- 3000
x <- stats::runif(N,-3,3)
y <- stats::runif(N,-3,3)
rho <- stats::runif(N,-.95,.95)

#*** compute probabilities
res1 <- pbv::pbvnorm(x=x,y=y,rho=rho)

#-- compare results with pbivnorm package
library(pbivnorm)
res2 <- pbivnorm::pbivnorm(x=x, y=y, rho=rho)

summary(abs(res1-res2))

#*** compute density values
log <- TRUE    # logical indicating whether log density should be evaluated
res1 <- pbv::dbvnorm(x=x, y=y, rho=rho, log=log )

## Not run: 
#-- compare results with mvtnorm package
library(mvtnorm)
res2 <- rep(NA, N)
sigma <- diag(2)
for (ii in 1:N){
    sigma[1,2] <- sigma[2,1] <- rho[ii]
    res2[ii] <- mvtnorm::dmvnorm(x=c(x[ii],y[ii]), sigma=sigma, log=log)
}
summary(abs(res1-res2))

## End(Not run)

[Package pbv version 0.2-16 Index]