ROC及曲线面积汇总学习

目录

ROC基础

生成模拟数据

率的计算

R语言计算测试

ROCR:

pROC

ROC绘制

单个ROC

两个ROC

Logistic回归的ROC曲线

timeROC

ROC基础

ROC曲线的横坐标是假阳性,纵坐标是真阳性需要的结果是这个率表示疾病阳性的率(而不能误算为阴性的率)

ROC阳性结果还是阴性结果?_roc曲线计算阳性阴性预测值-CSDN博客

生成模拟数据
rm(list = ls())
set.seed(1234)
#模拟数据
ca125 <- c(rnorm(10,80,20),rnorm(20,50,10))
##前10个均值为80,标准差为20的正态分布数据,后20个均值为50,标准差为10的正态分布随机数
group <- c(rep(c("肿瘤","非肿瘤"),c(10,20)))#
data <- data.frame(ca125,group)

head(data)

      ca125 group
1  55.85869  肿瘤
2  85.54858  肿瘤
3 101.68882  肿瘤
4  33.08605  肿瘤
5  88.58249  肿瘤
6  90.12112  肿瘤
率的计算
#设置ca125>60,判断为肿瘤
data$pre <- ifelse(data$ca125 > 60,"猜他是肿瘤","猜他不是肿瘤")
#列联表
table(data$group,data$pre)猜他不是肿瘤 猜他是肿瘤
非肿瘤           19          1
肿瘤              2          8

根据这个四格表我们就能算出目前的真阳性率和假阳性率:

真阳性率:猜他是肿瘤猜对的人数 / 所有肿瘤人数
假阳性率:猜他是肿瘤猜错的人数 / 所有非肿瘤人数

真阳性率 = 8 / (2+8) = 0.8  
假阳性率 = 1 / (19+1) = 0.05  

如果目标结果是确定非肿瘤患者:

假阳性率:猜他不是肿瘤猜错的人数 / 所有肿瘤人数
真阳性率:猜他不是肿瘤猜对的人数 / 所有非肿瘤人数

假阳性率 = 2 / (2+8) = 0.2
真阳性率 = 19 / (19+1) = 0.95  

R语言计算测试

R语言计算AUC(ROC曲线)的注意事项_r语言auc-CSDN博客

ROCR:

ROCR默认计算顺序靠后的类别的AUC。如果提供给labels的值是有序因子型变量,则排在前面的默认是阴性结果(negtive),排在后面的默认是阳性结果(positive),默认计算阳性结果(排序靠后)的AUC。如果是无序因子、数值、字符、逻辑型变量,会按照R语言的默认排序,比如按照数字大小、首字母顺序等,也是计算排序靠后的类别的AUC。


set.seed(20220840)
ca125_1 <- c(rnorm(10,80,20),rnorm(20,50,10))
ca125_2 <- c(rnorm(10,20,20),rnorm(20,70,10))
class=c(rep(1:0,c(10,20)))tumor <- c(rep(c("癌症","非癌症"),c(10,20)))df <- data.frame(`class`=class,`ca125_1`=ca125_1,`ca125_2`=ca125_2,`tumor`=tumor)
library(ROCR)pred <- prediction(predictions = ca125_1, # 预测指标labels = tumor # 真实结果)performance(pred, "auc")@y.values[[1]]
# [1] 0.075

这里我们想计算癌症的AUC,而不是非癌症的AUC,手动指定顺序!

pred <- prediction(predictions = ca125_1, # 预测指标labels = tumor # 真实结果,label.ordering = c("非癌症","癌症") # 此时就是计算癌症的AUC)performance(pred, "auc")@y.values[[1]]
## [1] 0.925
pROC

pROC包计算AUC也需要用来预测结果的指标以及真实结果。

这个包计算pROC略有不同,它是根据中位数来的,谁的中位数大,就计算谁的AUC,比如我们的这个例子,计算下中位数看看:

ca125_1

# 把ca125_1按照tumor的两个类别进行分组,然后分别计算中位数
tapply(ca125_1, tumor, median)
##     癌症   非癌症 
## 81.34426 49.99926(肿瘤的均值大)library(pROC)
roc(response=tumor, predictor=ca125_1)
#Area under the curve: 0.925(计算结果为癌症的)

ca125_2:是计算非癌症的AUC。

tapply(ca125_2, tumor, median)
##     癌症   非癌症 
## 13.52771 69.69272(非肿瘤的平均数大)roc(response=tumor, predictor=ca125_2)
Data: ca125_2 in 10 controls (tumor 癌症) < 20 cases (tumor 非癌症).
Area under the curve: 0.9
#需要设置levels和direction
# 此时计算的就是癌症的AUC
roc(response=tumor, predictor=ca125_2,levels=c("非癌症", "癌症"), # 这个顺序随便设定,重要的是directiondirection = "<" # 手动设定非癌症 < 癌症
)
#Data: ca125_2 in 20 controls (tumor 非癌症) < 10 cases (tumor 癌症).
#Area under the curve: 0.1

ROC绘制

各章示例代码/Chapter13 临床诊断实验评价.R · 杨敏迪/Analysis of Medical data by R language - 码云 - 开源中国 (gitee.com)

单个ROC

数据为动脉瘤性蛛网膜下腔出血患者的检测数据和预后:s100b是一个血清指标,outcome根据格拉斯哥评分分为good(4-5分:这里最大为5) 、poor(1-3分)

rm(list = ls())
library(pROC)
data(aSAH)
roc1 <- roc(outcome ~ s100b, data = aSAH)
attributes(roc1)#查看结果包含内容
roc1$auc#
#Area under the curve: 0.7314
> #求约登指数
> roc.result <- data.frame(threshold = roc1$thresholds,
+                          sensitivity = roc1$sensitivities,
+                          specificity = roc1$specificities)
> View(roc.result)
> roc.result$youden <- roc.result$sensitivity + roc.result$specificity - 1
> head(roc.result)threshold sensitivity specificity      youden
1      -Inf   1.0000000  0.00000000  0.00000000
2     0.035   0.9756098  0.00000000 -0.02439024
3     0.045   0.9756098  0.06944444  0.04505420
4     0.055   0.9756098  0.11111111  0.08672087
5     0.065   0.9756098  0.13888889  0.11449864
6     0.075   0.9024390  0.22222222  0.12466125
> #找出约登指数最大的一行
> which.max(roc.result$youden)
[1] 18
> roc.result[18, ]threshold sensitivity specificity    youden
18     0.205   0.6341463   0.8055556 0.4397019

绘图

?plot.roc#查看参数细节
plot.roc(roc1, print.auc = TRUE, auc.polygon = TRUE,grid = c(0.1,0.2), grid.col = c("green","red"),auc.polygon.col = "lightblue", print.thres = TRUE)
#AUC的置信区间——DeLong法
ci.auc(roc1)

两个ROC
roc1 <- roc(aSAH$outcome, aSAH$s100b)
roc2 <- roc(aSAH$outcome, aSAH$ndka)
#DeLong非参数方法,Venkatraman回归模型法,bootstrap重抽样法
#默认为DeLong法
#默认为两组相关检测结果AUC的比较
#独立:参数paired = FALSE
roc.test(roc1,roc2)
#绘图
plot(roc1)
lines(roc2, col = "red")
test <- roc.test(roc1, roc2)
text(0.5,0.5, labels = paste("p-value = ",round(test$p.value, 3)))
legend("bottomright",legend = c("S100b", "NDKA"),col = c("1","red"), lwd = 2)

Logistic回归的ROC曲线

二分类变量

data = infert
#建立Logistic回归模型
fit <- glm(case ~ induced + spontaneous, family = binomial, data = infert)
library(epiDisplay)
logistic.display(fit)
#ROC绘制
lroc(fit, line.col = "red", lwd = 2)

timeROC

如何绘制时间依赖性ROC曲线? (qq.com)

参考:

1:《R语言医学数据分析实战》

2:R语言计算AUC(ROC曲线)的注意事项_r语言auc-CSDN博客

3:ROC阳性结果还是阴性结果?_roc曲线计算阳性阴性预测值-CSDN博客

4:各章示例代码/Chapter13 临床诊断实验评价.R · 杨敏迪/Analysis of Medical data by R language - 码云 - 开源中国 (gitee.com)

5:如何绘制时间依赖性ROC曲线? (qq.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/175796.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QT基础开发笔记

用VS 写QT &#xff0c;设置exe图标的方法&#xff1a; 选定工程--》右键--》添加---》资源--》 QString 字符串用法总结说明 Qt QString 增、删、改、查、格式化等常用方法总结_qstring 格式化-CSDN博客 总结来说&#xff1a; QString 的 remove有两种用法&#xff0c;&am…

如何成为一名前端组长?

我认为要管理好前端团队&#xff1a; 本质上&#xff1a;让团队少走弯路&#xff0c;并引领团队走在正确的道路上。 理念上&#xff1a;让团队高效工作、快乐工作。 实施上&#xff1a;要想尽办法给团队、给成员赋能。 个人角度&#xff1a; 角色转变&#xff0c;开发人员 -&g…

【JavaSE】:接口(一)

接口 一.什么是接口二.语法规则三.接口的使用四.实现多个接口五.接口的继承 final关键字 inal修饰的变量&#xff0c;这个变量是不可修改的。final修饰后的方法&#xff0c;禁止子类继承的时候重写方法。final修饰后的类&#xff0c;是禁止被继承的。 super关键字 如果父类(超类…

Spring Boot 实现 PDF 水印,实战来了!

简介 PDF&#xff08;Portable Document Format&#xff0c;便携式文档格式&#xff09;是一种流行的文件格式&#xff0c;它可以在多个操作系统和应用程序中进行查看和打印。在某些情况下&#xff0c;我们需要对 PDF 文件添加水印&#xff0c;以使其更具有辨识度或者保护其版…

JAVA 整合 AWS S3(Amazon Simple Storage Service)文件上传,分片上传,删除,下载

依赖 因为aws需要发送请求上传、下载等api&#xff0c;所以需要加上httpclient相关的依赖 <dependency><groupId>com.amazonaws</groupId><artifactId>aws-java-sdk-s3</artifactId><version>1.11.628</version> </dependency&…

Docker Nginx容器部署vue项目

Docker Nginx容器部署vue项目 文章目录 Docker Nginx容器部署vue项目1. 前提2. 下载nginx镜像3. 编写nginx.conf配置文件4. 编写构建命令5. vue项目上传 1. 前提 Docker服务已部署 2. 下载nginx镜像 首先查看有没有nginx镜像 docker images没有的情况下再进行下载 docker …

Proto3语法详解02

目录 1.默认值 2.更新消息 2.1更新规则 2.2保留字段reserved 2.2.1创建通讯录3.0版本---验证错误删除字段造成的数据损坏 2.3未知字段 2.3.1未知字段从哪获取 3.3.2升级通讯录3.1版本--验证未知字段 2.4前后兼容性 3.选项option 3.1选项分类 3.2常用选项列举 1.默认值…

Python之基础语法和六大数据类型

学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持&#xff0c;想组团高效学习… 想写博客但无从下手&#xff0c;急需…

907. 子数组的最小值之和 --力扣 --JAVA

题目 给定一个整数数组 arr&#xff0c;找到 min(b) 的总和&#xff0c;其中 b 的范围为 arr 的每个&#xff08;连续&#xff09;子数组。 由于答案可能很大&#xff0c;因此 返回答案模 10^9 7 。 解题思路 找到以当前值为最小值所能组成的子数组&#xff1b;若存在两个相同…

app分发平台的费用详细过程

在APP分发平台上进行应用商店收费时&#xff0c;通常包括以下费用&#xff1a; 应用审核费用&#xff1a;为了确保应用的质量和用户体验&#xff0c;应用商店会对上传的应用进行审核&#xff0c;审核费用通常是一次性的。应用推广费用&#xff1a;应用商店为了帮助开发者和发布…

pg truncate

命令选项 TRUNCATE [ TABLE ] [ ONLY ] name [ * ] [, ... ][ RESTART IDENTITY | CONTINUE IDENTITY ] [ CASCADE | RESTRICT ]1.ONLY:只truncate指定的表。当表有继承子表或有子分区时&#xff0c;默认会一起truncate;only可只truncate继承父表。分区父表不能指定only --不…

电机伺服驱动学习笔记(7)待编辑

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤1.引入库2.读入数据 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 例如&#xff1a;…

vue2使用ts vue-class-component

目前&#xff0c;对于Vue3来说&#xff0c;TypeScript的支持已经相当成熟&#xff0c;但公司的老项目一直处于迭代和维护无法从v2重构成v3&#xff0c;并且重构的成本也是很大的一个问题&#xff0c;所以记录一下vue2如何去搭配TypeScript。 目录 一、脚手架创建项目 二、vu…

西南科技大学C++程序设计实验一(C++基础知识)

目录 一、实验目的 二、实验任务 三、预习内容(复习书中前3章内容,说明C++相对于C的扩展有哪些?) 四、问题思考与讨论 一、实验目的 1.熟悉编程环境 2.掌握程序调试方法。 3.熟悉枚举类型、结构体类型等自定义数据类型的使用 4.熟悉函数的定义、说明与使用 5.熟悉引用…

在vue项目中使用vue-video-player播放m3u8视频文件

1.简介 Vue Video Player 是一个基于Vue.js 的视频播放器库&#xff0c;官方API Video.js API docs m3u8是UTF-8编码格式。M3U8是指UTF-8编码的M3U文件&#xff0c;而M3U文件是记录了一个索引纯文本文件&#xff0c;打开它时播放软件并不是播放它&#xff0c;而是根据它的索引…

计算机网络:快速了解网络框架

文章目录 前言一、什么是Internet&#xff1f;1.从具体构成角度什么是协议&#xff1f; 2.从服务角度3小结 二、网络边缘1.采用网络设施面向连接服务&#xff08;TCP&#xff09;2.采用基础设施的无连接服务&#xff08;UDP&#xff09; 三、网络的核心1.电路交换2.分组交换3.分…

时间数据与字符串间相互转换

1. 字符串转成时间 使用datetime.strptime from datetime import datetime start_date "2023-11-28" start_datetime datetime.strptime(start_date, "%Y-%m-%d") print(start_date,start_date) print(start_datetime,start_datetime) print(type(star…

Android : 获取、添加、手机联系人-ContentResolver简单应用

示例图&#xff1a; MainActivity.java package com.example.mygetdata;import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat;import android.Mani…

什么是关系型数据库?

什么是关系型数据库&#xff1f; 关系型数据库&#xff08;RDBMS&#xff09;是建立在关系模型基础上的数据库系统。关系模型是一种数据模型&#xff0c;它表示数据之间的联系&#xff0c;包括一对一、一对多和多对多的关系。在关系型数据库中&#xff0c;数据以表格的形式存储…

Vue项目上线后关闭chroma的vue-devtools调试工具

在项目的main文件中添加如下代码&#xff1a; // 通过设置环境变量 注释生产环境的debug devtools 生产提示 const isDebugMode process.env.NODE_ENV ! production; Vue.config.debug isDebugMode; Vue.config.devtools isDebugMode; Vue.config.productionTip isDebugM…