2013-08-26 16 views
9

Przeprowadzam regresję logistyczną za pomocą tego page. Mój kod jest jak poniżej.R regresja logistyczna pod krzywą

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 

Po uruchomieniu tego kodu ramka danych mydata ma dwie kolumny - 'admit' i 'prob'. Czy te dwie kolumny nie powinny wystarczyć, aby uzyskać krzywą ROC?

Jak uzyskać krzywą ROC.

Po drugie, przez loooking w mydata, wydaje się, że model przewiduje prawdopodobieństwo admit=1.

Czy to prawda?

Jak dowiedzieć się, które konkretne zdarzenie przewiduje model?

Dzięki

UPDATE: Wydaje się, że poniżej trzech komend są bardzo przydatne. Zapewniają odcięcie, które będzie miało maksymalną dokładność, a następnie pomoże uzyskać krzywą ROC.

coords(g, "best") 

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

confusionMatrix(mydata$prediction,mydata$admit 
+0

Nie byłoby bardzo proste, aby sprawdzić swoją niepewność o tym, co jest przewidywane przy użyciu małego zestawu danych? Lub po prostu spójrz na wyniki 'with (mydata, table (admit, gre))? Regresja logistyczna jest tylko oszacowaniem na kilka stołów.) –

+0

tak ... możemy to zrobić .. i zastosowałem tę samą metodę, aby dojść do wniosku, że w obecnym przypadku przewiduje się przyznanie = 1.. Ale myślałem, że R będzie miał skrót, który potwierdzi moje myślenie. Każdy komentarz na temat ustalenia progu, który da maksymalną dokładność z obiektu roc? – user2543622

+0

w odniesieniu do "Jakiekolwiek uwagi dotyczące ustalenia progu, który da maksymalną dokładność z obiektu roc?": Myślę, że odpowiedź brzmi: coords (g, "best") ... – user2543622

Odpowiedz

22

Krzywa ROC porównuje rangę przewidywania i odpowiedzi. W związku z tym, można ocenić krzywą ROC z pakietem pROC następująco:

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

ma to sens. Jeśli to możliwe, proszę odpowiedzieć "Po drugie, przez loooking w mydata, wydaje się, że model przewiduje prawdopodobieństwo admit = 1. Czy to prawda? Jak dowiedzieć się, które konkretne zdarzenie przewiduje model?" także. Spojrzałem na obiekt roc i zrozumiałem, że g wrażliwość i specyfika g $ da mi określone wartości, ale jeśli chcę poznać próg, który da maksymalną dokładność, to czy mogę uzyskać tę liczbę z obiektu roc? – user2543622

+0

@ wush978 zmienna "admit" to przewidywana klasa lub rzeczywista klasa? –

+0

Ten adres URL, aby uzyskać dane teraz wydaje się być nieaktualne. Dla każdego, kto jest zainteresowany odtwarzaniem tego przykładu, teraz wygląda na to, że mydata <- read.csv ("https://stats.idre.ucla.edu/stat/data/binary.csv") (używając https: // dodany wcześniej, "który nie chce pojawić się w komentarzu) –

7

inny sposób wykreślić krzywą ROC ...

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

Będziesz potrzebował do tego zainstalowanej Javy lub dostaniesz błąd, tylko FYI. 'Błąd: .onLoad nie powiodło się w loadNamespace() dla 'rJava', details: call: fun (libname, pkgname) error: JAVA_HOME nie może zostać ustalone z rejestru' – 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

Czy możesz dodać jakieś wyjaśnienie do swojej odpowiedzi? –

+1

@Conny AUC można obliczyć jako 'auc = wydajność (pred," auc ")' – SIslam

+0

@SIslam Dziękujemy za komentarz! tytuł pytania to AUC, a zamiast tego wszyscy mówią o ROC. Są to pojęcia pokrewne, ale nie takie same. – user1700890

Powiązane problemy