Comment exécuter une analyse de régression logistique ordinale dans R avec des valeurs numériques / catégorielles?

17

Données de base : j'ai environ 1 000 personnes marquées par des évaluations: «1», [bon] «2», [moyen] ou «3» [mauvais] - ce sont les valeurs que j'essaie de prédire pour les personnes à l'avenir . En plus de cela, j'ai quelques informations démographiques: sexe (catégorique: H / F), âge (numérique: 17-80) et race (catégorique: noir / caucasien / latino).

J'ai principalement quatre questions:

  1. J'essayais initialement d'exécuter l'ensemble de données décrit ci-dessus comme une analyse de régression multiple. Mais j'ai récemment appris que puisque ma personne à charge est un facteur ordonné et non une variable continue, je devrais utiliser la régression logistique ordinale pour quelque chose comme ça. J'utilisais initialement quelque chose comme mod <- lm(assessment ~ age + gender + race, data = dataset), est-ce que quelqu'un peut m'orienter dans la bonne direction?

  2. À partir de là, en supposant que j'obtienne des coefficients avec lesquels je me sens à l'aise, je comprends comment insérer uniquement des valeurs numériques pour x1, x2, etc. - mais comment gérer la race, par exemple, lorsqu'il y a plusieurs réponses: noir / caucasien / latino? Donc, si cela me dit que le coefficient caucasien est de 0,289 et que quelqu'un que j'essaie de prédire est caucasien, comment puis-je le rebrancher puisque la valeur n'est pas numérique?

  3. J'ai également des valeurs aléatoires qui manquent - certaines pour la race, d'autres pour le sexe, etc. Dois-je faire quelque chose de plus pour m'assurer que cela ne biaise rien? (J'ai remarqué lorsque mon ensemble de données est chargé dans R-Studio, lorsque les données manquantes sont chargées en tant que NA, R dit quelque chose comme (162 observations deleted due to missingness)- mais s'ils sont chargés en tant que blancs, cela ne fait rien.)

  4. En supposant que tout cela fonctionne et que j'ai de nouvelles données sur le sexe, l'âge et la race que je veux prédire - existe-t-il un moyen plus simple dans R de faire tout cela par le biais de ma formule avec de nouveaux coefficients, plutôt que de le faire manuellement? (Si cette question ne convient pas ici, je peux la reprendre sur le forum R.)

Ryan
la source

Réponses:

16

Voici quelques informations qui pourraient vous orienter dans la bonne direction.

En ce qui concerne vos données, ce que vous avez est une réponse avec plusieurs catégories, et chaque fois que vous essayez de modéliser une réponse catégorique, vous avez raison d'essayer d'utiliser un certain type de modèle linéaire généralisé (GLM). Dans votre cas, vous avez des informations supplémentaires que vous devez prendre en compte concernant votre réponse et c'est que vos niveaux de réponse ont un ordre naturel bon> moyen> mauvais, notez en quoi cela est différent d'essayer de modéliser une réponse telle que la couleur du ballon quelqu'un est susceptible d'acheter (rouge / bleu / vert), ces valeurs n'ont pas d'ordre naturel. Lorsque vous effectuez ce type de modèle avec une réponse ordonnée, vous pouvez envisager d'utiliser un modèle de cotes proportionnelles.

http://en.wikipedia.org/wiki/Ordered_logit

Je ne l'ai pas utilisé moi-même, mais la polr()fonction dans le package MASS est susceptible d'être d'une certaine utilité, sinon j'ai utilisé la lrm()fonction dans le package rms pour effectuer des types d'analyse similaires, et je l'ai trouvée très utile. Si vous chargez ces packages, utilisez simplement ?polrou ?lrmpour les informations de fonction.

Assez de fond, sur vos questions:

  1. Cela devrait être couvert ci-dessus, consultez ces packages / fonctions et lisez les modèles de régression logistique ordinale et de cotes proportionnelles

  2. Chaque fois que vous avez une covariable qui est catégorique (Race / Sexe / Couleur des cheveux), vous voulez les traiter comme des «facteurs» dans votre codage R afin de les modéliser de manière appropriée. Il est important de savoir ce qu'est un facteur et comment il est traité, mais vous traitez essentiellement chaque catégorie comme un niveau distinct, puis vous les modélisez de manière appropriée. Lisez simplement les facteurs dans les modèles et vous devriez être en mesure de comprendre ce qui se passe. Gardez à l'esprit que le traitement des variables catégorielles en tant que facteurs n'est pas propre aux modèles glm ou aux modèles de cotes proportionnelles, mais correspond généralement à la manière dont tous les modèles traitent les variables catégorielles. http://www.stat.berkeley.edu/classes/s133/factors.html

  3. Les valeurs manquantes peuvent parfois être difficiles à gérer, mais si vous effectuez une analyse assez basique, il est probablement sûr de simplement supprimer les lignes de données qui contiennent des valeurs manquantes (ce n'est pas toujours vrai, mais en fonction de votre niveau d'expérience actuel, je suis deviner que vous n'avez pas besoin de vous préoccuper des détails du moment et de la façon de traiter les valeurs manquantes). En fait, c'est à peu près ce que fait R. Si vous avez des données que vous utilisez pour modéliser, si vous manquez des informations dans une ligne pour votre réponse ou toute covariable dans le modèle R va simplement exclure ces données (c'est l'avertissement que vous voyez). Évidemment, si vous excluez une grande partie de vos données en raison d'un manque, vos résultats pourraient être biaisés et il est probablement bon d'essayer d'obtenir plus d'informations sur les raisons pour lesquelles il y a tant de valeurs manquantes, mais si vous '' au sujet de 162 observations manquantes dans 10 000 lignes de données, je ne voudrais pas trop transpirer. Vous pouvez rechercher sur Google les méthodes de traitement des données manquantes si vous souhaitez en savoir plus.

  4. Presque tous les objets du modèle R ( lm, glm, lrm, ...) auront une associée predict()fonction qui vous permettra de calculer les valeurs prévues pour votre ensemble de données de modélisation en cours et en plus pour un autre ensemble de données que vous souhaitez prédire un résultat pour. Il suffit de rechercher ?predict.glmou ?predict.lmd'essayer d'obtenir plus d'informations sur le type de modèle avec lequel vous souhaitez travailler. C'est une chose très typique que les gens souhaitent faire avec les modèles, alors soyez assuré qu'il existe des fonctions et des méthodes intégrées qui devraient rendre cela relativement simple.

Bonne chance!

Steve Reno
la source
2
  1. Oui, le logit ou le probit commandé serait par où commencer. Voici un didacticiel sur le logit commandé qui utilise R. D'autres questions CV peuvent probablement vous aider avec tous les accrochages que vous rencontrez — essayez les balises «logit», «probit» et «ordinal».

  2. Une approche standard pour traiter une variable indépendante catégorielle avec k les valeurs est de le coder factice comme k-1valeurs binaires. Ceci est expliqué plus en détail ici , mais en bref: l'effet d'une catégorie est subsumé dans l'ordonnée à l'origine, et des coefficients sont ajustés aux catégories restantes. Dans votre exemple, il y aurait une variable fictive caucasianqui serait codée à 1 pour un répondant caucasien, 0 sinon.

  3. Le traitement des données manquantes dépend beaucoup du problème à résoudre, et oui, la façon dont vous traitez les données manquantes peut introduire un biais. Cet extrait de livre décrit joliment quatre mécanismes qui peuvent produire des données manquantes, ce qui devrait vous aider à considérer les biais potentiels dans votre propre problème. (En particulier, l'article 25.1, p. 530.)

  4. De nombreux packages de modélisation ont une predictfonction quelconque, et en effet le premier tutoriel lié ci-dessus comprend une démonstration.

Sean Easter
la source
Merci beaucoup! Suivi rapide sur # 2: C'était mon hypothèse de base - mais quel est le code est il y a plus de deux variables? Par exemple, caucasien, noir, latino.
Ryan
Bienvenue! Dans cet exemple, vous choisiriez une catégorie pour subsumer dans l'interception, disons latino, et les nuls pour les deux autres. Une valeur 1 pour le caucasianmannequin indique un répondant caucasien, similaire pour la blackvariable muette. Une valeur 0 pour les deux indique un répondant latino-américain. Ça a du sens?
Sean Easter
Donc, devrais-je simplement changer l'ensemble de données d'une colonne avec plusieurs réponses («noir», «caucasien» et «latino») en une colonne «noire» avec 1 et 0, une colonne «caucasienne» avec 1 et 0 et une colonne 'latino' avec 1 et 0?
Ryan
C'est une approche qui fonctionnera bien. La seule différence par rapport à l'utilisation de deux colonnes est la façon dont vous interprétez l'interception. Vous pouvez le faire manuellement, mais je crois que les facteurs de R peuvent le gérer pour vous. Essayez ceci: il passe en revue les facteurs à l'aide d'un exemple similaire. À votre santé!
Sean Easter
1
Le lien vers le didacticiel est rompu. Si quelqu'un peut le réparer, ce serait formidable!
Dan Hicks du