Learn R Programming

VGAM (version 1.0-1)

Binorm: Bivariate normal distribution cumulative distribution function

Description

Density, cumulative distribution function and random generation for the bivariate normal distribution distribution.

Usage

dbinorm(x1, x2, mean1 = 0, mean2 = 0, var1 = 1, var2 = 1, cov12 = 0, log = FALSE)
pbinorm(q1, q2, mean1 = 0, mean2 = 0, var1 = 1, var2 = 1, cov12 = 0)
rbinorm(n,      mean1 = 0, mean2 = 0, var1 = 1, var2 = 1, cov12 = 0)
 pnorm2(x1, x2, mean1 = 0, mean2 = 0, var1 = 1, var2 = 1, cov12 = 0)

Arguments

x1, x2, q1, q2
vector of quantiles.
mean1, mean2, var1, var2, cov12
vector of means, variances and the covariance.
n
number of observations. Same as rnorm.
log
Logical. If log = TRUE then the logarithm of the density is returned.

Value

  • dbinorm gives the density, pbinorm gives the cumulative distribution function, rbinorm generates random deviates ($n$ by 2 matrix).

Warning

Being based on an approximation, the results of pbinorm() may be negative! Also, pnorm2() should be withdrawn soon; use pbinorm() instead because it is identical.

Details

The default arguments correspond to the standard bivariate normal distribution with correlation parameter $\rho = 0$. That is, two independent standard normal distributions. Let sd1 (say) be sqrt(var1) and written $\sigma_1$, etc. Then the general formula for the correlation coefficient is $\rho = cov / (\sigma_1 \sigma_2)$ where $cov$ is argument cov12. Thus if arguments var1 and var2 are left alone then cov12 can be inputted with $\rho$.

One can think of this function as an extension of pnorm to two dimensions, however note that the argument names have been changed for VGAM 0.9-1 onwards.

References

pbinorm() is based on Donnelly (1973), the code was translated from FORTRAN to ratfor using struct, and then from ratfor to C manually. The function was originally called bivnor, and TWY only wrote a wrapper function.

Donnelly, T. G. (1973) Algorithm 462: Bivariate Normal Distribution. Communications of the ACM, 16, 638.

See Also

pnorm, binormal, uninormal.

Examples

Run this code
yvec <- c(-5, -1.96, 0, 1.96, 5)
ymat <- expand.grid(yvec, yvec)
cbind(ymat, pbinorm(ymat[, 1], ymat[, 2]))

rhovec <- seq(-0.95, 0.95, by = 0.01)
plot(rhovec, pbinorm(0, 0, cov12 = rhovec), type = "l", col = "blue", las = 1)
abline(v = 0, h = 0.25, col = "gray", lty = "dashed")

Run the code above in your browser using DataLab