R语言画ROC曲线图
(2017-06-27 21:33:00)
标签:
生物信息学 |
分类: 生物信息学 |
受试者工作特征曲线(ROC曲线,receiver operator characteristic curve),最初作为一种分析方法在二战时用于评价雷达性能(鉴别敌方,友方以及噪音),目前广泛应用于医学诊断、生物信息学、数据挖掘和机器学习等研究中。
ROC曲线可用于评价生物标记物(biomarker)的表现以及比较不同打分方法(scoring methods)。因此,ROC曲线是非常重要和常见的统计分析方法[1]。
ROC曲线是以真阳性率TPR(True positive rate)(灵敏度)为纵坐标,假阳性率FPR(False positive rate)(特异度)为横坐标绘制的曲线。主要用来评价一个二值分类器(binary classifier)的优劣。
AUC(area under the curve)为曲线下面的面积,作为评估指标,AUC值越大,说明模型越好。
ROC分析原理:
ROC分析本质上属于机器学习中很常见的二元分类器。很多二元分类器会产生一个概率预测值,而不仅仅是0-1预测值。我们可以使用某个临界点(例如0.5),以划分哪些预测为1,哪些预测为0。得到二元预测值后,可以构建一个混淆矩阵来评价二元分类器的预测效果。所有的训练数据都会落入这个矩阵中,而对角线上的数字代表了预测正确的数目,即True Positive + False Positive。分类器的训练参数和临界点的选择是影响TPR和FPR的因素。
install.packages("pROC")
install.packages("ggplot2")
library(pROC)
library(ggplot2)
#建立曲线
data(aSAH)
rocobj1 <- roc(aSAH$outcome, aSAH$s100b)
rocobj2 <- roc(aSAH$outcome, aSAH$wfns)
rocobj3 <- roc(aSAH$outcome, aSAH$ndka)
#计算full AUC
auc(rocobj1)
auc(rocobj2)
auc(rocobj3)
#绘制曲线
plot(rocobj1)
#其他参数美化(自定义网络线颜色等等)
plot(rocobj1, print.auc=TRUE, auc.polygon=TRUE, grid=c(0.1, 0.2), grid.col=c("green", "red"), max.auc.polygon=TRUE,
auc.polygon.col="skyblue", print.thres=TRUE)
# 计算partial AUC选择关注(sp或se)一定范围的数据
plot(rocobj1, print.auc=TRUE, auc.polygon=TRUE, partial.auc=c(1, 0.8), partial.auc.focus="sp", grid=c(0.1, 0.2), grid.col=c("green", "red"), max.auc.polygon=TRUE, auc.polygon.col="skyblue", print.thres=TRUE, reuse.auc=FALSE)
#比较两个曲线,pROC提供三种方法比较“delong”, “bootstrap”或“venkatraman”
roc.test(rocobj1, rocobj2, method="bootstrap")
#ggroc(功能仍在测试中)绘制Multiple curves
g3 <- ggroc(list(s100b=rocobj, wfns=rocobj2, ndka= rocobj3))
g3
当然可以自定义参数,绘出符合自己需要的图型。附上参考文献中发表的ROC图: