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<AUC<1 优于随机分类器

0<AUC<0.5 差于随机分类器

 

 

 

 

 

 

 

 

根据预测和真实结果就有了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<1,优于随机猜测。

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

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

 

用ggplot2 画ROC 

Logistic Regression逻辑回归时我们用来拟合二分类变量的回归模型。要评估一个逻辑回归模型有多么fits数据集,可以通过Sensitivity、Specificity评估

Sensitivity  真实positive预测为positve的概率

Specificity 真实negative 预测为negative的概率

简单可视化这两个metrics,就可以通过ROC曲线,这可以展示一个逻辑回归模型的sensitivity和specificity的图

 

 

 

 

生存曲线的ROC  

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) # row.names 赋值为向量或数字表示在表中第几列作为row.name(注意不能重复)
#check.names=F 不检查变量的names
glimpse(rt)

pdf(file="ROC.pdf",width = 7,height =7) #pdf 启动图形设备程序来生成pdf格式的图。 par(oma=c(0.5,1,0,1),font.lab=1.5) #par 设置图形参数 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) #指定截距intercept,斜率slope在图上添加直线 dev.off() #关掉当前绘图设备,保存图像

 

 

 

 

pdf(file="ROC.pdf",width = 7,height =7) #pdf 启动图形设备程序来生成pdf格式的图。
par(oma=c(0.5,1,0,1),font.lab=1.5) #par 设置图形参数
roc=survivalROC(Stime = rt$futime,status = rt$fustat,marker = rt$expression,predict.time = 3,method="KM")
  Stime 事件时间或审查使劲啊
  status 状态指示符,死亡或事件为1,否则是0
  marker 预测变量或标记值(Predictor or marker value)
  predict.tame ROC曲线的时间点
  method 拟合(marker,t)联合分布的方法,可以是KM或NNE,默认是NNE
返回结果 >roc  
cut.values 用于计算TP和FP的marker值
TP 根据cutoff 判断的True positive 真阳性
FP 根据cutoff 判断的假阳性
predict.time 感兴趣的时间截点:5年,3年等
Survival: kaplan-meier法的预估生存事件
AUC:Area under ROC, 时间截点的曲线下面积

 

 


  

posted on 2022-03-12 19:32  BioinformaticsMaster  阅读(270)  评论(0编辑  收藏  举报

导航