Sua pergunta, como indicado, foi respondida por @ francium87d. A comparação do desvio residual com a distribuição qui-quadrado apropriada constitui um teste do modelo ajustado em relação ao modelo saturado e mostra, nesse caso, uma falta significativa de ajuste.
Ainda assim, pode ser útil examinar mais detalhadamente os dados e o modelo para entender melhor o que significa que o modelo não tem ajuste:
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")
A figura representa a proporção observada de mulheres em cada conjunto de categorias que usam controle de natalidade, juntamente com o intervalo exato de confiança de 95%. As proporções previstas do modelo são sobrepostas em vermelho. Podemos ver que duas proporções previstas estão fora dos ICs de 95% e outras cinco estão no ou muito perto dos limites dos respectivos ICs. São sete dos dezesseis ( ) que estão fora do objetivo. Portanto, as previsões do modelo não correspondem muito bem aos dados observados. 44%
Como o modelo poderia se encaixar melhor? Talvez haja interações entre as variáveis relevantes. Vamos adicionar todas as interações bidirecionais e avaliar o 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 .
O valor de p para o teste de falta de ajuste para este modelo é agora . Mas realmente precisamos de todos esses termos extras de interação? O comando mostra os resultados dos testes de modelo aninhados sem eles. A interação entre e não é muito significativa, mas eu ficaria bem com ela no modelo de qualquer maneira. Então, vamos ver como as previsões desse modelo se comparam aos dados: 0.486drop1()
education
wantsMore
Elas não são perfeitas, mas não devemos assumir que as proporções observadas são um reflexo perfeito do verdadeiro processo de geração de dados. Parece-me que eles estão pulando em torno da quantidade apropriada (mais corretamente que os dados estão pulando em torno das previsões, suponho).
glm
fornece um "desvio residual" diferente quando os dados são agrupados quando não são - e um "desvio nulo" diferente para esse assunto.