tests/loglm.R

###  Tests to exercise more of loglm()
## Added for 7.3-60
library(MASS)

minn38_tab <- xtabs(f ~ ., minn38)

mod_llm <- loglm(~ hs*phs*fol + sex, minn38_tab)      ## log-linear
mod_glm <- glm(f ~ hs*phs*fol + sex, poisson, minn38) ## surrogate Poisson

## deviance check
all.equal(deviance(mod_llm), deviance(mod_glm))

## residuals check
minn38_res <- within(minn38, {
  res_glm_d <- resid(mod_glm)
  res_glm_p <- resid(mod_glm, type = "pearson")
  res_glm_r <- resid(mod_glm, type = "response")
})

.tmp <- capture.output({
  .tmp_d <- as.table(resid(mod_llm))                          ## array to table
  .tmp_d <- as.data.frame(.tmp_d, responseName = "res_llm_d") ## table to data frame

  .tmp_p <- as.table(resid(mod_llm, type = "pearson"))        ## array to table
  .tmp_p <- as.data.frame(.tmp_p, responseName = "res_llm_p") ## table to data frame

  .tmp_r <- as.table(resid(mod_llm, type = "response"))       ## array to table
  .tmp_r <- as.data.frame(.tmp_r, responseName = "res_llm_r") ## table to data frame
})

minn38_res <- merge(merge(merge(minn38_res, .tmp_d), .tmp_p), .tmp_r)

with(minn38_res, c(
     "deviance OK" = isTRUE(all.equal(res_llm_d, res_glm_d)),
     "pearson OK"  = isTRUE(all.equal(res_llm_p, res_glm_p)),
     "resoibse OK" = isTRUE(all.equal(res_llm_r, res_glm_r))))

cat(.tmp, sep = "\n")                         ## need to allow this to be quiet

## update and anova check

mod_llm_2 <- update(mod_llm, . ~ . - sex + sex*hs)
mod_glm_2 <- update(mod_glm, . ~ . - sex + sex*hs)

anova(mod_llm, mod_llm_2, test = "LR")     ### check visually ("LR" could not be "LRT")
anova(mod_glm, mod_glm_2, test = "LR")     ### check visually ("LR" could     be "LRT")

## extractAIC check

daic_llm <- extractAIC(mod_llm_2) - extractAIC(mod_llm)
daic_glm <- extractAIC(mod_glm_2) - extractAIC(mod_glm)

all.equal(daic_llm, daic_glm)

## Alternative check
d_llm <- dropterm(mod_llm_2, test = "Chisq")
d_glm <- dropterm(mod_glm_2, test = "Chisq")

all.equal(diff(d_llm$AIC), diff(d_glm$AIC))

# rm(.tmp, .tmp_d, .tmp_p, .tmp_r)
# rm(list = c("d_glm", "d_llm", "daic_glm", "daic_llm", "minn38_res",
#             "minn38_tab", "mod_glm", "mod_glm_2", "mod_llm", "mod_llm_2"))

Try the MASS package in your browser

Any scripts or data that you put into this service are public.

MASS documentation built on June 22, 2024, 10:42 a.m.