У меня есть решение с data.table
и zoo
.Первый шаг - иметь общий FPR между всеми вашими кривыми.Это должно быть в состоянии построить максимум и минимум всей кривой.Для этого:
library(data.table)
library(zoo)
FPRlist <- unique(rbindlist(lapply(roc_curves_list_logisitic,function(ROC){
rccurve <- as.data.table(ROC)
rccurve[,.(FPR = FPR)]
})))
Я создаю таблицу FPRlist
, содержащую все FPR, существующие во всех ваших кривых.После слияния каждой кривой с этой таблицей, содержащей все FPR, я буду использовать na.locf для завершения пропущенных значений.Я использую rbindlist для создания одной таблицы с идентификатором для каждой кривой ROC
results <- rbindlist(lapply(seq(roc_curves_list_logisitic),function(idx){
rccurve <- as.data.table(roc_curves_list_logisitic[[idx]])
rccurve <- merge(FPRlist,rccurve,all = T)
rccurve[,TPR := na.locf(TPR,na.rm = F)] # I complete the values
rccurve[,ID := idx] # I create an ID
rccurve
}))
Затем я рассчитываю максимальное и минимальное значение для всех идентификаторов (всех кривых ROC) для каждого шага FPR
resultmax <- results[,.(TPR = max(TPR)),by = FPR]
resultmin <- results[,.(TPR = min(TPR)),by = FPR]
И постройте так же, как вы это делаете
ggplot()+
geom_line(data = results,aes(FPR,TPR,color = as.factor(ID)))+
theme_light() %+replace% theme(legend.position = "none")+
geom_line(data = resultmax,aes(FPR,TPR),color = "red",size = 1)+
geom_line(data = resultmin,aes(FPR,TPR),color = "red",size = 1)
Я разрешил перевод dplyr
пользователям dplyr
, потому что яЯ не привык к.
Редактировать
Я изменил свой график, чтобы сравнить его с графиком только всех необработанных кривых ROC без слияния или na.locf
.Можно видеть, что красные линии, которые я предлагаю, следуют за максимумом и минимумом всех кривых.Второй график получается следующим образом:
results2 <- rbindlist(lapply(seq(roc_curves_list_logisitic),function(idx){
rccurve <- as.data.table(roc_curves_list_logisitic[[idx]])
rccurve[,ID := idx] # I create an ID
rccurve
}))
p2 <- ggplot()+
geom_line(data = results2,aes(FPR,TPR,color = as.factor(ID)))+
theme_light() %+replace% theme(legend.position = "none")
Он просто отображает все кривые ROC, содержащиеся в списке, представленном в вопросе об ОС.Двухколоночный график получается с помощью функции multiplot
(см. здесь )