两个知名R包产生的矛盾嗨!大家好,我是一棵树,这是我第一次在解螺旋发文,还是蛮激动的。下面就开始吧!今天的主题是:ROC分析时一定要告诉R分析谁
用到的软件是:R语言
用到的R包是:pROC和ROCit1. 安装R包

install.packages('pROC')
install.packages('ROCit')

2. 构建数据我们先构建2个连续变量score1和score2,1个2分类变量class。class变量有2个数值0和1,0代表阴性结果,1代表阳性结果。

score1=c(0.830410619,0.455829518,0.058478492,0.729325234,0.831480755,0.134660431,0.695320049,0.662420877,0.528904992,0.371757106,0.87803265,0.705919705,0.740182936,0.060545256,0.891066853,0.568020037,0.379067286)
score2=c(0.376703255,0.694968207,0.066650344,0.261298118,0.079832816,0.005758134,0.433320986,0.211177625,0.68847034,0.085216767,0.452439458,0.054711128,0.719909102,0.653851262,0.500626397,0.380789783,0.430002115)
class=c(1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0)

3. 常规的ROC分析现在,我们来做score1和class的ROC分析,看一下他们的AUC。使用pROC包

pROC::roc(predictor = score1,response = class)## Setting levels: control = 0, case = 1## Setting direction: controls #### Call:## roc.default(response = class, predictor = score1)#### Data: score1 in 10 controls (class 0) ## Area under the curve: 0.4714

使用ROCit包

ROCit::rocit(score = score1,class = class)$AUC## [1] 0.4714286

两个包的AUC结果一致,都是0.4714。这种做法也是我们常规的做法。4. 不一致的ROC分析结果奇怪的事情马上就要发生了!
现在,我们再对score2和class做ROC分析,看一下他们的AUC。使用pROC包

pROC::roc(predictor = score2,response = class)## Setting levels: control = 0, case = 1## Setting direction: controls > cases#### Call:## roc.default(response = class, predictor = score2)#### Data: score2 in 10 controls (class 0) > 7 cases (class 1).## Area under the curve: 0.6857

使用ROCit包

ROCit::rocit(score = score2,class = class)$AUC## [1] 0.3142857

这个时候pROC包计算的AUC是0.6857,而ROCit包计算的结果是0.3142,两个差别很大啊。这是咋回事?相同的命令,换个数据结果就不一样了?5. 为什么2个包的结果会矛盾我们再回头看,使用pROC包分析score1和class时,有这样一段提示

## Setting direction: controls 

同样使用pROC包分析score2和class时,也有这样一段提示

## Setting direction: controls > cases

同样的class,两次计算的方向竟然不同,第一次是controls < cases,而第二次是controls > cases,这个是什么意思呢?controls < cases:表示controls组的中位数小于cases组的中位数,pROC包对cases组进行ROC分析,计算cases组的AUC。
controls > cases:表示controls组的中位数大于cases组的中位数,pROC包对controls组进行ROC分析,计算controls组的AUC。

我们先来看一下score1在class两组的中位数。

c(controls=median(score1[class==0]),
 cases=median(score1[class==1]))##  controls     cases## 0.6152205 0.6953200

再来看一下score2在class两组的中位数。

c(controls=median(score2[class==0]),
 cases=median(score2[class==1]))##  controls     cases## 0.4412208 0.2612981

谜底终于揭开:pROC包在自动进行ROC分析的时候,是根据两组中位数的大小来决定分析哪组的,谁的中位数大,就分析谁,就计算谁的AUC!6. 带来的问题这样会带来很严重的问题!
很多时候,我们进行ROC分析时,默认都是去计算class=1那组,也就是阳性组的AUC,而class=0,被我们默认当成了阴性组,也就是参考组。在ROCit包中就是这样的,但是在大名鼎鼎的pROC包中,ROC分析的依据却是中位数的大小。这一点千万要注意。
如果你用pROC包做ROC分析,那么接下来的AUC和cutoff value都是要注意的,如果你不事先设置参考,得到的结果可能就搞不清楚是阴性组的AUC还是阳性组的AUC,仅仅是中位数高的那组的AUC,而你默认都是当成阳性组的AUC。千万要注意这一点!7. 告诉R去ROC谁在pROC::roc()函数中,有2个参数是需要我们设置的levels和direction,levels表示结局变量中的数值水平,direction的值是大于号>或小于号
现在我们给levels赋值0和1,direction赋值小于号

pROC::roc(predictor = score2,response = class,
         levels = c(0,1),
         direction=')#### Call:## roc.default(response = class, predictor = score2, levels = c(0,     1), direction = "#### Data: score2 in 10 controls (class 0) ## Area under the curve: 0.3143

这个时候得到结果0.314,和ROCit包的结果一致了。

在ROCit::rocit()函数中,我们通过给negref参数赋值0,设置ROC分析的阴性参考。

ROCit::rocit(score = score2,class = class,1
            negref = 0)$AUC## [1] 0.3142857

8.总结ROC分析时一定要设置结局的阴性参考!
ROC分析函数,不提供设置参考的参数,可以考虑丢弃了!

快,关注这个公众号,一起涨姿势~

r roc函数_一棵树专栏 | ROC分析时一定要告诉R分析谁相关推荐

  1. R语言使用pROC包绘制ROC曲线实战:roc函数计算AUC值、plot.roc函数绘制ROC曲线、添加置信区间、为回归模型中的每个因子绘制ROC曲线并在同一个图中显示出来

    R语言使用pROC包绘制ROC曲线实战:roc函数计算AUC值.plot.roc函数绘制ROC曲线.添加置信区间.为回归模型中的每个因子绘制ROC曲线并在同一个图中显示出来 目录

  2. r roc函数_如何处理R(pROC包)中的多类ROC分析?

    例如,当我在R(pROC包)中使用multiclass.roc函数时,我训练了随机森林的数据集,这是我的代码: # randomForest & pROC packages should be ...

  3. R count函数_第477期|R语言绘图之图形组合

    科研作图/科研文章为了节省版面,我们通常会将多张图片合成一张图,本次分享将向大家展示如何使用R语言进行图形组合.早已闻cowplot大名,但是不知道它的具体目标是什么,本文也会对其重点介绍. < ...

  4. pythonrequest函数_[Python]requests模块:HTTP请求时的回调函数

    前排提醒! 本文并非是"零起点"的.阅读下列文档之前,请保证你具有以下的知识: 了解requests和grequests模块,并能够使用其建立HTTP请求: 了解回调函数的含义. ...

  5. r roc函数_画ROC曲线的R包总结

    原标题:画ROC曲线的R包总结 作者: Joseph Rickert 原文链接: https://rviews.rstudio.com/2019/03/01/some-r-packages-for-r ...

  6. R count函数_[R learning]-0018-R语言绘图基础, 画了一天,不妨进来看看~

    =================== = 个人练习R语言的笔记 = = 跟我一起来 Coding⑧! = =================== 0018-R语言绘图基础 2020-07-29更新: ...

  7. python画平面直角坐标系_一棵树-可视化之图形化基础之向量

    作者:肖剑华 可视化是前端可视化 图形是计算机图形学 向量就是那个向量,高中学过的,你懂的 树是那棵贼丑的树 结果 首先先看看本文最终的结果. 是不是贼丑!是不是能在画展上卖个好价格! 过程 好了,话 ...

  8. R count函数_【函数分享】PHP函数str_word_count()分享(202098)

    每日分享PHP知识点,大家都赞同关注是一种动力,分享是一种美德,再说了关注分享一下又不会怀孕?只要你开心就好......  str_word_count()  返回字符串中单词的使用情况. mixed ...

  9. R count函数_R最快且比dplyr最高效的大数据处理R包:tidyfst

    R最快且比dplyr最高效的大数据处理R包:tidyfst​mp.weixin.qq.com 写在前面 本包开发者黄天元: 首先我对tidyfst进行了一套完整的学习,因为这里面的函数并不多,满打满计 ...

最新文章

  1. QueryString的用法
  2. 每个人都有一个“内外引擎”
  3. 8.文本处理(编码解码/文件操作)
  4. Java第三大的数,Java通过排序找出数组第三大数字
  5. 19-Realm Management Extension (RME)
  6. 写给游戏编程自学者的入门指南
  7. oracle 11g12c(pdbcdb)系统巡检
  8. Web Server 和 HTTP 协议
  9. 图像处理形态学椭圆形模板结构元素的设计与实现
  10. Qt抽奖圆盘(减速效果)
  11. python爬取金庸小说全集
  12. 遥感图像通用数据格式(BSQ\BIL\BIP)的理解
  13. 学到了林海峰,武沛齐讲的Day14完
  14. php邮件群发系统日发5000,最新qq邮件群发日发10000封邮件
  15. ROSIntegration ROSIntegrationVision与虚幻引擎4(Unreal Engine 4)的配置
  16. 双软企业认定(软件产品/软件企业认定)
  17. C++普通函数指针和类成员函数指针
  18. word被加密不能编辑如何破解
  19. Qt添加菜单栏和工具栏
  20. WebGL 3D 电信机架实战之数据绑定

热门文章

  1. Git如何修改文件夹看不清的蓝色显示
  2. 监控操作系统和服务器,LoadRunner如何监控不同操作系统的服务器?
  3. MySQL 中ANALYZE [LOCAL NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ...
  4. mysql哪些_初学MySQL哪些需要你知道
  5. java引用变量_java代码声明引用变量经验
  6. 动态规划走楼梯_负重爬楼梯、过草地,服贸会六足机械人展示“送水到家”
  7. 【Java】字符串转Unicode字符串
  8. CentOS6.5 将安装光盘作为yum源
  9. qt linux 鼠标事件,QT学习笔记5:QMouseEvent鼠标事件简介
  10. lyapunov指数 matlab计算_Matlab学习笔记1——B站台大课