2013-08-26 4 views
9

Выполняю логистическую регрессию с использованием этого page. Мой код выглядит следующим образом.R логистическая область регрессии под кривой

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 

После запуска этого кода mydata dataframe имеет две колонки - «признать» и «prob». Должны ли эти два столбца быть достаточными для получения кривой ROC?

Как получить кривую ROC.

Во-вторых, при поиске в mydata, кажется, что модель прогнозирует вероятность admit=1.

Верно ли это?

Как определить, какое конкретное событие предсказывает модель?

Благодаря

UPDATE: кажется, что ниже трех команд очень полезны. Они обеспечивают отсечку, которая будет иметь максимальную точность, а затем поможет получить кривую ROC.

coords(g, "best") 

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

confusionMatrix(mydata$prediction,mydata$admit 
+0

Не было бы очень просто проверить вашу неуверенность о том, что предсказано с помощью небольшого набора данных? Или просто посмотрите на результаты 'with (mydata, table (admit, gre))'? Логистическая регрессия просто оценивается по множеству таблиц.) –

+0

да ... мы можем так поступать. И я следовал тому же методу, чтобы прийти к выводу, что текущий случай, который он предсказывает, допускает = 1.. но думал, что R будет иметь некоторый ярлык, который подтвердит мое мышление. Любые комментарии по обнаружению порога, который даст максимальную точность от объекта roc? – user2543622

+0

относительно «Любой комментарий об обнаружении порога, который даст максимальную точность от объекта roc?»: Я думаю, что ответ - это координаты (g, «best») ... – user2543622

ответ

22

Кривая ROC сравнивает ранг прогнозирования и ответа. Таким образом, можно оценить кривую ROC с пакетом pROC следующим образом:

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

, что имеет смысл. Если возможно, ответьте: «Во-вторых, если взглянуть на mydata, кажется, что модель предсказывает вероятность того, что admit = 1. правильно ли это, как узнать, какое конкретное событие предсказывает модель?» слишком. Я посмотрел на объект roc и понял, что g $ -чувствительности и g $ -специальности дадут мне определенные значения, но если я хочу узнать порог, который даст максимальную точность, я могу получить это число от объекта roc? – user2543622

+0

@ wush978 переменная «admit» - это предсказанный класс или фактический класс? –

+0

Этот URL-адрес для получения данных теперь кажется устаревшим. Для всех, кто заинтересован в воспроизведении этого примера, теперь кажется, что это mydata <- read.csv ("https://stats.idre.ucla.edu/stat/data/binary.csv") (используя https: // preended tho ', который не хочет появляться в комментарии) –

7

Другой способ построения кривой ROC ...

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

Для этого вам понадобится Java, или вы получите ошибку, просто FYI. 'Ошибка: .onLoad failed в loadNamespace() для 'rJava', подробности: call: fun (libname, pkgname) error: JAVA_HOME не может быть определен из реестра $ – 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

Можете ли вы добавить некоторые пояснения к своему ответу? –

+1

@Conny AUC можно вычислить как 'auc = performance (pred," auc ")' – SIslam

+0

@SIslam Спасибо за ваш комментарий! Заголовок вопроса - AUC, и вместо этого все говорят о ROC. Это связанные понятия, но не то же самое. – user1700890