R可视化——ROC曲线绘制常见包汇总及绘制方法展示
ROC曲线,即受试者工作特征曲线 (receiver operating characteristic curve),又称为感受性曲线(sensitivity curve)。ROC曲线曲线的绘制方式一般是根据一系列不同的二分类方式,以真阳性率(灵敏度)为纵坐标,假阳性率(1-特异度)为横坐标进行绘制。其中比较重要的几个统计量,如AUC(曲线下面积)用于评价诊断效果,AUC>0.5时,AUC越接近于1,说明诊断效果越好;AUC在 0.5~0.7时,准确性较低;在0.7~0.9时,有一定准确性;AUC在0.9以上时,准确性较高。
今天这期推文,小编会结合pROC、multipleROC、reportROC、ROCR、plotROC及ROCit六个R包给大家展示如何进行ROC曲线的绘制相关指数的获取!
基于pROC包进行绘制
1、加载包
#加载包
library(pROC)
2、数据——以包里面的示例数据为例
df <- as.data.frame(aSAH)
head(df)
3、构建ROC对象并进行可视化
dfroc1<- roc(df$outcome, df$ndka)
plot(dfroc1,col="red",#颜色
legacy.axes=T,#y轴格式更改
print.auc=TRUE,#显示AUC面积
print.thres=TRUE,#添加截点和95%CI
grid=c(0.2,0.2),grid.col=c("blue","yellow"))#网格线设置
4、计算AUC值
auc(dfroc1)
## Area under the curve: 0.612
5、绘制多条ROC曲线
##构建ROC对象
dfroc1 <- roc(df$outcome, df$ndka)
dfroc2 <- roc(df$outcome, df$s100b)
dfroc3 <- roc(df$outcome, df$wfns)
##绘图
plot(dfroc1,col="red",grid=c(0.2,0.2),grid.col=c("blue","yellow"))
plot(dfroc2,add=TRUE,col="green")
plot(dfroc3,add=TRUE,col="pink")
legend("bottomright", legend=c("A","B","C"),
col=c("red","green","pink"),lty=1)
基于multipleROC包绘制
1、加载R包
#加载R包
## remotes::install_github("cardiomoon/multipleROC")
## remotes::install_git("https://gitee.com/swcyo/multipleROC/")
library(multipleROC)
2、数据——以上面的数据为例
df <- as.data.frame(aSAH)
3、绘图
p <- multipleROC(outcome~s100b,data=df)
plot_ROC(p,
show.points = T,
show.eta = T,
show.sens = T,
show.AUC = T,
facet = F )
4、AUC、截断点、最佳截断值的提取
p$auc
p$cutpoint
p$cutoff
# [1] 0.7313686
# [1] 0.3362725
# s100b
# 116 0.22
5、绘制多条ROC曲线
###多个ROC曲线绘制
p1 <- multipleROC(outcome~s100b,data=df)
p2 <- multipleROC(outcome~ndka,data=df)
p3 <- multipleROC(outcome~age,data=df)
#一起显示
plot_ROC(list(p1,p2,p3),
show.points = T,
show.eta = F,
show.sens = F,
show.AUC = T,
facet = F )
或者:plot_ROC2(yvar="outcome",xvars=c("age","s100b","ndka"),dataname="df")
6、分面显示
plot_ROC(list(p1,p2,p3),
show.points = T,
show.eta = T,
show.sens = T,
show.AUC = T,
facet = T )
基于reportROC包进行绘制
这个R包唯一的好处就是可以一行代码输出ROC曲线的各项统计数值及ROC曲线,包括截断值、AUC及置信区间、灵敏度及置信区间、特异度及置信区间、阳性似然比、阴性似然比、阴性预测值等统计值:
1、加载R包
#加载包
library(reportROC)
2、数据——以aSAH示例数据为例
df <- as.data.frame(aSAH)
3、ROC可视化及各项统计值展示
data <- reportROC(gold=df$outcome,
predictor=aSAH$s100b,
important="se",
plot=TRUE)
data
# Cutoff AUC AUC.SE AUC.low AUC.up P
# 0.205 0.731 0.052 0.630 0.833 0.000
# ACC ACC.low ACC.up SEN SEN.low SEN.up
# 0.743 0.740 0.747 0.634 0.487 0.782
# SPE SPE.low SPE.up PLR PLR.low PLR.up
# 0.806 0.714 0.897 3.261 1.930 5.510
# NLR NLR.low NLR.up PPV PPV.low PPV.up
# 0.454 0.299 0.690 0.650 0.502 0.798
# NPV NPV.low NPV.up PPA PPA.low PPA.up
# 0.795 0.702 0.887 0.634 0.487 0.782
# NPA NPA.low NPA.up TPA TPA.low TPA.up
# 0.806 0.714 0.897 0.743 0.663 0.824
# KAPPA KAPPA.low KAPPA.up
# 0.442 0.270 0.614
4、保存
write.csv(data, "data.csv")
基于ROCR包进行绘制
1、加载R包
#加载包
library(ROCR)
2、数据——以aSAH示例数据为例
df <- as.data.frame(aSAH)
3、构建prediction对象并展示AUC值
##构建prediction对象
ROC <- prediction(df$age,df$outcom)
#计算AUC(y.values就是AUC)
AUC <- performance(ROC, "auc")
slotNames(AUC)
AUC@"y.values"
# > slotNames(AUC)
# [1] "x.name" "y.name"
# [3] "alpha.name" "x.values"
# [5] "y.values" "alpha.values"
# > AUC@"y.values"
# [[1]]
# [1] 0.6150068
4、获取ROC数据并进行可视化
df_roc <- performance(ROC, measure = "tpr", x.measure = "fpr")
plot(df_roc)
基于plotROC包进行绘制
1、加载R包
#加载R包
library(plotROC)
library(ggplot2)
2、数据——以aSAH示例数据为例
df <- as.data.frame(aSAH)
3、基于ggplot2绘图
p <- ggplot(df, aes(m = age, d = outcome)) + geom_roc()+theme_bw()
p
4、计算曲线下面积
calc_auc(p)
# PANEL group AUC
# 1 1 -1 0.6150068
基于ROCit包进行绘制
1、加载R包
library(ROCit)
2、数据——以aSAH示例数据为例
df <- as.data.frame(aSAH)
3、构建ROC对象
ROC <- rocit(score = df$age,class=df$outcome)
4、计算AUC和95%置信区间
ciAUC(ROC)
# estimated AUC : 0.615006775067751
# AUC estimation method : empirical
#
# CI of AUC
# confidence level = 95%
# lower = 0.505167567962005 upper = 0.724845982173496
5、绘制ROC曲线
plot(ROC,legend=T,YIndex=T)
plot(ciROC(ROC),legend=T,YIndex=T) #包含置信区间
参考:
1)https://blog.csdn.net/dege857/article/details/121138734
2)https://www.jianshu.com/p/6e89b25fca1b
3)https://cran.r-project.org/web/packages/reportROC/reportROC.pdf
4)https://cloud.tencent.com/developer/article/1632723
5)https://cloud.tencent.com/developer/article/1965938
6)https://zhuanlan.zhihu.com/p/607695181
爱我请给我好看!