Tester le modèle de régression logistique en utilisant la déviance résiduelle et les degrés de liberté

8

Je lisais cette page sur Princeton.edu . Ils effectuent une régression logistique (avec R). À un moment donné, ils calculent la probabilité d'obtenir une déviance résiduelle supérieure à celle qu'ils ont obtenue sur une avec des degrés de liberté égaux aux degrés de liberté du modèle. Copier-coller à partir de leur site Web ...χ2

> glm( cbind(using,notUsing) ~ age + hiEduc + noMore, family=binomial)

Call:  glm(formula = cbind(using, notUsing) ~ age + hiEduc + noMore,      
     family = binomial) 

Coefficients:
(Intercept)     age25-29     age30-39     age40-49       hiEduc       noMore  
    -1.9662       0.3894       0.9086       1.1892       0.3250       0.8330  

Degrees of Freedom: 15 Total (i.e. Null);  10 Residual
Null Deviance:      165.8 
Residual Deviance: 29.92        AIC: 113.4 

La déviance résiduelle de 29,92 sur 10 df est très significative:

> 1-pchisq(29.92,10)
[1] 0.0008828339

nous avons donc besoin d'un meilleur modèle


Pourquoi est-il logique de calculer 1-pchisq(29.92,10)et pourquoi une faible probabilité indique-t-elle que quelque chose ne va pas avec leur modèle?

Remi.b
la source

Réponses:

7

Ils utilisent un test de déviance illustré ci-dessous:

D(y)=2(β^;y)+2(θ^(s);y)

Ici, le représente le modèle ajusté d'intérêt et représente le modèle saturé. La probabilité logarithmique pour le modèle saturé est (le plus souvent) de , il vous reste donc la déviance résiduelle du modèle qu'ils ont ajusté ( ). Ce test de déviance est approximativement khi carré avec des degrés de liberté ( étant les observations et étant le nombre de variables ajustées). Vous avez et , le test sera donc environβ^θ^(s)029.92npnpn=16p=6χ102. La valeur nulle du test est que votre modèle ajusté correspond bien aux données et qu'il n'y a aucune inadéquation - vous n'avez manqué aucune source de variation. Dans le test ci-dessus, vous rejetez la valeur nulle et, par conséquent, vous avez manqué quelque chose dans le modèle que vous avez monté. La raison d'utiliser ce test est que le modèle saturé s'adaptera parfaitement aux données, donc si vous étiez dans le cas où vous ne rejetez pas le zéro entre votre modèle ajusté et le modèle saturé, cela indique que vous n'avez pas manqué de grandes sources de données variation dans votre modèle.

francium87d
la source
3

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")

entrez la description de l'image ici

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()educationwantsMore

entrez la description de l'image ici

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).

gung - Réintégrer Monica
la source
2

Je ne crois pas que la statistique de la déviance résiduelle ait une . Je pense que c'est une distribution dégénérée car la théorie asymptotique ne s'applique pas lorsque les degrés de liberté augmentent à la même vitesse que la taille de l'échantillon. En tout cas, je doute que le test ait une puissance suffisante et j'encourage les tests dirigés tels que les tests de linéarité utilisant des splines de régression et les tests d'interaction.χ2

Frank Harrell
la source
1
Je pense que dans ce cas, tous les prédicteurs sont catégoriques, le non. les degrés de liberté du modèle saturé n'augmenteraient pas avec la taille de l'échantillon, l'approche asymptotique est donc logique. Cependant, la taille de l'échantillon est encore assez petite.
Scortchi - Réintégrer Monica
Je ne suis pas sûr que ce soit ça. Le df des paramètres du modèle est fixe mais le df du résidu " " est moins cela. χ2n
Frank Harrell
Dans ce cas, les données se composent de 1607 individus dans un tableau de contingence et le test compare un modèle à 6 paramètres avec le modèle saturé à 16 paramètres (plutôt qu'un modèle à 1607 paramètres).
Scortchi - Réintégrer Monica
Ensuite, il ne doit pas être étiqueté comme résiduel . χ2
Frank Harrell
1
Je suis malheureux de cette terminologie: glmdonne 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.
Scortchi - Réintégrer Monica