Su pregunta, como se dijo, ha sido respondida por @ francium87d. La comparación de la desviación residual con la distribución de chi-cuadrado apropiada constituye la prueba del modelo ajustado con el modelo saturado y muestra, en este caso, una falta de ajuste significativa.
Aún así, podría ser útil observar más a fondo los datos y el modelo para comprender mejor lo que significa que el modelo no se ajusta:
d = read.table(text=" age education wantsMore notUsing using
<25 low yes 53 6
<25 low no 10 4
<25 high yes 212 52
<25 high no 50 10
25-29 low yes 60 14
25-29 low no 19 10
25-29 high yes 155 54
25-29 high no 65 27
30-39 low yes 112 33
30-39 low no 77 80
30-39 high yes 118 46
30-39 high no 68 78
40-49 low yes 35 6
40-49 low no 46 48
40-49 high yes 8 8
40-49 high no 12 31", header=TRUE, stringsAsFactors=FALSE)
d = d[order(d[,3],d[,2]), c(3,2,1,5,4)]
library(binom)
d$proportion = with(d, using/(using+notUsing))
d$sum = with(d, using+notUsing)
bCI = binom.confint(x=d$using, n=d$sum, methods="exact")
m = glm(cbind(using,notUsing)~age+education+wantsMore, d, family=binomial)
preds = predict(m, new.data=d[,1:3], type="response")
windows()
par(mar=c(5, 8, 4, 2))
bp = barplot(d$proportion, horiz=T, xlim=c(0,1), xlab="proportion",
main="Birth control usage")
box()
axis(side=2, at=bp, labels=paste(d[,1], d[,2], d[,3]), las=1)
arrows(y0=bp, x0=bCI[,5], x1=bCI[,6], code=3, angle=90, length=.05)
points(x=preds, y=bp, pch=15, col="red")
La figura muestra la proporción observada de mujeres en cada conjunto de categorías que usan anticonceptivos, junto con el intervalo exacto de confianza del 95%. Las proporciones previstas del modelo se superponen en rojo. Podemos ver que dos proporciones predichas están fuera del IC del 95%, y otras cinco están en o muy cerca de los límites de los respectivos IC. Eso es siete de dieciseis ( ) que están fuera del objetivo. Por lo tanto, las predicciones del modelo no coinciden muy bien con los datos observados. 44 %
¿Cómo podría encajar mejor el modelo? Quizás haya interacciones entre las variables que sean relevantes. Agreguemos todas las interacciones bidireccionales y evalúemos el ajuste:
m2 = glm(cbind(using,notUsing)~(age+education+wantsMore)^2, d, family=binomial)
summary(m2)
# ...
# Null deviance: 165.7724 on 15 degrees of freedom
# Residual deviance: 2.4415 on 3 degrees of freedom
# AIC: 99.949
#
# Number of Fisher Scoring iterations: 4
1-pchisq(2.4415, df=3) # [1] 0.4859562
drop1(m2, test="LRT")
# Single term deletions
#
# Model:
# cbind(using, notUsing) ~ (age + education + wantsMore)^2
# Df Deviance AIC LRT Pr(>Chi)
# <none> 2.4415 99.949
# age:education 3 10.8240 102.332 8.3826 0.03873 *
# age:wantsMore 3 13.7639 105.272 11.3224 0.01010 *
# education:wantsMore 1 5.7983 101.306 3.3568 0.06693 .
El valor p para la prueba de falta de ajuste para este modelo ahora es . ¿Pero realmente necesitamos todos esos términos de interacción adicionales? El comando muestra los resultados de las pruebas de modelo anidadas sin ellos. La interacción entre y no es bastante significativa, pero estaría bien con ella en el modelo de todos modos. Entonces, veamos cómo las predicciones de este modelo se comparan con los datos: 0,486drop1()
education
wantsMore
Estos no son perfectos, pero no debemos suponer que las proporciones observadas son un reflejo perfecto del verdadero proceso de generación de datos. Me parecen que están rebotando alrededor de la cantidad apropiada (más correctamente que los datos están rebotando alrededor de las predicciones, supongo).
glm
da una "desviación residual" diferente cuando los datos se agrupan de cuando no lo están, y una "desviación nula" diferente para el caso.