2013-08-26 20 views
9

Sto eseguendo la regressione logistica utilizzando questo page. Il mio codice è il seguenteR area di regressione logistica sotto curva

mydata <- read.csv("http://www.ats.ucla.edu/stat/data/binary.csv") 
mylogit <- glm(admit ~ gre, data = mydata, family = "binomial") 
summary(mylogit) 
prob=predict(mylogit,type=c("response")) 
mydata$prob=prob 

Dopo l'esecuzione di questo codice mydata dataframe ha due colonne - 'ammettere' e 'prob'. Non dovrebbero quelle due colonne sufficienti per ottenere la curva ROC?

Come posso ottenere la curva ROC.

In secondo luogo, esaminando mydata, sembra che il modello preveda la probabilità di admit=1.

È corretto?

Come scoprire quale evento particolare è previsto dal modello?

Grazie

UPDATE: Sembra che sotto tre comandi sono molto utili. Forniscono il cut-off che avrà la massima precisione e quindi aiutano a ottenere la curva ROC.

coords(g, "best") 

mydata$prediction=ifelse(prob>=0.3126844,1,0) 

confusionMatrix(mydata$prediction,mydata$admit 
+0

Non sarebbe molto semplice per testare il vostro incertezza su cosa viene previsto con un piccolo set di dati? Oppure guarda i risultati di 'with (mydata, table (admit, gre))'? La regressione logistica è solo una stima su un mucchio di tabelle.) –

+0

sì ... possiamo farlo in questo modo..e ho seguito lo stesso metodo per arrivare alla conclusione che il caso corrente è predire ammettere = 1. ma pensare che R avrà qualche scorciatoia che confermerà il mio pensiero. Qualche commento su come trovare la soglia che darà la massima precisione dall'oggetto roc? – user2543622

+0

riguardo "Qualche commento su come trovare la soglia che darà la massima precisione dall'oggetto roc?": Penso che la risposta sia coords (g, "best") ... – user2543622

risposta

22

La curva ROC confronta il rango di previsione e risposta. Pertanto, si potrebbe valutare la curva ROC con il pacchetto pROC come segue:

mydata <- read.csv("http://www.ats.ucla.edu/stat/data/binary.csv") 
mylogit <- glm(admit ~ gre, data = mydata, family = "binomial") 
summary(mylogit) 
prob=predict(mylogit,type=c("response")) 
mydata$prob=prob 
library(pROC) 
g <- roc(admit ~ prob, data = mydata) 
plot(g)  
+0

che abbia senso. Se possibile, per favore rispondi "In secondo luogo, osservando i miei dati, sembra che il modello preveda la probabilita 'di ammettere = 1. E' corretto? Come scoprire quale particolare evento il modello sta predicendo?" pure. Ho esaminato l'oggetto roc e ho capito che le sensibilità di g $ e le specificità di g $ mi daranno valori specifici, ma se voglio scoprire la soglia che darà la massima accuratezza allora posso ottenere quel numero dall'oggetto roc? – user2543622

+0

@ wush978 la variabile "admit" è la classe prevista o la classe effettiva? –

+0

L'URL per ottenere i dati ora sembra non aggiornato. Per chiunque sia interessato a riprodurre questo esempio, ciò che sembra funzionare ora è mydata <- read.csv ("https://stats.idre.ucla.edu/stat/data/binary.csv") (utilizzando https: // anteposto tho 'che non vuole apparire nel commento) –

7

un altro modo per tracciare Curva ROC ...

library(Deducer) 
modelfit <- glm(formula=admit ~ gre + gpa, family=binomial(), data=mydata, na.action=na.omit) 
rocplot(modelfit) 
+0

Avrai bisogno di Java installato per questo o riceverai un errore, solo FYI. 'Errore: .onLoad non riuscito in loadNamespace() per 'rJava', dettagli: call: fun (libname, pkgname) errore: JAVA_HOME non può essere determinato dal Registry' – alexpghayes

1
#Another way to plot ROC 

mydata <- read.csv("http://www.ats.ucla.edu/stat/data/binary.csv") 
mylogit <- glm(admit ~ gre, data = mydata, family = "binomial")  
summary(mylogit)  
prob=predict(mylogit,type=c("response"))  
library("ROCR")  
pred <- prediction(prob, mydata$admit)  
perf <- performance(pred, measure = "tpr", x.measure = "fpr")  
plot(perf, col=rainbow(7), main="ROC curve Admissions", xlab="Specificity", 
    ylab="Sensitivity")  
abline(0, 1) #add a 45 degree line 
+1

Puoi aggiungere qualche spiegazione alla tua risposta? –

+1

@Conny AUC può essere calcolato come 'auc = performance (pred," auc ")' – SIslam

+0

@SIslam Grazie per il tuo commento! il titolo della domanda è AUC e invece tutti parlano di ROC. Sono concetti correlati, ma non uguali. – user1700890

Problemi correlati