Hello All R Users, Function loglm() in library MASS can be cajoled to accomodate structural zeros in a cross-classification table. An example from Fienberg demonstrates how this can be done. My question is: Can the function glm() perform the same task? Can glm() estimate a log-linear model with fixed zeros like loglm()? Thanks for your help, Andrew ## Fienberg, The Analysis of Cross-Classified Contingency Tables, 2nd ed., p.148. ## Results from survey of teenagers regarding their health concerns. health <- data.frame(expand.grid(CONCERNS = c("sex", "menstral", "healthy", "nothing"), AGE = c("12-15", "16-17"), GENDER = c("male", "female")), COUNT = c(4, 0, 42, 57, 2, 0, 7, 20, 9, 4, 19, 71, 7, 8, 10, 21)) health <- xtabs(COUNT ~ CONCERNS + AGE + GENDER, data = health) zeros <- data.frame(expand.grid(CONCERNS = c("sex", "menstral", "healthy", "nothing"), AGE = c("12-15", "16-17"), GENDER = c("male", "female")), COUNT = c(1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)) zeros <- xtabs(COUNT ~ CONCERNS + AGE + GENDER, data = zeros) library(MASS) fm.1 <- loglm(~ CONCERNS + AGE + GENDER, data = health, start = zeros, fitted = TRUE) fm.1; round(fm.1$fitted, 1)
Hi Andrew, try the weights argument - apply zero weight to the structural zeros, and 1 elsewhere. Cheers Andrew On Sun, Nov 26, 2006 at 11:39:39AM +0700, A.R. Criswell wrote:> Hello All R Users, > > Function loglm() in library MASS can be cajoled to accomodate > structural zeros in a cross-classification table. An example from > Fienberg demonstrates how this can be done. > > My question is: Can the function glm() perform the same task? Can > glm() estimate a log-linear model with fixed zeros like loglm()? > > Thanks for your help, > Andrew > > ## Fienberg, The Analysis of Cross-Classified Contingency Tables, 2nd > ed., p.148. > ## Results from survey of teenagers regarding their health concerns. > > health <- data.frame(expand.grid(CONCERNS = c("sex", "menstral", > "healthy", "nothing"), > AGE = c("12-15", "16-17"), > GENDER = c("male", "female")), > COUNT = c(4, 0, 42, 57, 2, 0, 7, 20, > 9, 4, 19, 71, 7, 8, 10, 21)) > > health <- xtabs(COUNT ~ CONCERNS + AGE + GENDER, data = health) > > zeros <- data.frame(expand.grid(CONCERNS = c("sex", "menstral", > "healthy", "nothing"), > AGE = c("12-15", "16-17"), > GENDER = c("male", "female")), > COUNT = c(1, 0, 1, 1, 1, 0, 1, 1, > 1, 1, 1, 1, 1, 1, 1, 1)) > > zeros <- xtabs(COUNT ~ CONCERNS + AGE + GENDER, data = zeros) > > library(MASS) > > fm.1 <- loglm(~ CONCERNS + AGE + GENDER, > data = health, start = zeros, fitted = TRUE) > > fm.1; round(fm.1$fitted, 1) > > ______________________________________________ > R-help at stat.math.ethz.ch mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code.-- Andrew Robinson Department of Mathematics and Statistics Tel: +61-3-8344-9763 University of Melbourne, VIC 3010 Australia Fax: +61-3-8344-4599 http://www.ms.unimelb.edu.au/~andrewpr http://blogs.mbs.edu/fishing-in-the-bay/
"A.R. Criswell" <rstatistics at gmail.com> wrote:> Hello Andrew Robinson and R-List > > Thanks, Andrew, but this does not work. Puttting zero weights on > structural zeros, one's elsewhere in glm() does not deliver the > appropriate expected cell counts loglm() provides as one would expect. > > If you run the code provided below, you'll see loglm() delivers zero > cell counts with loglm() but using glm() with the weights you suggest, > the expected cell counts are not zero. > > Still hoping for a resolution. > Andrew Criswell > > Associate Professor > Hedmark University > Postboks 104, Rena 2510, NORWAYIf they are structural zeros, I believe you want: glm(COUNT ~ CONCERNS + AGE + GENDER, data=health, subset=(WEIGHTS>0), family=poisson) David Duffy. -- | David Duffy (MBBS PhD) ,-_|\ | email: davidD at qimr.edu.au ph: INT+61+7+3362-0217 fax: -0101 / * | Epidemiology Unit, Queensland Institute of Medical Research \_,-._/ | 300 Herston Rd, Brisbane, Queensland 4029, Australia GPG 4D0B994A v