### Contingency Table example in Section 4.1 in Faraway's book
library(faraway)

y <- c(320,14,80,36) # wafer data in Hall (1994)
particle <- gl (2,1,4,labels=c("no","yes"))
quality <- gl(2,2,labels=c("good","bad"))
wafer <- data.frame(y,particle,quality)
wafer
##     y particle quality
## 1 320       no    good
## 2  14      yes    good
## 3  80       no     bad
## 4  36      yes     bad
    # y particle quality
# 1 320       no    good
# 2  14      yes    good
# 3  80       no     bad
# 4  36      yes     bad

(ov <- xtabs(y ~ quality+particle))
##        particle
## quality  no yes
##    good 320  14
##    bad   80  36
       # particle
# quality  no yes
   # good 320  14
   # bad   80  36
   

(pp <- prop.table( xtabs(y ~ particle)))  # marginal proportion
## particle
##        no       yes 
## 0.8888889 0.1111111
# particle
# no yes
# 0.88889 0.11111

(qp <- prop.table( xtabs(y ~ quality)))     # marginal proportion
## quality
##      good       bad 
## 0.7422222 0.2577778
# quality
     # good       bad 
# 0.7422222 0.2577778


(fv <- outer(qp,pp)*450)                    # fitted value under H0
##        particle
## quality       no      yes
##    good 296.8889 37.11111
##    bad  103.1111 12.88889
       # particle
# quality       no      yes
   # good 296.8889 37.11111
   # bad  103.1111 12.88889

2*sum(ov*log(ov/fv))                        # deviance in log-likelihood
## [1] 54.03045
# [1] 54.03045                              # same as deviance in Poisson regression


modl <- glm(y ~ particle+quality, poisson)  # Poisson model
summary(modl)
## 
## Call:
## glm(formula = y ~ particle + quality, family = poisson)
## 
## Deviance Residuals: 
##      1       2       3       4  
##  1.324  -4.350  -2.370   5.266  
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept)   5.6934     0.0572  99.535   <2e-16 ***
## particleyes  -2.0794     0.1500 -13.863   <2e-16 ***
## qualitybad   -1.0575     0.1078  -9.813   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for poisson family taken to be 1)
## 
##     Null deviance: 474.10  on 3  degrees of freedom
## Residual deviance:  54.03  on 1  degrees of freedom
## AIC: 83.774
## 
## Number of Fisher Scoring iterations: 5
# Call:
# glm(formula = y ~ particle + quality, family = poisson)

# Deviance Residuals: 
     # 1       2       3       4  
 # 1.324  -4.350  -2.370   5.266  

# Coefficients:
            # Estimate Std. Error z value Pr(>|z|)    
# (Intercept)   5.6934     0.0572  99.535   <2e-16 ***
# particleyes  -2.0794     0.1500 -13.863   <2e-16 ***
# qualitybad   -1.0575     0.1078  -9.813   <2e-16 ***
# ---
# Signif. codes:  0 ?**?0.001 ?*?0.01 ??0.05 ??0.1 ??1

# (Dispersion parameter for poisson family taken to be 1)

    # Null deviance: 474.10  on 3  degrees of freedom
# Residual deviance:  54.03  on 1  degrees of freedom
# AIC: 83.774

# Number of Fisher Scoring iterations: 5