cover_image

#方法杂谈# ROC曲线含义及绘制。

白衣卿相 生信杂谈
2017年05月15日 15:54

ROC(Receiver Operating Characteristic)翻译为”接受者操作特性曲线”。曲线由两个变量1-specificity(1-FPR,FPR = FP / (FP + TN))Sensitivity (TPR = TP / (TP + FN)) 绘制。

-预测正确预测错误
实际正确True Positive(TP)False Negative(FN)
实际错误False Positive(FP)True Negative(TN)
此外,ROC曲线还可以用来计算“均值平均精度”(mean average precision),这是当你通过改变阈值来选择最好的结果时所得到的平均精度(PPV)。

  更好地理解ROC曲线,我们使用具体的实例来说明:如在医学诊断中,判断有病的样本。那么尽量把有病的揪出来是主要任务,也就是第一个指标TPR,要越高越好。而把没病的样本误诊为有病的,也就是第二个指标FPR,要越低越好

  不难发现,这两个指标之间是相互制约的。如果某个医生对于有病的症状比较敏感,稍微的小症状都判断为有病,那么他的第一个指标应该会很高,但是第二个指标也就相应地变高。最极端的情况下,他把所有的样本都看做有病,那么第一个指标达到1,第二个指标也为1。

  我们以FPR为横轴,TPR为纵轴,得到ROC空间。AUC值为ROC曲线所覆盖的区域面积,显然,AUC越大,分类器分类效果越好。

  AUC = 1,是完美分类器,采用这个预测模型时,不管设定什么阈值都能得出完美预测。绝大多数预测的场合,不存在完美分类器。

  0.5 < AUC < 1,优于随机猜测。这个分类器(模型)妥善设定阈值的话,能有预测价值。

  AUC = 0.5,跟随机猜测一样(例:丢铜板),模型没有预测价值。

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

下面是R实例:

# ROC曲线:rm(list=ls())library(MASS)
data(cats)
head(cats)

图片

3列分别是Sex(性别)、Bwt(体重)、Hwt(心脏重量),使用catTools绘制ROC曲线并计算AUC面积:

# 使用caTools绘制ROC曲线并计算ROC曲线面积AUC:
library(caTools) colAUC(cats[,2:3],cats[,1],plotROC = T)

图片

AUC面积为:

图片

当然也可以使用ROCR包绘制并计算AUC的面积:

# 使用ROCR绘制ROC曲线:library(ROCR)
pred <- prediction(cats[,2:3], cbind(cats[,1],cats[,1]));
perf <- performance(pred,"tpr","fpr");
plot(perf,colorize=TRUE);

图片

###计算曲线下的AUC即面积
auc<-  performance(pred,"auc");
# Bwt的面积:slot(auc,"y.values")[[1]] # 结果为0.83
# Hwt的面积:
slot(auc,"y.values")[[2]] #结果为0.76
  两次结果是一样的,即 Bwt和Hwt的AUC面积都在(0.5,1)之间,因此,cats的数据集是一个真是有效的数据集,并且通过Bwt(体重,ACU=0.83)预测性别比通过Hwt(心脏重量,AUC=0.76)要准确一点。
更多原创精彩内容敬请关注生信杂谈:

图片


继续滑动看下一个
生信杂谈
向上滑动看下一个