[R] Fixed zeros in tables

A.R. Criswell rstatistics at gmail.com
Sun Nov 26 20:47:01 CET 2006


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, NORWAY

--
## 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),
                                 WEIGHTS  = c(1, 0, 1, 1, 1, 0, 1, 1, 1, 1,
                                              1, 1, 1, 1, 1, 1))

health.tbl <- 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.tbl, start = zeros, fitted = TRUE)

fm.1; round(fm.1$fitted, 1)

fm.3 <- glm(COUNT ~ CONCERNS + AGE + GENDER,
              data = health, weights = health$WEIGHTS, family = poisson)

fm.3.fit <- data.frame(expand.grid(CONCERNS = c("sex", "menstral",
                                                "healthy", "nothing"),
                                   AGE      = c("12-15", "16-17"),
                                   GENDER   = c("male", "female")),
                                   COUNT    = fm.3$fitted)

round(xtabs(COUNT ~ CONCERNS + AGE + GENDER, data = fm.3.fit), 1)



More information about the R-help mailing list