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, 时间截点的曲线下面积
本文来自博客园,作者:BioinformaticsMaster,转载请注明原文链接:https://www.cnblogs.com/koujiaodahan/p/15998149.html
posted on 2022-03-12 19:32 BioinformaticsMaster 阅读(270) 评论(0) 编辑 收藏 举报