Logit avec des variables indépendantes ordinales

18

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?

fgregg
la source
N'est-ce pas dépendant du logiciel?
1
Différents logiciels peuvent permettre différentes options, mais il devrait y avoir une réponse de principe, non?
fgregg
1
Ok, commentaire stupide, désolé.

Réponses:

16

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.χ2

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)

χ2(1)=1,83p=0,1764M2=(n-1)r2

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.

ρr

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

β^exp(θ^)=exp(0,228)=1,256. 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 ( mod1et 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)

mod1k-1mod2mod1mod2

Vous pouvez essayer d'attribuer de nouveaux scores à l'alcool et voir comment cela affectera la probabilité prédite d'une malformation.

chl
la source
3
(+1) réponse très approfondie. J'ajouterais seulement qu'il est possible d'obtenir des tests qui supposent uniquement la monotonie de la relation dose-réponse sans attribuer de scores à la variable ordinale en utilisant la régression isotonique., Bien que des méthodes de simulation ou de permutation soient généralement nécessaires pour obtenir la distribution de la statistique de test sous le nul. Voir Salanti & Ulm 2003 dx.doi.org/10.1002/bimj.200390012 .
2010
@onestop Merci pour cette référence. Je vais le regarder.
chl
6

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"

dmk38
la source
Souhaitez-vous que les données ordinales soient traitées comme des données d'intervalle dans le modèle? Si oui, comment puis-je interpréter le coefficient si je ne connais pas la "distance" entre les niveaux?
fgregg
3
Oui. Le coefficient reflète le changement des cotes logarithmiques pour chaque incrément de changement dans le prédicteur ordinal. Cette spécification de modèle (très courante) suppose que le prédicteur a un impact linéaire sur ses incréments. Pour tester l'hypothèse, vous pouvez comparer un modèle dans lequel vous utilisez la variable ordinale comme prédicteur unique à un modèle dans lequel vous discrétisez les réponses et les traitez comme des prédicteurs multiples (comme vous le feriez si la variable était nominale); si ce dernier modèle n'aboutit pas à un ajustement significativement meilleur, alors traiter chaque incrément comme ayant un effet linéaire est raisonnable.
dmk38
Je vous donne +1 parce que cette réponse sonne bien, et je suppose que @fgregg aurait fait la même chose (avec suffisamment de répétition).
chl
Je pense également que c'est un exemple parfait, car le changement des cotes de log peut être interprété avec des variables ordinales.
SmallChess