查看原文
其他

R可视化——ROC曲线绘制常见包汇总及绘制方法展示

王志山 科研后花园 2023-09-08

     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$aucp$cutpointp$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

绘图源码可在后台回复"ROC"获取!!!

爱我请给我好看!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存