[英]Plot an ROC curve in R with ggplot2
我有兩個變量(條件1和條件2),我已經計算了誤報率和命中率,我想在條件1和條件2的單獨曲線上繪制這些變量。這兩個條件都有三個點,兩者都有使用相同的誤報率。 這是我的數據框架的樣子:
measure <- c('False_Alarm','False_Alarm','False_Alarm', 'Hit_Rate_Condition1',
'Hit_Rate_Condition1','Hit_Rate_Condition1', 'Hit_Rate_Condition2','Hit_Rate_Condition2',
'Hit_Rate_Condition2')
point_on_curve<- c(1, 2, 3, 1, 2, 3, 1, 2, 3)
percentage <- c(0.11, 0.1, 0.01, 0.80, 0.50, 0.20, 0.80, 0.55, 0.25)
ROC_data <- data.frame(measure,point_on_curve, percentage)
虛警應該在x軸上,並且命中率應該在y軸上。 請注意,我特別對ROCR等ROC包不感興趣,但我認為應該可以使用ggplot進行繪圖。
提前謝謝了!
ps只是為了表明我至少已經嘗試了一些東西並且真的不想讓堆棧交換為我做博士學位,我已經嘗試重鑄DF並將兩者分開以制作兩個圖:
Condition_1 <- dcast(ROC_data, point_on_curve ~ measure)
Condition_1 <- Condition_1[which(!Condition_1$measure == Hit_Rate_Condition2),]
p <- ggplot(data=Condition_1, aes(x=False_Alarm, y=Hit_Rate)) +
geom_point() +
stat_smooth(method = "lm", formula = y ~ splines::bs(x, 1), col = "red") +
expand_limits(x = c(0, 1))
這導致一些荒謬的線條,這不是一個平滑的ROC(不是我需要的),我仍然需要將兩者結合起來....無論如何,必須有一個簡單的方法來制作這個情節(我需要另外做18次)與原來的DF一起去......
我認為你需要重新格式化你的數據,以便你的x和y變量(誤報率和真正的正率)在不同的列中,然后使用geom_step
。 看看下面的代碼和輸出,讓我知道這是你的目標:
ROC_data <- data.frame(measure, point_on_curve, percentage)
ROC_data = cbind(ROC_data[rep(1:3,2),], ROC_data[4:nrow(ROC_data),])
ROC_data = ROC_data[,c(3,4,6)]
names(ROC_data) = c("FP_Rate","condition","TP_Rate")
ROC_data
FP_Rate condition TP_Rate 1 0.11 Hit_Rate_Condition1 0.80 2 0.10 Hit_Rate_Condition1 0.50 3 0.01 Hit_Rate_Condition1 0.20 1.1 0.11 Hit_Rate_Condition2 0.80 2.1 0.10 Hit_Rate_Condition2 0.55 3.1 0.01 Hit_Rate_Condition2 0.25
ggplot(ROC_data, aes(FP_Rate,TP_Rate,colour=condition)) +
geom_step() +
coord_cartesian(xlim=c(0,1), ylim=c(0,1)) +
theme_bw()
如果要使用直線連接點,可以使用geom_line
代替:
ggplot(ROC_data, aes(FP_Rate,TP_Rate,colour=condition)) +
geom_line() +
geom_point() +
coord_cartesian(xlim=c(0,1), ylim=c(0,1)) +
theme_bw()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.