Output della previsione della regressione logistica


14

Ho creato una regressione logistica utilizzando il seguente codice:

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)

Ho quindi usato l'output per creare un modello finale:

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)

Quindi ho previsto i risultati per un diverso set di dati utilizzando la funzione di previsione:

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

Sono stato in grado di stabilire una curva ROC piacevole e ho creato una tabella per stabilire la sensibilità e la specificità che mi danno le risposte che mi sarei aspettato.

Tuttavia, ciò che sto cercando di fare è stabilire per ogni riga di dati quale sia la probabilità che Ft_45 sia 1. Se guardo l'output di log.pred.fv, ad esempio, ottengo:

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

Dato che ho solo una comprensione provvisoria di ciò che sto facendo, faccio fatica a capire come interpretare i valori negativi e più alti di 1 come mi aspetterei che una probabilità sia compresa tra 0 e 1.

Quindi la mia domanda è: mi manca solo un passaggio in cui ho bisogno di trasformare l'output o ho sbagliato completamente. Grazie in anticipo per qualsiasi aiuto tu possa offrire.

Risposte:


23

Innanzitutto, sembra che tu abbia creato un modello di regressione lineare regolare, non un modello di regressione logistica. Per creare un modello di regressione logistica, è necessario utilizzare glm()con family="binomial" , non lm().

X1,X2X3y

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

β0,β1,β2β3

Se lo fai predict(logit), R calcolerà e ritornerà b0 + b1*x1 + b2*x2 + b3*x3.

y=log(p1-p)=β0+β1X1+β2X2+β3X3

p

In R, puoi fare qualcosa del genere:

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

Grazie mille, in primo luogo per aver corretto il mio codice e in secondo luogo per aver spiegato come ottenere le probabilità in R. L'ho provato e funziona perfettamente. Vorrei averlo chiesto settimane fa !!
SeBee,

1
Può essere accorciato con probs <- exp(predict(logit, type = "response" , newdata=data)o almeno `probs <- 1 / (1 + exp (-pred))
snoram il

11

Guardando la documentazione di predict.glm, sembra facile come usare un parametro aggiuntivo in predictchiamata:

 type = "response"

Vedi documentazione:

tipo : il tipo di previsione richiesto. L'impostazione predefinita è sulla scala dei predittori lineari; la "risposta" alternativa è sulla scala della variabile di risposta. Pertanto, per un modello binomiale predefinito le previsioni predefinite sono delle probabilità di log (probabilità su scala logit) e type = "response" fornisce le probabilità previste. L'opzione "termini" restituisce una matrice che fornisce i valori adattati di ciascun termine nella formula del modello sulla scala del predittore lineare. Il valore di questo argomento può essere abbreviato

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.