Learn R Programming

VGAM (version 1.1-2)

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
# NOT RUN {
yvec <- c(-5, -1.96, 0, 1.96, 5)
ymat <- expand.grid(yvec, yvec)
cbind(ymat, pbinorm(ymat[, 1], ymat[, 2]))

# }
# NOT RUN {
 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