2017-05-13 8 views
1

Bon après-midi, j'ai un problème avec la sortie que je reçois lors de l'exécution d'une régression logistique avec le paquet NNET. Je veux prédire Category avec HS_TR (Return Period) et SLR (Sea Level Rise). Le modèle multinomial, appelé fit, a été calculé avec les informations du sous-ensemble x.sub. Il existe 4 catégories possibles 1,2,3 ou 4.Résultats de probabilités de Multinomial Regression nnet package

x.sub:

POINTID HS_TR SLR Category 
     4  10 0.0  3 
     4  10 0.6  4 
     4  50 0.0  3 
     4  50 0.6  4 
     4 100 0.0  4 
     4 100 0.6  4 

Quand je lance le modèle>fit <- multinom(Category ~ HS_TR + SLR, x.sub, maxit=3000)-je obtenir les résultats:

Coefficients: 
    (Intercept)  HS_TR   SLR 
    -30.5791517 0.4130478 62.0976951 

    Residual Deviance: 0.0001820405 
    AIC: 6.000182 

Maintenant que je le multinomial, je veux connaître la catégorie prédite pour un scénario spécifique (d3) de SLR et HS_TR. Je définis d3 et appliquer la prédiction et j'obtenir un résultat raisonnable:

d3<-data.frame("HS_TR"=c(10),"SLR"=c(0)) 
prediction <-(predict(fit,d3)) 

Je reçois

> prediction 
[[1]] 
[1] 3 
Level: 3 

Cependant, lorsque je calcule la probabilité d'obtenir la prédiction prediction <-(predict(fit,d3, type="probs")), je reçois le texte suivant:

> prediction 
[[1]] 
1 
0 

Ce qui n'a aucun sens car il dit qu'il y a une probabilité de 0. Puisque le modèle que je cours donne une prédiction du CATEGORY, je ne comprends pas Et pourquoi alors, la probabilité est 0. Est-ce que quelqu'un sait pourquoi je l'obtiens?

Si quelqu'un sait comment je pourrais travailler sur le problème afin que je puisse le résoudre. Merci d'avance.

+0

Pourriez-vous fournir un exemple de jeu de données? – ekstroem

+0

Oui, @ekstroem bien sûr. Considérons le x.sub être le tableau suivant (j'ai modifié pour poster qui pourrait être plus facile à lire): 'POINTID HS_TR SLR Catégorie 19 4 10 3 0.0 20 4 10 4 0,6 21 4 50 3 0.0 22 4 50 0,6 0 23 4 100 0,0 4 24 4 100 0,6 0' – David

+0

David, David, David. Il est si triste de voir une question potentiellement utile gâchée par le fait de ne pas lire les pages d'aide de SO et d'utiliser [edit] pour créer un [MCVE] et de publier des mises à jour dans les commentaires. Je vois aussi 147 résultats pour une recherche avec "[r] nnet predict" et sera tenté de downvote si vous n'améliorez pas la question plus loin. –

Répondre

1

Vous avez un problème avec la séparation/séparation complète (Google le terme pour obtenir plus d'informations This page donne une bonne introduction qui contient cette citation:.

Une séparation complète se produit lorsque la variable de résultat sépare une variable prédictive ou une combinaison de variables prédictives complètement.

Si vous regardez vos données, par exemple en utilisant

> xtabs(~ Category + HS_TR + SLR, data=x.sub) 
, , SLR = 0 

     HS_TR 
Category 10 50 100 
     3 1 1 0 
     4 0 0 1 

, , SLR = 0.6 

     HS_TR 
Category 10 50 100 
     3 0 0 0 
     4 1 1 1 

alors vous voyez que la combinaison de SLR et HS_TR détermine entièrement le résultat pour SLR=0.6. Vous devez spécifier un modèle plus simple ou obtenir plus de données pour fournir un ajustement stable.

Dans votre cas, votre sortie n'a que deux catégories possibles, vous devriez donc pouvoir ajuster un modèle linéaire ou un modèle de régression logistique et obtenir le même résultat. Si vous créez une nouvelle variable Cat qui est un facteur de Category, un avertissement s'affiche dans la bonne direction.

> glm(Cat ~HS_TR + SLR, data=x.sub, family="binomial") 
Warning message: 
glm.fit: fitted probabilities numerically 0 or 1 occurred 

Je pense que multinom ne détecte pas le problème dans les données. Cependant, si vous regardez le summary de votre ajustement, vous trouvez que l'erreur standard de deux des estimations de paramètres est extrêmement grande. Cela suggère également que les estimations ne sont pas stables et que la séparation pourrait poser problème.

> summary(fit) 
Call: 
multinom(formula = Category ~ HS_TR + SLR, data = x.sub, maxit = 3000) 

Coefficients: 
       Values Std. Err. 
(Intercept) -30.5791517 356.932851 
HS_TR   0.4130478 5.137396 
SLR   62.0976951 634.584184 

Residual Deviance: 0.0001820405 
AIC: 6.000182 

Je pense que la convergence dans le contrôle multinom manque un chèque de quelque sorte.

+0

Merci beaucoup pour votre réponse, je crois que c'est le problème que j'avais. Je vais vérifier. – David