VGAM (version 1.0-4)

# binormal: Bivariate Normal Distribution Family Function

## Description

Maximum likelihood estimation of the five parameters of a bivariate normal distribution.

## Usage

```binormal(lmean1 = "identitylink", lmean2 = "identitylink",
lsd1   = "loge",     lsd2   = "loge",
lrho   = "rhobit",
imean1 = NULL,       imean2 = NULL,
isd1   = NULL,       isd2   = NULL,
irho   = NULL,       imethod = 1,
eq.mean = FALSE,     eq.sd = FALSE,
zero = c("sd", "rho"))```

## Arguments

lmean1, lmean2, lsd1, lsd2, lrho

Link functions applied to the means, standard deviations and `rho` parameters. See `Links` for more choices. Being positive quantities, a log link is the default for the standard deviations.

imean1, imean2, isd1, isd2, irho, imethod, zero

See `CommonVGAMffArguments` for more information.

eq.mean, eq.sd

Logical or formula. Constrains the means or the standard deviations to be equal.

## Value

An object of class `"vglmff"` (see `vglmff-class`). The object is used by modelling functions such as `vglm`, and `vgam`.

## Warning

This function may be renamed to `normal2()` or something like that at a later date.

## Details

For the bivariate normal distribution, this fits a linear model (LM) to the means, and by default, the other parameters are intercept-only. The response should be a two-column matrix. The correlation parameter is `rho`, which lies between \(-1\) and \(1\) (thus the `rhobit` link is a reasonable choice). The fitted means are returned as the fitted values, which is in the form of a two-column matrix. Fisher scoring is implemented.

`uninormal`, `gaussianff`, `pbinorm`, `bistudentt`.

## Examples

Run this code
```# NOT RUN {
set.seed(123); nn <- 1000
bdata <- data.frame(x2 = runif(nn), x3 = runif(nn))
bdata <- transform(bdata, y1 = rnorm(nn, 1 + 2 * x2),
y2 = rnorm(nn, 3 + 4 * x2))
fit1 <- vglm(cbind(y1, y2) ~ x2,
binormal(eq.sd = TRUE), data = bdata, trace = TRUE)
coef(fit1, matrix = TRUE)
constraints(fit1)
summary(fit1)

# Estimated P(Y1 <= y1, Y2 <= y2) under the fitted model
var1  <- loge(2 * predict(fit1)[, "loge(sd1)"], inverse = TRUE)
var2  <- loge(2 * predict(fit1)[, "loge(sd2)"], inverse = TRUE)
cov12 <- rhobit(predict(fit1)[, "rhobit(rho)"], inverse = TRUE)