Test de surdispersion dans la régression logistique

9

R in Action (Kabacoff, 2011) suggère la routine suivante pour tester la surdispersion dans une régression logistique:

Ajuster la régression logistique en utilisant la distribution binomiale:

model_binom <- glm(Species=="versicolor" ~ Sepal.Width,
                   family=binomial(), data=iris)

Ajuster la régression logistique en utilisant la distribution quasibinomiale:

model_overdispersed <- glm(Species=="versicolor" ~ Sepal.Width, 
                           family=quasibinomial(), data=iris)

Utilisez le chi carré pour tester la surdispersion:

pchisq(summary(model_overdispersed)$dispersion * model_binom$df.residual, 
       model_binom$df.residual, lower = F)
# [1] 0.7949171

Quelqu'un pourrait-il expliquer comment et pourquoi la distribution du chi carré est utilisée pour tester la surdispersion ici? La valeur de p est de 0,79 - comment cela montre-t-il que la surdispersion n'est pas un problème dans le modèle de distribution binomiale?

luciano
la source
2
Il est assez difficile de ne pas ajuster la distribution de Bernoulli à moins d'avoir des observations corrélées. Qu'en est-il de la forme que vous pensez inadéquate?
Frank Harrell
Par observations corrélées, voulez-vous dire que chaque essai de Bernoulli n'est pas indépendant?
luciano
1
Oui, par exemple corrélation série ou intra-cluster; essais non indépendants.
Frank Harrell

Réponses:

4

L'approche décrite nécessite des calculs inutiles. La statistique de test est juste

sum(residuals(model_binom, type = "deviance")^2)

C'est exactement égal au Pearson χ2 tester la statistique pour le manque d'ajustement, donc elle a une distribution chi carré.

La surdispersion en tant que telle ne s'applique pas aux données de Bernoulli. Grande valeur deχ2pourrait indiquer un manque de covariables ou de pouvoirs, ou des termes d'interactions, ou les données devraient être regroupées. Une valeur de p de 0,79 indique que le test n'a trouvé aucun problème.

oleh
la source
4
La réponse ci-dessus ne devrait-elle pas être modifiée comme suit? sum(residuals(model_binom, type = "deviance")^2)/model_binom$df.residual
Steve VW