Problème: Je dois estimer un ensemble de modèles logistiques multinomiaux à plusieurs niveaux et je ne trouve pas le package R approprié. Quel est le meilleur package R pour estimer de tels modèles? STATA 13 a récemment ajouté cette fonctionnalité à ses modèles à effets mixtes multiniveaux. La technologie permettant d'estimer ces modèles semble donc être disponible.
Détails: / Un certain nombre de questions de recherche nécessitent l'estimation de modèles de régression logistique multinomiaux dans lesquels la variable de résultat est catégorique. Par exemple, les biologistes pourraient être intéressés par le type d'arbres (p. Ex. Les pins, les érables, les chênes) affectés par les pluies acides. Les spécialistes du marché pourraient être intéressés par l’état de la relation entre l’âge des clients et la fréquence des achats chez Target, Safeway ou Walmart. Ces cas ont en commun que la variable de résultat est catégorique (non ordonnée) et que les régressions logistiques multinomiales sont la méthode d'estimation préférée. Dans mon cas, j'étudie les différences entre les types de migration humaine, avec la variable de résultat (mig) codée 0 = non migré, 1 = migration interne, 2 = migration internationale. Voici une version simplifiée de mon ensemble de données:
migDat=data.frame(hhID=1:21,mig=rep(0:2,times=7),age=ceiling(runif(21,15,90)),stateID=rep(letters[1:3],each=7),pollution=rep(c("high","low","moderate"),each=7),stringsAsFactors=F)
hhID mig age stateID pollution
1 1 0 47 a high
2 2 1 53 a high
3 3 2 17 a high
4 4 0 73 a high
5 5 1 24 a high
6 6 2 80 a high
7 7 0 18 a high
8 8 1 33 b low
9 9 2 90 b low
10 10 0 49 b low
11 11 1 42 b low
12 12 2 44 b low
13 13 0 82 b low
14 14 1 70 b low
15 15 2 71 c moderate
16 16 0 18 c moderate
17 17 1 18 c moderate
18 18 2 39 c moderate
19 19 0 35 c moderate
20 20 1 74 c moderate
21 21 2 86 c moderate
Mon objectif est d'estimer l'impact de l'âge (variable indépendante) sur les probabilités de (1) migrer en interne ou non, 2) de migrer à l'international ou non, (3) de migrer en interne ou de migrer à l'étranger. Une complication supplémentaire est que mes données fonctionnent à différents niveaux d'agrégation (par exemple, la pollution fonctionne au niveau de l'état) et je suis également intéressé par la prévision de l'impact de la pollution atmosphérique (pollution) sur les chances de s'engager dans un type particulier de mouvement.
Solutions maladroites: / On pourrait estimer un ensemble de modèles de régression logistique distincts en réduisant l'ensemble de données de chaque modèle à deux types de migration uniquement (par exemple, modèle 1: seuls les cas codés mig = 0 et mig = 1; modèle 2: seuls cas codés mig = 0 et mig = 2; modèle 3: seuls cas codés mig = 1 et mig = 2). Un tel modèle de régression logistique multiniveau si simple pourrait être estimé avec lme4, mais cette approche est moins idéale car elle ne prend pas correctement en compte l’impact des cas omis. Une deuxième solution consisterait à exécuter des modèles multinomiaux logistiques multinomiaux dans MLWiN à R à l’aide du package R2MLwiN. Mais comme MLWiN n’est pas open source et que l’objet généré est difficile à utiliser, je préférerais éviter cette option. Sur la base d'une recherche Internet complète, il semble exister une demande pour de tels modèles, mais je ne suis pas au courant d'un bon paquet R. Il serait donc intéressant que certains experts ayant utilisé de tels modèles puissent émettre une recommandation et s’il existe plus d’un ensemble d’avantages, pouvant indiquer certains avantages/inconvénients. Je suis sûr que de telles informations constitueraient une ressource très utile pour plusieurs utilisateurs de R. Merci!!
Meilleur, Raphael
Il existe généralement deux manières d’ajuster un modèle multinomial d’une variable catégorique avec des groupes J: (1) Estimer simultanément les contrastes J-1; (2) Estimation d'un modèle logit distinct pour chaque contraste.
Produire ces deux méthodes les mêmes résultats?Non, mais les résultats sont souvent similaires
Quelle méthode est la meilleure?L'ajustement simultané est plus précis (voir ci-dessous pour une explication pourquoi)
Pourquoi quelqu'un utiliserait-il des modèles logit distincts?(1) Le package lme4
n'a pas de routine permettant d'ajuster simultanément des modèles multinomiaux et il n'existe aucun autre package R à plusieurs niveaux pouvant le faire. Ainsi, des modèles logits séparés sont actuellement la seule solution pratique si quelqu'un veut estimer des modèles multinomiaux à plusieurs niveaux dans R. (2) les modèles sont beaucoup plus souples car ils permettent la spécification indépendante de l'équation du modèle pour chaque contraste.
Est-il légitime d'utiliser des modèles logit distincts?Oui, avec quelques avertissements. Cette méthode s'appelle l '«approximation de Begg et Gray». Begg et Gray (1984, p. 16) ont montré que cette «méthode individualisée est très efficace». Cependant, il y a une perte d'efficacité et l'approximation de Begg et Gray produit des erreurs-types plus importantes (Agresti 2002, p. 274). En tant que tel, il est plus difficile d'obtenir des résultats significatifs avec cette méthode et les résultats peuvent être considérés comme conservateurs. Cette perte d'efficacité est la plus faible lorsque la catégorie de référence est grande (Begg et Gray, 1984; Agresti 2002). Les packages R qui utilisent l'approximation de Begg et Gray (non multiniveau) incluent mlogitBMA
(Sevcikova et Raftery, 2012).
Pourquoi une série de modèles logit individuels est-elle imprécise? Dans mon exemple initial, nous avons une variable (migration
) pouvant avoir trois valeurs A
(pas de migration), B
(migration interne), C
(migration internationale). Avec une seule variable prédictive x
(âge), les modèles multinomiaux sont paramétrés comme une série de contrastes binomiaux comme suit (Long et Cheng, 2004, p. 277):
Eq. 1: Ln(Pr(B|x)/Pr(A|x)) = b0,B|A + b1,B|A (x)
Eq. 2: Ln(Pr(C|x)/Pr(A|x)) = b0,C|A + b1,C|A (x)
Eq. 3: Ln(Pr(B|x)/Pr(C|x)) = b0,B|C + b1,B|C (x)
Pour ces contrastes, les équations suivantes doivent tenir:
Eq. 4: Ln(Pr(B|x)/Pr(A|x)) + Ln(Pr(C|x)/Pr(A|x)) = Ln(Pr(B|x)/Pr(C|x))
Eq. 5: b0,B|A + b0,C|A = b0,B|C
Eq. 6: b1,B|A + b1,C|A = b1,B|C
Le problème est que ces équations (équations 4 à 6) ne seront pas exactes dans la pratique car les coefficients sont estimés sur la base d'échantillons légèrement différents, car seuls les cas des deux groupes contrastés sont utilisés et les cas du troisième groupe sont omis. Les programmes qui estiment simultanément les contrastes multinomiaux garantissent que Eq. 4-6 en attente (Long et Cheng, 2004 p. 277). Je ne sais pas exactement comment fonctionne cette résolution de modèle «simultanée» - peut-être que quelqu'un peut fournir une explication? Les logiciels qui permettent l’ajustement simultané de modèles multinomiaux multiniveaux incluent MLwiN (Steele 2013, p. 4) et STATA (commande xlmlogit, Pope, 2014).
Références:
Agresti, A. (2002). Analyse de données catégoriques (2e éd.). Hoboken, NJ: John Wiley & Sons.
Allison, P. D. (1984). Analyse de l'historique des événements. Thousand Oaks, CA: Sage Publications.
Begg, C.B. & Gray, R. (1984). Calcul des paramètres de régression logistique polychotomique à l'aide de régressions individualisées. Biometrika, 71 (1), 11-18.
Long, S.J. et Cheng, S. (2004). Modèles de régression pour les résultats catégoriels. Dans M. Hardy & A. Bryman (Eds.), Manuel d'analyse des données (pp. 258-285). Londres: SAGE Publications, Ltd.
Pope, R. (2014). Sous les projecteurs: Découvrez la nouvelle commande xlmlogit de Stata. Stata News, 29 (2), 2-3.
Sevcikova, H., et Raftery, A. (2012). Estimation du modèle logit multinomial à l'aide de l'approximation de Begg & Gray.
Steele, F. (2013). Module 10: Modèles à un seul niveau et à plusieurs niveaux pour les concepts de réponses nominales. Bristol, Royaume-Uni: Centre de modélisation à plusieurs niveaux.
Une question plus ancienne, mais je pense qu'une option viable a récemment émergé est brms
, qui utilise le programme bayésien Stan
pour exécuter le modèle. Par exemple, si vous souhaitez exécuter une régression logistique multinomiale sur les données iris
:
b1 <- brm (Species ~ Petal.Length + Petal.Width + Sepal.Length + Sepal.Width,
data=iris, family="categorical",
prior=c(set_prior ("normal (0, 8)")))
Et pour obtenir une régression ordinale - non appropriée pour iris
, bien sûr - vous devez basculer le family="categorical"
en family="acat"
(ou cratio
ou sratio
, en fonction du type de régression ordinale que vous souhaitez) et vous assurer que la variable dépendante est ordered
.
Clarification selon le commentaire de Raphael: Cet appel brm
compile votre formule et vos arguments dans Stan code. Stan le compile en C++ et utilise le compilateur C++ de votre système - ce qui est requis. Sur un Mac, par exemple, vous devrez peut-être installer les outils de développement gratuits pour obtenir le C++. Pas sûr de Windows. C++ doit être installé par défaut sur Linux.)
Précision selon le commentaire de Qaswed: brms
gère facilement les modèles multiniveaux en utilisant la formule R (1 | groupvar)
pour ajouter une interception de groupe (aléatoire) pour un groupe, (1 + foo | groupvar)
pour ajouter une interception et une pente aléatoires, etc.
Je vous recommanderai d'utiliser le package "mlogit"
Voici une implémentation (pas la mienne). Je voudrais juste travailler sur ce code. De plus, vous saurez vraiment ce qui se passe sous le capot.
http://www.nhsilbert.net/docs/rcode/multilevel_multinomial_logistic_regression.R
Je suis perplexe que cette technique soit qualifiée de "standard" et d '"équivalente", bien que cela puisse être une bonne solution pratique. (Je suppose que je ferais mieux de consulter les références Allison et Dobson & Barnett) . Pour le cas multinomial simple (pas de grappes, mesures répétées, etc.) catégorie de référence en tant qu’approximation (bien que bonne) dans de nombreux cas à un logit multinomial complet. Ils démontrent une certaine perte d’efficacité lorsqu’on utilise une seule catégorie de référence, bien qu’il soit petit pour les cas où une seule catégorie de base haute fréquence est utilisée comme référence Agresti (2002: p. 274) fournit un exemple de légère augmentation des erreurs types même lorsque la catégorie de base constitue plus de 70% des 219 cas sur un exemple de cinq catégories.
Peut-être que ce n'est pas grave, mais je ne vois pas comment l'approximation pourrait être améliorée en ajoutant une deuxième couche d'aléatoire.
Références
Agresti, A. (2002). Analyse de données catégorique. Hoboken NJ: Wiley.
Begg, C.B. & Gray, R. (1984). Calcul des paramètres de régression logistique polychotomique à l'aide de régressions individualisées. Biometrika, 71 (1), 11-18.
Je traite du même problème et une solution possible que j'ai trouvée semble avoir recours à l'équivalent poisson (loglinear/count) du modèle logistique multinomial décrit dans cette mailinglist , ces Nice slides ou à Agresti (2013: 353-356). Ainsi, il devrait être possible d’utiliser la fonction glmer(... family=poisson)
du package lme4
avec une certaine agrégation des données.
Référence:
Agresti, A. (2013) Analyse de données catégoriques. Hoboken, NJ: Wiley.