J'essaie de faire une régression logit ordonnée. J'exécute le modèle comme ça (juste un petit modèle stupide qui estime le nombre d'entreprises sur un marché à partir des mesures du revenu et de la population). Ma question concerne les prédictions.
nfirm.opr<-polr(y~pop0+inc0, Hess = TRUE)
pr_out<-predict(nfirm.opr)
Lorsque je lance Predict (que j'essaie d'utiliser pour obtenir le y prévu), les sorties sont soit 0, 3 ou 27, ce qui ne reflète en rien ce qui devrait sembler être la prédiction basée sur mes prédictions manuelles du coefficient estimations et interceptions. Est-ce que quelqu'un sait comment obtenir des prévisions "précises" pour mon modèle logit commandé?
ÉDITER
Pour clarifier ma préoccupation, mes données de réponse contiennent des observations à tous les niveaux
>head(table(y))
y
0 1 2 3 4 5
29 21 19 27 15 16
où comme ma variable prédite semble se regrouper
> head(table(pr_out))
pr_out
0 1 2 3 4 5
117 0 0 114 0 0
la source
predict
fonction diffèrent-elles de celles que vous avez générées manuellement? Quelle est la structure de votre variable dépendante? Veuillez fournir un exemple reproductible.polr()
rapport à d'autres fonctions? Vous pouvez essayerlrm()
de l' emballagerms
:lrmFit <- lrm(y ~ pop0 + inc0); predict(lrmFit, type="fitted.ind")
. Une autre option estvglm()
de l' emballageVGAM
:vglmFit <- vglm(y ~ pop0 + inc0, family=propodds); predict(vglmFit, type="response")
. Les deux renvoient la matrice des probabilités de catégorie prédites. Voir ma réponse pour obtenir les catégories prévues à partir de là.Réponses:
polr()
MASS
polr()
Pour les choix possibles implémentés dans d'autres fonctions, voir cette réponse . La fonction logistique est l'inverse de la fonction logit, donc les probabilités prédites sontp^( Y⩽ g)
Les probabilités de catégorie prédites sont . Voici un exemple reproductible en R avec deux prédicteurs . Pour une variable ordinale , j'ai découpé une variable continue simulée en 4 catégories.P^( Y= g) = P^( Y≤ g) - P^( Y≤ g- 1 ) X1, X2 Oui
Ajustez maintenant le modèle de cotes proportionnelles en utilisant
polr()
et obtenez la matrice des probabilités de catégorie prédites en utilisantpredict(polr(), type="probs")
.Pour vérifier manuellement ces résultats, nous devons extraire les estimations des paramètres, à partir de celles-ci calculer les logits prédits, à partir de ces logits calculer les probabilités prédites , puis lier les probabilités de catégorie prédites à une matrice .p^( Y⩽ g)
Comparez avec le résultat de
polr()
.Pour les catégories prédites, il
predict(polr(), type="class")
suffit de sélectionner - pour chaque observation - la catégorie ayant la probabilité la plus élevée.Comparez pour résulter de
polr()
.la source