Learn R Programming

VGAM (version 0.8-7)

loglinb2: Loglinear Model for Two Binary Responses

Description

Fits a loglinear model to two binary responses.

Usage

loglinb2(exchangeable = FALSE, zero = NULL)

Arguments

exchangeable
Logical. If TRUE, the two marginal probabilities are constrained to be equal. Should be set TRUE for ears, eyes, etc. data.
zero
Which linear/additive predictor is modelled as an intercept only? A NULL means none of them.

Value

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

    When fitted, the fitted.values slot of the object contains the four joint probabilities, labelled as $(Y_1,Y_2)$ = (0,0), (0,1), (1,0), (1,1), respectively.

Details

The model is $$P(Y_1=y_1,Y_2=y_2) = \exp(u_0+u_1 y_1+u_2 y_2+u_{12} y_1 y_2)$$ where $y_1$ and $y_2$ are 0 or 1, and the parameters are $u_1$, $u_2$, $u_{12}$. The normalizing parameter $u_0$ can be expressed as a function of the other parameters, viz., $$u_0 = -\log[1 + \exp(u_1) + \exp(u_2) + \exp(u_1 + u_2 + u_{12})].$$ The linear/additive predictors are $(\eta_1,\eta_2,\eta_3)^T = (u_1,u_2,u_{12})^T$.

References

Yee, T. W. and Wild, C. J. (2001) Discussion to: ``Smoothing spline ANOVA for multivariate Bernoulli observations, with application to ophthalmology data (with discussion)'' by Gao, F., Wahba, G., Klein, R., Klein, B. Journal of the American Statistical Association, 96, 127--160.

McCullagh, P. and Nelder, J. A. (1989) Generalized Linear Models, 2nd ed. London: Chapman & Hall.

See Also

binom2.or, binom2.rho, loglinb3.

Examples

Run this code
coalminers = transform(coalminers, Age = (age - 42) / 5)

# Get the n x 4 matrix of counts 
temp = vglm(cbind(nBnW,nBW,BnW,BW) ~ Age, binom2.or, coalminers)
counts = round(c(weights(temp, type = "prior")) * temp@y)

# Create a n x 2 matrix response for loglinb2()
# bwmat = matrix(c(0,0, 0,1, 1,0, 1,1), 4, 2, byrow=TRUE)
bwmat = cbind(bln=c(0,0,1,1), wheeze=c(0,1,0,1))
matof1 = matrix(1, nrow(counts), 1)
newminers = data.frame(bln = kronecker(matof1, bwmat[,1]),
                       wheeze = kronecker(matof1, bwmat[,2]),
                       wt = c(t(counts)),
                       Age = with(coalminers, rep(age, rep(4, length(age)))))
newminers = newminers[with(newminers, wt) > 0,]

fit = vglm(cbind(bln,wheeze) ~ Age, loglinb2, weight = wt, data = newminers)
coef(fit, matrix = TRUE)    # Same! (at least for the log odds-ratio) 
summary(fit)

# Try reconcile this with McCullagh and Nelder (1989), p.234 
(0.166-0.131) / 0.027458   # 1.275 is approximately 1.25

Run the code above in your browser using DataLab