Comme indiqué, votre question a été répondue par @ francium87d. La comparaison de la déviance résiduelle par rapport à la distribution chi carré appropriée constitue un test du modèle ajusté par rapport au modèle saturé et montre, dans ce cas, un manque d'ajustement significatif.
Pourtant, il pourrait être utile d'examiner plus en détail les données et le modèle pour mieux comprendre ce que cela signifie que le modèle a un manque d'ajustement:
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 figure représente la proportion observée de femmes dans chaque ensemble de catégories qui utilisent le contrôle des naissances, ainsi que l'intervalle de confiance exact à 95%. Les proportions prévues du modèle sont superposées en rouge. Nous pouvons voir que deux proportions prévues se situent en dehors des IC à 95%, et que cinq autres se situent aux limites des IC respectifs ou très près de celles-ci. C'est sept des seize ( ) qui sont hors cible. Les prédictions du modèle ne correspondent donc pas très bien aux données observées. 44%
Comment le modèle pourrait-il mieux s'adapter? Il existe peut-être des interactions entre les variables pertinentes. Ajoutons toutes les interactions bidirectionnelles et évaluons l'ajustement:
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 .
La valeur de p pour le test de manque d'ajustement pour ce modèle est maintenant de . Mais avons-nous vraiment besoin de tous ces termes d'interaction supplémentaires? La commande affiche les résultats des tests de modèles imbriqués sans eux. L'interaction entre et n'est pas tout à fait significative, mais je serais d'accord avec ça dans le modèle de toute façon. Voyons donc comment les prévisions de ce modèle se comparent aux données: 0.486drop1()
education
wantsMore
Ceux-ci ne sont pas parfaits, mais nous ne devons pas supposer que les proportions observées reflètent parfaitement le véritable processus de génération de données. Ceux-ci me semblent comme rebondissant autour de la quantité appropriée (plus correctement que les données rebondissent autour des prédictions, je suppose).
glm
donne une "déviance résiduelle" différente lorsque les données sont regroupées par rapport à ce qu'elles ne sont pas - et une "déviance nulle" différente, d'ailleurs.