ROC R脚本


AUC ROC

 

ROC: receivers operating characteristic curve,是一种坐标图式的分析工具,是一个二元分类模型(0/1),输出结果只有两种类别的模型。如阳性/阴性,有病/没病,垃圾邮件/非垃圾邮件。

预测错误:针对正样本而言,即预测是正样本,但预测错了FP

输出结果标签0/1 取决于输出的概率预计预定的概率阈值, 这个阈值决定了预测为正负样本的概率如:

  常见阈值是0.5,大于0.5认为是正样本,反之为负样本。

  增大阈值,则预测错误FP的概率会降低,但预测正确的概率TP也降低

  减小阈值,预测正确概率会升高,但预测错误概率也升高

希望阈值怎样,分类尽可能正确,要衡量分类能力,用ROC:

  横轴:False Positive Rate (假阳率,FPR) :1-特异性

  纵轴:True Positive Rate (真阳性率,TPR)/Sensitivity/Recall 

 

ROC 曲线面积不大于1,横纵坐标在[0,1]区间,极端情况:

 (0,0)假阳性率、真阳性率 都是0,分类器都预测为负样本

 (0,1)真阳性率为1,理想情况,全部完美预测正确

 (1,0)假阳性率为1,全部完美预测错误

  (1,1) 假阳性率和真阳率都是1,分类器全部预测成正样本

  TPR=FPR,斜对角线,预测为正样本的结果一半是对,一半是错,代表随机分类器

因此,ROC曲线在斜对角线以下,表示分类器效果差于随机分类器,反之效果好于随机分类器,理想情况是尽可能在斜对角线之上,偏向(0,1)

那么AUC (Area under the ROC curve) 即ROC曲线下的面积,代表了分类能力,越大表示分类效果越好

AUC=1, 完美分类器

0.5

0

如

 

 

 

 

 

根据预测和真实结果就有了TP(真阳性),FP(假阳性),TN,FN

TP True positive 真阳性(真阳率) 正样本预测为正样本的个数

FP 假阳性(假阳率) 与测试正样本,预测错了

TN 真阴性 预测是负样本,预测对了

FN 假阴性 预测是负样本,预测错了

 

Recall/召回率/ True positive rate/TPR/ Sensitivity/灵敏度/敏感性/查全率  指真集样本有多少预测正确了 

  R=TP/(TP+FN)    

 Precison/PPV/精确率/查准率   指预测为正的样本有多少是对的

  P=TP/(TP+FP)

Specificity/特异性  样本中真集负样本被预测为负类的比例 

  TN/(TN+FP)

 

AUC: Area under the Curve of ROC(AUC ROC)

AUC=1,完美分类器

0.5

AUC=0.5,跟随机猜测一样,模型没有预测价值。

AUC<0.5,比随机预测还差,但只要总反预测而行,就优于随机预测。

 

 

SurvivalROC包绘制 时间依赖的ROC曲线,包含Kaplan-Meier(KM) 、Nearest Neighbor Estimation(NNE)两种方法

 

 library(survivalROC)
setwd("~/Documents/materials/statistics/taobao_xueshu/R资料/R")
 rt<-read.table('./20.ROC/input.txt',header=T,sep = "\t",check.names = F,row.names = 1)
glimpse(rt)

pdf(file="ROC.pdf",width = 7,height =7) par(oma=c(0.5,1,0,1),font.lab=1.5) roc=survivalROC(Stime = rt$futime,status = rt$fustat,marker = rt$expression,predict.time = 3,method="KM") plot(roc$FP,roc$TP,xlim=c(0,1),ylim = c(0,1),col="red",xlab="False positive rate",ylab="True positive rate",main = paste("ROC curve (","AUC=",round(roc$AUC,3),")"),lwd=2,cex.main=1.3,cex.lab=1.2,cex.axis=1.2,font=1.2) abline(0,1) dev.off()