2015-02-10 22 views
3

如何使用ROCR軟件包繪製ROC曲線,僅帶有分類列聯表如何使用ROCR軟件包繪製ROC曲線圖*僅包含分類列聯表*

我有一個應急表,其中真正的積極,錯誤的積極..等所有額定可以計算。我有500個重複,因此500個表。但是,我無法生成預測數據,指示每個估計概率和真相的單個情況。我怎樣才能得到沒有個人數據的曲線。 以下是使用的包裝說明。

## computing a simple ROC curve (x-axis: fpr, y-axis: tpr) 
library(ROCR) 
data(ROCR.simple) 
pred <- prediction(ROCR.simple$predictions, ROCR.simple$labels) 
perf <- performance(pred,"tpr","fpr") 
plot(perf)  
+0

我的問題是,我沒有爲我的文件「ROCR.simple」。 – 2015-02-10 23:26:42

+0

好吧,如果您沒有個人數據,請分享一些您*爲數據提供的樣本輸入。 – MrFlick 2015-02-10 23:27:55

+0

是你的表格的兩個兩個表格,每個獨特的閾值有一個表格(例如,你有500張表格b/c他們創建的數據集有500個記錄?) – Jthorpe 2015-02-11 00:37:41

回答

7

不能產生與單個列聯表的全部ROC曲線,因爲列聯表僅提供單個靈敏度/特異性對(無論預測截止值用於生成列聯表)。

如果您有很多具有不同臨界值的列聯表,您可以近似ROC曲線(基本上它將是您的列聯表中敏感性/特異性值之間的線性插值)。作爲一個例子,讓我們考慮預測採用Logistic迴歸花是否是菌在虹膜數據集:

iris$isv <- as.numeric(iris$Species == "versicolor") 
mod <- glm(isv~Sepal.Length+Sepal.Width, data=iris, family="binomial") 

我們可以使用標準的ROCR代碼來計算此模型的ROC曲線:

library(ROCR) 
pred1 <- prediction(predict(mod), iris$isv) 
perf1 <- performance(pred1,"tpr","fpr") 
plot(perf1) 

enter image description here

現在讓我們假設,而不是mod所有我們有的列聯表有多個預測截止值:

tables <- lapply(seq(0, 1, .1), function(x) table(iris$isv, factor(predict(mod, type="response") >= x, levels=c(F, T)))) 

# Predict TRUE if predicted probability at least 0 
tables[[1]] 
#  FALSE TRUE 
# 0  0 100 
# 1  0 50 

# Predict TRUE if predicted probability at least 0.5 
tables[[6]] 
#  FALSE TRUE 
# 0 86 14 
# 1 29 21 

# Predict TRUE if predicted probability at least 1 
tables[[11]] 
#  FALSE TRUE 
# 0 100 0 
# 1 50 0 

從一張表到下一張表中,由於增加的截斷點,一些預測值從TRUE變爲FALSE,並且通過比較連續表的第1列,我們可以確定其中哪些表示真負值和負負值預測值。通過我們有序的應急表列表,我們可以創建我們可以傳遞給ROCR的假預測值/結果對,確保我們匹配每個應變表的敏感性/特異性。

fake.info <- do.call(rbind, lapply(1:(length(tables)-1), function(idx) { 
    true.neg <- tables[[idx+1]][1,1] - tables[[idx]][1,1] 
    false.neg <- tables[[idx+1]][2,1] - tables[[idx]][2,1] 
    if (true.neg <= 0 & false.neg <= 0) { 
    return(NULL) 
    } else { 
    return(data.frame(fake.pred=idx, 
         outcome=rep(c(0, 1), times=c(true.neg, false.neg)))) 
    } 
})) 

現在我們可以通過僞造的預測,以ROCR像往常一樣:

pred2 <- prediction(fake.info$fake.pred, fake.info$outcome) 
perf2 <- performance(pred2,"tpr","fpr") 
plot(perf2) 

enter image description here

基本上我們所做的是一個點的線性插值,我們確實有在ROC曲線。如果你有很多臨界值的列表,你可以更接近真實的ROC曲線。如果您沒有廣泛的截止頻率,您無法準確再現完整的ROC曲線。