This example studies the relationship of taking mariguana, alcohol and cigarette among high school seniors (Agresti book chapter 7.2.6).

Drugs <- read.table("Drugs.dat", header = T)
Drugs

A: Alcohol use C: Cigarette Use M: Marijuana Use

mutual.indep <- glm(count ~ A + C + M, family = poisson(link = log), data = Drugs)
homo.assoc <- update(mutual.indep, .~. + A:C + A:M + C:M)
summary(homo.assoc)
## 
## Call:
## glm(formula = count ~ A + C + M + A:C + A:M + C:M, family = poisson(link = log), 
##     data = Drugs)
## 
## Deviance Residuals: 
##        1         2         3         4         5         6         7         8  
##  0.02044  -0.02658  -0.09256   0.02890  -0.33428   0.09452   0.49134  -0.03690  
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept)  5.63342    0.05970  94.361  < 2e-16 ***
## Ayes         0.48772    0.07577   6.437 1.22e-10 ***
## Cyes        -1.88667    0.16270 -11.596  < 2e-16 ***
## Myes        -5.30904    0.47520 -11.172  < 2e-16 ***
## Ayes:Cyes    2.05453    0.17406  11.803  < 2e-16 ***
## Ayes:Myes    2.98601    0.46468   6.426 1.31e-10 ***
## Cyes:Myes    2.84789    0.16384  17.382  < 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: 2851.46098  on 7  degrees of freedom
## Residual deviance:    0.37399  on 1  degrees of freedom
## AIC: 63.417
## 
## Number of Fisher Scoring iterations: 4

We can also check the residuals of different models.

pres.mutual <- residuals(mutual.indep, type = "pearson")
pres.homo <- residuals(homo.assoc, type = "pearson")
## standardized residuals
stres.homo <- rstandard(homo.assoc, type = "pearson")
fit.mutual <- fitted(mutual.indep)
fit.homo <- fitted(homo.assoc)
signif(cbind(Drugs$count, fit.mutual, pres.mutual, fit.homo, pres.homo, stres.homo), 3)
##       fit.mutual pres.mutual fit.homo pres.homo stres.homo
## 1 911      540.0       16.00   910.00    0.0204      0.633
## 2 538      740.0       -7.43   539.00   -0.0266     -0.633
## 3  44      282.0      -14.20    44.60   -0.0923     -0.633
## 4 456      387.0        3.52   455.00    0.0289      0.633
## 5   3       90.6       -9.20     3.62   -0.3240     -0.633
## 6  43      124.0       -7.29    42.40    0.0947      0.633
## 7   2       47.3       -6.59     1.38    0.5240      0.633
## 8 279       64.9       26.60   280.00   -0.0369     -0.633

We can use a logistic regression to study how taking marijuana associate with taking alcohols and cigarettes. We need to reorganize the data frame to a different form.

Drugs2 <- read.table("Drugs2.dat")
Drugs2
fit.logistic <- glm(M_yes/n ~ A + C, weights = n, family = binomial(link = logit), data= Drugs2)
#out <- cbind(Drugs2$M_yes, Drugs2$M_no)
#fit.logistic <- glm(out ~ A + C, family = binomial(link = logit), data= Drugs2)
summary(fit.logistic)
## 
## Call:
## glm(formula = M_yes/n ~ A + C, family = binomial(link = logit), 
##     data = Drugs2, weights = n)
## 
## Deviance Residuals: 
##        1         2         3         4  
##  0.03353  -0.09697  -0.34739   0.49273  
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept)  -5.3090     0.4752 -11.172  < 2e-16 ***
## Ayes          2.9860     0.4647   6.426 1.31e-10 ***
## Cyes          2.8479     0.1638  17.382  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 843.82664  on 3  degrees of freedom
## Residual deviance:   0.37399  on 1  degrees of freedom
## AIC: 25.101
## 
## Number of Fisher Scoring iterations: 4
joint.indep <- glm(count ~ A + C + M + A:C, family = poisson(link = log), data = Drugs)
anova(joint.indep, homo.assoc)