Dans un modèle logit, existe-t-il un moyen plus intelligent de déterminer l'effet d'une variable ordinale indépendante que d'utiliser des variables fictives pour chaque niveau?
Dans un modèle logit, existe-t-il un moyen plus intelligent de déterminer l'effet d'une variable ordinale indépendante que d'utiliser des variables fictives pour chaque niveau?
Réponses:
Pour ajouter à la réponse de @ dmk38, "tout ensemble de scores donne un test valide , à condition qu'ils soient construits sans consulter les résultats de l'expérience. Si l'ensemble de scores est mauvais, en ce qu'il fausse gravement une échelle numérique qui sous-tend vraiment classement ordonné, le test ne sera pas sensible. Les scores doivent donc refléter les meilleures informations disponibles sur la manière dont la classification a été construite et utilisée. " (Cochran, 1954, cité par Agresti, 2002, p. 88-89). En d'autres termes, le traitement d'un facteur ordonné comme une variable numérique est simplement un problème de modélisation. À condition que cela ait du sens, cela n'aura d'incidence que sur la façon dont vous interprétez le résultat, et il n'y a pas de règle d'or définitive sur la façon de choisir la meilleure représentation pour une variable ordinale.
Prenons l'exemple suivant sur la consommation d'alcool maternelle et la présence ou l'absence de malformation congénitale (Agresti, analyse de données catégoriques , tableau 3.7 p.89):
0 <1 1-2 3-5 6+
Absent 17066 14464 788 126 37
Present 48 38 5 1 1
Dans ce cas particulier, nous pouvons modéliser le résultat en utilisant une régression logistique ou une simple table d'association. Faisons-le dans R:
tab3.7 <- matrix(c(17066,48,14464,38,788,5,126,1,37,1), nr=2,
dimnames=list(c("Absent","Present"),
c("0","<1","1-2","3-5","6+")))
library(vcd)
assocstats(tab3.7)
Les statistiques habituelles (12,08, p = 0,016751) ou LR (6,20, p = 0,184562) (avec 4 df) ne tiennent pas compte des niveaux ordonnés de consommation d'alcool.
En traitant les deux variables comme ordinales avec des scores également espacés (cela n'a aucun impact pour les variables binaires, comme la malformation, et nous choisissons la ligne de base comme 0 = absent), nous pourrions tester une association linéaire par linéaire. Construisons d'abord une version éclatée de ce tableau de contingence:
library(reshape)
tab3.7.df <- untable(data.frame(malform=gl(2,1,10,labels=0:1),
alcohol=gl(5,2,10,labels=colnames(tab3.7))),
c(tab3.7))
# xtabs(~malform+alcohol, tab3.7.df) # check
Ensuite, nous pouvons tester une association linéaire en utilisant
library(coin)
#lbl_test(as.table(tab3.7))
lbl_test(malform ~ alcohol, data=tab3.7.df)
cor(sapply(tab3.7.df, as.numeric))[1,2]^2*(32574-1)
Comme on peut le voir, il n'y a pas beaucoup de preuves d'une association claire entre les deux variables. Comme fait par Agresti, si nous choisissons de recoder les niveaux d'alcool comme {0,0,5,1,5,4,7}, c'est-à-dire en utilisant des valeurs moyennes pour une échelle continue hypothétique avec le dernier score étant quelque peu purement arbitraire, alors nous conclurions à un effet plus important de la consommation maternelle d'alcool sur le développement de malformations congénitales:
lbl_test(malform ~ alcohol, data=tab3.7.df,
scores=list(alcohol=c(0,0.5,1.5,4,7)))
donne une statistique de test de 6,57 avec une valeur de p associée de 0,01037.
En utilisant l'approche GLM, nous procéderions comme suit. Mais vérifiez d'abord comment l'alcool est codé dans R:
class(tab3.7.df$alcohol)
Il s'agit d'un simple facteur non ordonné ( "factor"
), donc d'un prédicteur nominal. Maintenant, voici trois modèles où nous considérons l'alcool comme un prédicteur nominal, ordinal ou continu.
summary(mod1 <- glm(malform ~ alcohol, data=tab3.7.df,
family=binomial))
summary(mod2 <- glm(malform ~ ordered(alcohol), data=tab3.7.df,
family=binomial))
summary(mod3 <- glm(malform ~ as.numeric(alcohol), data=tab3.7.df,
family=binomial))
. Le test de Wald n'est pas significatif au niveau habituel de 5%. Dans ce cas, la matrice de conception ne comprend que 2 colonnes: la première est une colonne constante de 1 pour l'ordonnée à l'origine, la seconde est la valeur numérique (1 à 5) pour le prédicteur, comme dans une régression linéaire simple. En somme, ce modèle teste un effet linéaire de l'alcool sur le résultat (sur l'échelle logit).
Cependant, dans les deux autres cas ( mod1
et mod2
), nous obtenons une sortie différente car la matrice de conception utilisée pour modéliser le prédicteur diffère, comme cela peut être vérifié en utilisant:
model.matrix(mod1)
model.matrix(mod2)
mod1
mod2
mod1
mod2
Vous pouvez essayer d'attribuer de nouveaux scores à l'alcool et voir comment cela affectera la probabilité prédite d'une malformation.
il est tout à fait correct d'utiliser un prédicteur catégorique dans un modèle de régression logit (ou OLS) si les niveaux sont ordinaux. Mais si vous avez une raison de traiter chaque niveau comme discret (ou si en fait votre variable catégorielle est nominale plutôt qu'ordinale), alors, comme alternative au codage factice, vous pouvez également utiliser un codage de contraste orthogonal. Pour une discussion très complète et accessible, voir Judd, CM, McClelland, GH & Ryan, CS Data analysis: a model comparison approach, Edn. 2e. (Routledge / Taylor et Francis, New York, NY; 2008), ou simplement google "contrast coding"