2017-05-13 2 views
1

Guten Nachmittag, habe ich ein Problem mit der Ausgabe, die ich bei der Durchführung einer logistischen Regression mit NNET-Paket. Ich möchte Category mit HS_TR (Return Period) und SLR (Sea Level Rise) voraussagen. Das multinomiale Modell fit wurde mit den Informationen aus der x.sub-Untermenge berechnet. Es gibt 4 verschiedene Kategorien möglich 1,2,3 oder 4.Wahrscheinlichkeit Ergebnisse von multinomialen Regression nnet-Paket

x.sub:

Coefficients: 
    (Intercept)  HS_TR   SLR 
    -30.5791517 0.4130478 62.0976951 

    Residual Deviance: 0.0001820405 
    AIC: 6.000182 

Nun, da ich habe:

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 

Wenn ich das Modell laufen>fit <- multinom(Category ~ HS_TR + SLR, x.sub, maxit=3000) ich die Ergebnisse erhalten das Multinomial, möchte ich die vorhergesagte Kategorie für ein bestimmtes Szenario (d3) von SLR und HS_TR kennen. Ich definiere d3 und die Vorhersage anwenden und ich vernünftiges Ergebnis:

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

I

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

jedoch erhalten, wenn ich die Wahrscheinlichkeit für die Vorhersage prediction <-(predict(fit,d3, type="probs")) berechnen, erhalte ich folgendes:

> prediction 
[[1]] 
1 
0 

Das macht keinen Sinn, da es besagt, dass es Wahrscheinlichkeit 0 gibt. Da das Modell, das ich laufe, eine Vorhersage des CATEGORY gibt, unterbreche ich nicht Warum ist dann die Wahrscheinlichkeit 0. Weiß jemand, warum ich es bekomme?

Wenn jemand weiß, wie ich an dem Problem arbeiten könnte, damit ich es lösen kann. Vielen Dank im Voraus.

+0

Können Sie einen Beispieldatensatz bereitstellen? – ekstroem

+0

Ja, @ekstroem sicher. Betrachten wir die x.sub der folgenden Tabelle zu sein (ich habe auch zu schreiben bearbeitet, welche einfacher sein könnte, lesen): 'POINTID HS_TR SLR Kategorie 19 4 10 0,0 3 20 4 10 0,6 4 21 4 50 0,0 3 22 4 50 0,6 4 23 4 100 0.0 4 24 4 100 0,6 4' – David

+0

David, David, David. Es ist so traurig, dass eine möglicherweise nützliche Frage dadurch beeinträchtigt wird, dass die SO-Hilfeseiten nicht gelesen werden und [Bearbeiten] verwendet wird, um [MCVE] zu erstellen und stattdessen Aktualisierungen in Kommentaren zu veröffentlichen. Ich sehe auch 147 Treffer für eine Suche mit "[r] nnet vorhergesagt" und wird versucht sein, die Antwort zu verwerfen, wenn Sie die Frage nicht weiter verbessern. –

Antwort

1

Sie haben ein Problem mit der Trennung/vollständiger Trennung (Google den Begriff, um mehr Informationen zu erhalten This page gibt eine schöne Einleitung, die dieses Zitat enthält:.

Eine vollständige Trennung geschieht, wenn die Ergebnisvariable ein Prädiktor Variable trennen oder eine Kombination von Prädiktorvariablen vollständig.

Wenn Sie Ihre Daten sehen, zum Beispiel mit

> 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 

dann sehen Sie, dass die Kombination SLR und HS_TR das Ergebnis für SLR=0.6 vollständig bestimmt. Sie müssen ein einfacheres Modell angeben oder mehr Daten erhalten, um eine stabile Anpassung zu gewährleisten.

In Ihrem Fall hat Ihre Ausgabe nur zwei mögliche Kategorien, so dass Sie in der Lage sein sollten, ein logarithmisches lineares Modell oder logistisches Regressionsmodell anzupassen und das gleiche Ergebnis zu erhalten. Wenn Sie eine neue Variable Cat erstellen, die ein Faktor von Category ist, dann sehen Sie eine Warnung, die Sie in die richtige Richtung weist.

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

Ich denke multinom das Problem in den Daten nicht erkennt. Wenn Sie jedoch die summary Ihrer Anpassung betrachten, dann finden Sie, dass der Standardfehler von zwei der Parameter Schätzungen extrem groß sind. Dies deutet auch darauf hin, dass die Schätzungen nicht stabil sind und dass die Trennung ein Problem darstellen könnte.

> 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 

ich denke, die Überprüfung der Konvergenz in multinom einen Scheck von einer Art fehlt.

+0

Vielen Dank für Ihre Antwort, ich glaube, das ist das Problem, das ich hatte. Wird es überprüfen. – David

Verwandte Themen