Title: | Probabilities for Bivariate Normal Distribution |
---|---|
Description: | Computes probabilities of the bivariate normal distribution in a vectorized R function (Drezner & Wesolowsky, 1990, <doi:10.1080/00949659008811236>). |
Authors: | Alexander Robitzsch [aut,cre] |
Maintainer: | Alexander Robitzsch <[email protected]> |
License: | GPL (>= 2) |
Version: | 0.6-9 |
Built: | 2024-11-14 03:28:19 UTC |
Source: | https://github.com/alexanderrobitzsch/pbv |
Computes probabilities of the bivariate normal distribution in a vectorized R function (Drezner & Wesolowsky, 1990, <doi:10.1080/00949659008811236>).
Alexander Robitzsch [aut,cre] (<https://orcid.org/0000-0002-8226-3132>)
Maintainer: Alexander Robitzsch <[email protected]>
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. doi:10.1080/00949659008811236
The function pbvnorm
computes probabilities for
the standardized bivariate normal distribution (Drezner & Wesolowsky, 1990;
West, 2004).
The function dbvnorm
computes the corresponding density .
pbvnorm(x, y, rho) dbvnorm(x, y, rho, log=FALSE) ## exported Rcpp functions pbv_rcpp_pbvnorm0( h1, hk, r) pbv_rcpp_pbvnorm( x, y, rho) pbv_rcpp_dbvnorm0( x, y, rho, use_log) pbv_rcpp_dbvnorm( x, y, rho, use_log)
pbvnorm(x, y, rho) dbvnorm(x, y, rho, log=FALSE) ## exported Rcpp functions pbv_rcpp_pbvnorm0( h1, hk, r) pbv_rcpp_pbvnorm( x, y, rho) pbv_rcpp_dbvnorm0( x, y, rho, use_log) pbv_rcpp_dbvnorm( x, y, rho, use_log)
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 |
h1 |
Numeric |
hk |
Numeric |
r |
Numeric |
use_log |
Logical |
A vector
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)
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. doi:10.1080/00949659008811236
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 pbivnorm::pbivnorm
in the pbivnorm package
and mnormt::biv.nt.prob
in the mnormt package
for alternative implementations (Genz, 1992).
############################################################################# # 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) ## Not run: #-- 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 ) #-- 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)
############################################################################# # 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) ## Not run: #-- 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 ) #-- 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)