Ausgabe der logistischen Regressionsvorhersage

14

Ich habe eine logistische Regression mit dem folgenden Code erstellt:

full.model.f = lm(Ft_45 ~ ., LOG_D)
base.model.f = lm(Ft_45 ~ IP_util_E2pl_m02_flg)
step(base.model.f, scope=list(upper=full.model.f, lower=~1),
     direction="forward", trace=FALSE)

Ich habe dann die Ausgabe verwendet, um ein endgültiges Modell zu erstellen:

final.model.f = lm(Ft_45 ~ IP_util_E2pl_m02_flg + IP_util_E2_m02_flg + 
                           AE_NumVisit1_flg + OP_NumVisit1_m01_flg + IP_TotLoS_m02 + 
                           Ft1_45 + IP_util_E1_m05_flg + IP_TotPrNonElecLoS_m02 + 
                           IP_util_E2pl_m03_flg + LTC_coding + OP_NumVisit0105_m03_flg +
                           OP_NumVisit11pl_m03_flg + AE_ArrAmb_m02_flg)

Dann habe ich die Ergebnisse für einen anderen Datensatz unter Verwendung der Vorhersagefunktion vorhergesagt:

log.pred.f.v <- predict(final.model.f, newdata=LOG_V)

Ich konnte eine ansprechende ROC-Kurve erstellen und eine Tabelle erstellen, um die Sensitivität und Spezifität zu ermitteln, mit der ich die erwarteten Antworten erhalte.

Ich versuche jedoch, für jede Datenzeile die Wahrscheinlichkeit von Ft_45 auf 1 zu bestimmen. Wenn ich mir die Ausgabe von log.pred.fv ansehe, erhalte ich zum Beispiel Folgendes:

1 -0.171739593    
2 -0.049905948    
3 0.141146419    
4 0.11615669    
5 0.07342591    
6 0.093054334    
7 0.957164383    
8 0.098415639    
.
.
.
104 0.196368229    
105 1.045208447    
106 1.05499112

Da ich nur vorläufig verstehe, was ich tue, habe ich Schwierigkeiten zu verstehen, wie ich negative und höhere Werte als 1 interpretieren kann, da ich eine Wahrscheinlichkeit zwischen 0 und 1 erwarten würde.

Meine Frage ist also, ob ich nur einen Schritt verpasse, in dem ich die Ausgabe transformieren muss, oder ob ich völlig daneben gegangen bin. Vielen Dank im Voraus für jede Hilfe, die Sie anbieten können.

SeBee
quelle

Antworten:

23

Zunächst sieht es so aus, als hätten Sie ein reguläres lineares Regressionsmodell erstellt, kein logistisches Regressionsmodell. Um ein logistisches Regressionsmodell zu erstellen, müssen Sie glm()mit family="binomial" , nicht verwenden lm().

x1,x2x3y

logit <- glm(y~x1+x2+x3,family="binomial")

β0,β1,β2β3

Wenn Sie dies tun predict(logit), berechnet R und kehrt zurück b0 + b1*x1 + b2*x2 + b3*x3.

y=lÖG(p1-p)=β0+β1x1+β2x2+β3x3

p

In R können Sie so etwas tun:

pred <- predict(logit,newdata=data) #gives you b0 + b1x1 + b2x2 + b3x3
probs <- exp(pred)/(1+exp(pred)) #gives you probability that y=1 for each observation
Ben F
quelle
Vielen Dank, erstens für die Korrektur meines Codes und zweitens für die Erklärung, wie man die Wahrscheinlichkeiten in R erhält. Ich habe es ausprobiert und es funktioniert perfekt. Ich wünschte ich hätte vor Wochen gefragt !!
SeBee
1
Kann mit probs <- exp(predict(logit, type = "response" , newdata=data)oder zumindest `probs <- 1 / (1 + exp (-pred))
snoram
11

Ein Blick auf die Dokumentation von predict.glmscheint so einfach zu sein wie die Verwendung eines zusätzlichen Parameters in predictcall:

 type = "response"

Siehe Dokumentation:

Typ - die Art der Vorhersage erforderlich. Der Standardwert liegt auf der Skala der linearen Prädiktoren. Die alternative Antwort liegt auf der Skala der Antwortvariablen. Für ein Standard-Binomialmodell lauten die Standardvorhersagen daher Log-Odds (Wahrscheinlichkeiten auf der Logit-Skala), und type = "response" gibt die vorhergesagten Wahrscheinlichkeiten an. Die Option "Ausdrücke" gibt eine Matrix zurück, die die angepassten Werte der einzelnen Ausdrücke in der Modellformel auf der linearen Prädiktorskala angibt. Der Wert dieses Arguments kann abgekürzt werden

Bulat
quelle