如果没有时间精力学习代码,推荐了解:零代码数据挖掘课程

pROC package

以下是本包中常用的一些缩写

ROC: receiver operating characteristic,ROC曲线

AUC: area under the ROC curve,曲线下面积

pAUC: partial area under the ROC curve 部分曲线下面积

CI: confidence interval 可信区间

SP: specificity 特异度

SE: sensitivity 灵敏度

require(pROC)

data(aSAH)

if(!require(DT)) install.packages(DT)

DT::datatable(aSAH)

aSAH[1:5,1:5]

image.png

roc函数建立roc曲线

支持在管道中运行

参数分别为data, event, predict marker

library(dplyr)

aSAH %>%

filter(gender == "Female") %>%

roc(outcome, s100b)

Call:

roc.data.frame(data = ., response = outcome, predictor = s100b)

Data: s100b in 50 controls (outcome Good) < 21 cases (outcome Poor).

Area under the curve: 0.72

coords函数中筛选有效的的坐标

transpose参数指返回值的格式,FALSE 为row

这样筛选出了敏感度和特异度>0.6的坐标

library(dplyr)

aSAH %>%

filter(gender == "Female") %>%

roc(outcome, s100b) %>%

coords(transpose=FALSE) %>%

filter(sensitivity > 0.6,

specificity > 0.6)

threshold specificity sensitivity

1 0.155 0.68 0.6666667

2 0.165 0.74 0.6666667

3 0.175 0.76 0.6666667

4 0.185 0.78 0.6666667

5 0.215 0.80 0.6666667

6 0.245 0.82 0.6666667

7 0.255 0.82 0.6190476

建立roc 对象的方法

# Build a ROC object and compute the AUC

roc(aSAH$outcome, aSAH$s100b)

roc(outcome ~ s100b, aSAH)

建立光滑曲线

# Smooth ROC curve

roc(outcome ~ s100b, aSAH, smooth=TRUE)

Call:

roc.formula(formula = outcome ~ s100b, data = aSAH, smooth = TRUE)

Data: s100b in 72 controls (outcome Good) < 41 cases (outcome Poor).

Smoothing: binormal

Area under the curve: 0.74

可信区间与绘图

# more options, CI and plotting

roc1

aSAH$s100b, percent=TRUE,

# arguments for auc

partial.auc=c(100, 90), partial.auc.correct=TRUE,

partial.auc.focus="sens",

# arguments for ci

ci=TRUE, boot.n=100, ci.alpha=0.9, stratified=FALSE,

# arguments for plot

plot=TRUE, auc.polygon=TRUE, max.auc.polygon=TRUE, grid=TRUE,

print.auc=TRUE, show.thres=TRUE)

## 在原有图形上继续绘制

roc2

plot=TRUE, add=TRUE, percent=roc1$percent)

image.png

找出感兴趣的坐标

## Coordinates of the curve ##

coords(roc1, "best", ret=c("threshold", "specificity", "1-npv"),transpose = FALSE

)

coords(roc2, "local maximas", ret=c("threshold", "sens", "spec", "ppv", "npv"),transpose = FALSE)

threshold sensitivity specificity ppv npv

local.maximas -Inf 100.00000 0.00000 36.28319 NaN

local.maximas.1 1.5 95.12195 51.38889 52.70270 94.87179

local.maximas.2 2.5 65.85366 79.16667 64.28571 80.28169

local.maximas.3 3.5 63.41463 83.33333 68.42105 80.00000

local.maximas.4 4.5 43.90244 94.44444 81.81818 74.72527

local.maximas.5 Inf 0.00000 100.00000 NaN 63.71681

计算AUC可信区间

# CI of the AUC

ci(roc2)

95% CI: 74.85%-89.88% (DeLong)

plot在原有图形上增加

add=TRUE参数

roc1

aSAH$s100b, percent=TRUE,

# arguments for auc

partial.auc=c(100, 90), partial.auc.correct=TRUE,

partial.auc.focus="sens",

# arguments for ci

ci=TRUE, boot.n=100, ci.alpha=0.9, stratified=FALSE,

# arguments for plot

plot=TRUE, auc.polygon=TRUE, max.auc.polygon=TRUE, grid=TRUE,

print.auc=TRUE, show.thres=TRUE)

plot(roc2, add=TRUE)

image.png

比较AUC

看是否有统计学意义

# Test on the whole AUC

roc.test(roc1, roc2, reuse.auc=FALSE)

DeLong's test for two correlated ROC curves

data: roc1 and roc2

Z = -2.209, p-value = 0.02718

alternative hypothesis: true difference in AUC is not equal to 0

sample estimates:

AUC of roc1 AUC of roc2

73.13686 82.36789

绘制ROC曲线-基于ggplot2

创建roc对象

ggroc绘图

# Create a basic roc object

data(aSAH)

rocobj

rocobj2

绘图

基础绘图

library(ggplot2)

g

g

image.png

美化参数设置

ggroc(rocobj, alpha = 0.5, colour = "red", linetype = 2, size = 2)

image.png

支持gglot2语法的美化

# You can then your own theme, etc.

g + theme_minimal() + ggtitle("My ROC curve") +

geom_segment(aes(x = 1, xend = 0, y = 0, yend = 1), color="grey", linetype="dashed")

image.png

修改横纵坐标

# And change axis labels to FPR/FPR

gl

gl

gl + xlab("FPR") + ylab("TPR") +

geom_segment(aes(x = 0, xend = 1, y = 0, yend = 1), color="darkgrey", linetype="dashed")

image.png

image.png

绘制多条曲线

ggroc以list格式包裹roc对象

# Multiple curves:

g2

g2

image.png

也可先构建好公式,再绘制

# This is equivalent to using roc.formula:

roc.list

g.list

g.list

image.png

美化修改

size设置线条粗细

alpha设置透明度

# with additional aesthetics:

g3

g3+ggsci::scale_color_lancet()

image.png

改变参数

aes即按什么属性进行区分

g4

g4

image.png

按多种属性区分ROC曲线

# changing multiple aesthetics:

g5

g5

image.png

分面绘制ROC曲线

# OR faceting

g.list + facet_grid(.~name) + theme(legend.position="none")

image.png

所有曲线有相同颜色

group参数

# To have all the curves of the same color, use aes="group":

g.group

g.group

g.group + facet_grid(.~name)

image.png

我是白介素2,本期内容就到这里,下期再见。

roc图 r语言_R语言pROC包绘制ROC曲线相关推荐

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

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

  2. R语言使用pROC包绘制ROC曲线、获取最优阈值(threshold)及最优阈值对应的置信区间

    R语言使用pROC包绘制ROC曲线并获取最佳阈值(threshold)及最佳阈值对应的置信区间 #ROC曲线 ROC(receiver operating characteristic curve)接 ...

  3. R语言使用pROC包绘制ROC曲线并使用smooth函数绘制平滑的ROC曲线(方法包括:binormal、density、fitdistr、logcondens、logcondens.smooth)

    R语言使用pROC包绘制ROC曲线并使用smooth函数绘制平滑的ROC曲线(方法包括:binormal.density.fitdistr.logcondens.logcondens.smooth) ...

  4. 偏AUC(partial AUC)或者部分AUC是什么?R语言使用pROC包绘制ROC曲线并定义偏AUC(partial AUC):分别聚焦特异度、敏感度角度

    偏AUC(partial AUC)或者部分AUC是什么?R语言使用pROC包绘制ROC曲线并定义偏AUC(partial AUC):分别聚焦特异度.敏感度角度 目录

  5. R语言构建logistic回归模型并评估模型:模型预测结果抽样、可视化模型分类预测的概率分布情况、使用WVPlots包绘制ROC曲线并计算AUC值

    R语言构建logistic回归模型并评估模型:模型预测结果抽样.可视化模型分类预测的概率分布情况.使用WVPlots包绘制ROC曲线并计算AUC值 目录

  6. R使用pROC和ggplot2包绘制ROC曲线

    R使用ggplot2包绘制ROC曲线 目录 R使用ggplot2包绘制ROC曲线 logistic回归模型构建 使用pROC包

  7. roc图 r语言_浅谈ROC曲线-R语言

    原文链接:https://www.r-bloggers.com/lang/chinese/1205​www.r-bloggers.com 机器学习中很常见的一个大类就是二元分类器.很多二元分类器会产生 ...

  8. 包r语言_R语言交互式可视化包CanvasXpress

    CanvasXpress包简介 CanvasXpress核心是一个JavaScript语言编写的库,主要用于可重复研究. 在R中可以安装canvasXpress包,使用canvasXpress命令绘制 ...

  9. java集成r语言_R语言- 实验报告 - 利用R语言脚本与Java相互调用

    一.实训内容 利用R语言对Java项目程序进行调用,本实验包括利用R语言对java的.java文件进行编译和执行输出. 在Java中调用R语言程序.本实验通过eclipse编写Java程序的方式,调用 ...

最新文章

  1. 面试中多说这么一句话,薪水直接涨5k
  2. Python --金字塔
  3. linux 服务器 安装网卡驱动,linux下安装编译网卡驱动的方法
  4. Deep Learning for Computer Vision with MATLAB and cuDNN
  5. midaspay能删除吗_midasPay返回90009错误
  6. 伺服驱动器的 三环控制 电流环 速度环 位置环
  7. Python 第三方模块之 numpy.random
  8. 苹果屏幕上的小圆点_苹果或明年部署miniLED屏幕 最早用在Macbook上
  9. WinAPI: PolylineTo - 绘制一组连续线段(更新当前位置)
  10. python将一个文件的内容写入另一个文件_Python3中如何将文件中两个关键词中的信息写入到另一文件?...
  11. 曾经辉煌无限,如今员工持续大量流失,集团目前仅剩10余人
  12. “做实体店,已经是绝路了吗?”
  13. x79服务器主板装系统,【小白经历分享】华南X79 E5 2670+470D 成功装上双系统 【win10+Sierra10.12.6】...
  14. 绑定点击事件调用百度微信分享
  15. 在MySQL中group by 是什么意思
  16. 揭秘 2023 年 Navicat 两大重磅功能 Redis + OceanBase 发布计划
  17. [问题已处理]-k8s出现Evicted状态
  18. Django 1.9 支持中文
  19. 在德国观看中文视频的免费网站总结--涵盖几乎中文各类所有视频
  20. 网站右侧广告悬浮代码html,js网站广告悬浮代码

热门文章

  1. HC-05蓝牙模块学习(两个蓝牙模块连接互发信息)
  2. MathJax笔记-精简打印版
  3. 截取url中的ip(ipv4和ipv6)
  4. 我啊,程序员啊程序员
  5. 去掉文件夹最大化时豪杰V8的播放按钮
  6. Android学习笔记之清单文件
  7. idea从零到精通01之idea下载和安装
  8. 百度网盘配合插件脚本使用IDM下载设置
  9. 密码加密之bcrypt
  10. undefined reference to `__isoc99_sscanf‘