2013-08-26 41 views
9

Tôi đang thực hiện hồi quy logistic bằng cách sử dụng page này. Mã của tôi như sau.R khu vực hồi quy logistic dưới đường cong

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 

Sau khi chạy mã này mydata dataframe có hai cột - 'thừa nhận' và 'prob'. Hai cột đó có đủ để có được đường cong ROC không?

Tôi có thể lấy đường cong ROC như thế nào.

Thứ hai, bằng cách nới lỏng tại mydata, có vẻ như mô hình dự đoán tính xác thực của admit=1.

Điều đó có đúng không?

Làm cách nào để tìm ra sự kiện cụ thể mà mô hình dự đoán?

Cảm ơn

UPDATE: Dường như bên dưới ba lệnh rất hữu ích. Họ cung cấp các cut-off mà sẽ có độ chính xác tối đa và sau đó giúp đỡ để có được đường cong ROC.

coords(g, "best") 

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

confusionMatrix(mydata$prediction,mydata$admit 
+0

Nó sẽ không thể rất đơn giản để kiểm tra chắc chắn bạn về những gì đang được dự đoán với một tập dữ liệu nhỏ? Hoặc chỉ cần nhìn vào kết quả của 'với (mydata, bảng (thừa nhận, gre))'? Logistic hồi quy chỉ là ước tính trên một loạt các bảng.) –

+0

có ... chúng tôi có thể làm theo cách đó .. và tôi theo cùng một phương pháp để đi đến kết luận rằng các trường hợp hiện tại nó được dự đoán thừa nhận = 1.. Nhưng nghĩ rằng R sẽ có một số phím tắt mà sẽ xác nhận suy nghĩ của tôi. Bất kỳ bình luận về việc tìm ra ngưỡng mà sẽ cung cấp cho độ chính xác tối đa từ đối tượng roc? – user2543622

+0

về "Bất kỳ bình luận về việc tìm ra ngưỡng mà sẽ cung cấp cho độ chính xác tối đa từ đối tượng roc?": Tôi nghĩ rằng câu trả lời là coords (g, "tốt nhất") ... – user2543622

Trả lời

22

Đường cong ROC so sánh xếp hạng dự đoán và câu trả lời. Do đó, bạn có thể đánh giá các đường cong ROC với gói pROC như sau:

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

có ý nghĩa. Nếu có thể, hãy trả lời "Thứ hai, bằng cách nới lỏng tại mydata, có vẻ như mô hình dự đoán tính xác thực của thừa nhận = 1. là đúng? Làm thế nào để tìm ra sự kiện cụ thể mà mô hình dự đoán?" quá. Tôi nhìn vào đối tượng roc và hiểu rằng g $ sensitivities và g $ specificities sẽ cho tôi giá trị cụ thể, nhưng nếu tôi muốn tìm ra ngưỡng sẽ cho độ chính xác tối đa thì tôi có thể lấy số đó từ đối tượng roc không? – user2543622

+0

@ wush978 biến "thừa nhận" là lớp được dự đoán hoặc lớp thực tế? –

+0

URL đó để nhận dữ liệu hiện có vẻ đã lỗi thời. Đối với bất kỳ ai quan tâm đến việc tái tạo ví dụ này, những gì dường như làm việc bây giờ là mydata <- read.csv ("https://stats.idre.ucla.edu/stat/data/binary.csv") (sử dụng https: // prepended tho 'mà không muốn xuất hiện trong các bình luận) –

7

một cách khác để mưu ROC đường cong ...

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

Bạn sẽ cần Java cài đặt cho điều này hoặc bạn sẽ nhận được một lỗi, chỉ FYI. 'Lỗi: .onLoad thất bại trong loadNamespace() cho 'rJava', chi tiết: call: fun (libname, pkgname) error: JAVA_HOME không thể được xác định từ 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

Bạn có thể thêm một số giải thích cho câu trả lời của bạn không? –

+1

@Conny AUC có thể được tính là 'auc = hiệu suất (trước, "auc") ' – SIslam

+0

@SIslam Cảm ơn bạn đã bình luận! tiêu đề của câu hỏi là AUC và thay vào đó mọi người đang nói về ROC. Chúng là các khái niệm liên quan, nhưng không giống nhau. – user1700890

Các vấn đề liên quan