当前位置: 首页 > news >正文

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)

相关文章:

ROC及曲线面积汇总学习

目录 ROC基础 生成模拟数据 率的计算 R语言计算测试 ROCR&#xff1a; pROC ROC绘制 单个ROC 两个ROC Logistic回归的ROC曲线 timeROC ROC基础 ROC曲线的横坐标是假阳性率&#xff0c;纵坐标是真阳性率&#xff0c;需要的结果是这个率表示疾病阳性的率&#xff08;…...

LeetCode Hot100 35.搜索插入位置

题目&#xff1a; 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 方法&#xff1a;灵神 二分查找 闭区间写法 c…...

Android frameworks 开发总结之八

Quick Settings增加一項 XXX device要求在quick settings中增加一項touch panel. 在/frameworks/base/packages/SystemUI/res/values/config.xml文件中的quick_settings_tiles_default string 中增加touch panel。並在String resource文件中增加顯示的title <!-- The def…...

Cortex-M与RISC-V区别

环境 Cortex-M以STM32H750为代表&#xff0c;RISC-V以芯来为代表 RTOS版本为RT-Thread 4.1.1 寄存器 RISC-V 常用汇编 RISC-V 关于STORE x4, 4(sp)这种寄存器前面带数字的写法&#xff0c;其意思为将x4的值存入sp4这个地址&#xff0c;即前面的数字表示偏移的意思 反之LOA…...

YashanDB入选2023年世界互联网大会领先科技奖成果集《科技之魅》

近日&#xff0c;由深圳计算科学研究院自主研发的“崖山数据库系统YashanDB”入编2023年世界互联网大会领先科技奖成果集《科技之魅》。此次入选&#xff0c;充分彰显了YashanDB在数据库技术领域的突破性创新成果。 《科技之魅》是世界互联网大会领先科技奖的重要成果&#xff…...

C语言基础程序设计题

1.个人所得税计算 应纳税款的计算公式如下&#xff1a;收入<&#xff1d;1000元部分税率为0&#xff05;&#xff0c;2000元>&#xff1d;收入>1000元的部分税率为5&#xff05;&#xff0c;3000元>&#xff1d;收入>2000元的部分税率为10&#xff05;&#xf…...

Spring Boot实现图片上传和展示

Spring Boot实现图片上传和展示 本文将介绍如何使用Spring Boot框架搭建后端服务&#xff0c;实现接收前端上传的图片并保存到resources/images目录下。同时&#xff0c;我们还将展示如何在前端编写一个HTML页面&#xff0c;实现上传图片和从resources/images目录下获取图片并…...

大数据-之LibrA数据库系统告警处理(ALM-37015 Gaussdb进程可用文件句柄资源不足)

告警解释 操作系统环境文件句柄不足时&#xff0c;产生该告警。 告警属性 告警ID 告警级别 可自动清除 37015 严重 是 告警参数 参数名称 参数含义 ServiceName 产生告警的服务名称 RoleName 产生告警的角色名称 HostName 产生告警的主机名 Instance 产生告警…...

大一学编程怎么学?刚接触编程怎么学习,有没有中文编程开发语言工具?

大一学编程怎么学&#xff1f;刚接触编程怎么学习&#xff0c;有没有中文编程开发语言工具&#xff1f; 1、大一刚开始学编程&#xff0c;面对复杂的代码学习非常吃力&#xff0c;很难入门。建议刚接触编程可以先学习中文编程&#xff0c;了解其中的编程逻辑&#xff0c;学编程…...

GoWeb学习-第二天

文章目录 从零开始学Go web——第二天一、安装Go语言二、建立web目录2.1 创建GO语言包目录2.2 创建Go web文件 三、编译并运行Go web应用3.1 编译并运行3.2 查看结果 从零开始学Go web——第二天 ​ 第一天我们了解了与web息息相关的HTTP协议&#xff0c;聊了聊Go与web的关系等…...

04-鸿蒙4.0学习之样式装饰器相关

04-鸿蒙4.0学习之样式装饰器 styles装饰器&#xff1a;定义组件重用样式 /*** styles装饰器&#xff1a;定义组件重用样式*/ Entry Component struct StyleUI {State message: string stylesStyles commonStyle(){.width(200).height(100).backgroundColor(Color.Gray).marg…...

C# 线程(1)

目录 1 线程与进程2 创建线程3 线程等待4 线程优先级5 前台线程与后台线程6 Lock与线程安全7 Monitor8 死锁9 线程中异常处理 1 线程与进程 进程是计算机概念&#xff0c;一个程序运用时占用的的所有计算机资源&#xff08;CPU、内存、硬盘、网络&#xff09;统称为进程。 线程…...

冒泡排序以及改进方案

冒泡排序以及改进方案 介绍&#xff1a; 冒泡排序属于一种典型的交换排序&#xff08;两两比较&#xff09;。冒泡排序就像是把一杯子里的气泡一个个往上冒一样。它不断比较相邻的元素&#xff0c;如果顺序不对就像水泡一样交换它们的位置&#xff0c;直到整个序列像水泡一样…...

QTextEdit 是 Qt 框架中的一个类,用于显示和编辑多行文本内容的可编辑部件

QTextEdit 是 Qt 框架中的一个类&#xff0c;用于显示和编辑多行文本内容的可编辑部件。 QTextEdit 提供了一个用于显示和编辑富文本&#xff08;包括格式化文本、图像和链接等&#xff09;和纯文本的文本编辑器。它支持基本的文本操作&#xff08;如复制、粘贴、撤销、重做等…...

vue+jsonp编写可导出html的模版,可通过外部改json动态更新页面内容

效果 导出后文件结果如图所示&#xff0c;点击Index.html即可查看页面&#xff0c;页面所有数据由report.json控制&#xff0c;修改report.json内容即可改变index.html展示内容 具体实现 1. 编写数据存储的json文件 在index.html所在的public页面新建report.json文件&#xff…...

查看各ip下的连接数

netstat -n | awk /^tcp/ {print $5} | awk -F: {print $1} | sort | uniq -c| sort -rn netstat -n&#xff1a;显示所有的网络连接&#xff0c;不包括任何服务名的解释。awk /^tcp/ {print $5}&#xff1a;使用awk命令过滤出tcp协议的连接&#xff0c;并打印出每个连接的第五…...

Linux—进程状态

目录 一.前言 1.1.通过系统调用获取进程标示符 1.2.通过系统调用创建进程 二.进程状态 三.Z(zombie)-僵尸进程 四.僵尸进程危害 一.前言 学习进程的状态&#xff0c;我们首先了解一下进程的基本数据 1.1.通过系统调用获取进程标示符 由getpid&#xff08;&#xff09…...

万宾科技可燃气体监测仪科技作用全览

燃气管网在运行过程中经常会遇到燃气管道泄漏的问题&#xff0c;燃气泄漏甚至会引起爆炸&#xff0c;从而威胁人民的生命和财产安全&#xff0c;因此对燃气管网进行定期巡检是十分必要的工作。但是传统的人工巡检已不能满足城市的需要&#xff0c;除了选择增加巡检人员之外&…...

Python与GPU编程快速入门(三)

3、使用Numba加速Python代码 Numba 是一个 Python 库,它使用行业标准 LLVM 编译器库在运行时将 Python 函数转换为优化的机器代码。 您可能想尝试用它来加速 CPU 上的代码。 然而,Numba还可以将Python 语言的子集转换为CUDA,这就是我们将在这里使用的。 所以我们的想法是,…...

praseInt 和 逻辑或连用

这是做项目时遇到json文件转换 的一个小坑 将json 对象中的值 由字符串(数字字符串) 转换为 数值类型&#xff0c;如果是 转换失败 &#xff0c;就返回 -1 这里的 parseInt 看起来非常简洁&#xff0c;但是存在一个小坑 transformedData[fieldsToCheck[i]] parseInt(origina…...

从零到一:在CentOS 8上构建LNMP环境并部署WordPress实战

1. 环境准备与基础配置 在开始搭建LNMP环境之前&#xff0c;我们需要确保CentOS 8系统处于最佳状态。我建议使用全新的系统环境&#xff0c;这样可以避免各种依赖冲突问题。首先通过SSH连接到服务器&#xff0c;使用dnf update命令更新所有系统软件包。这个步骤很重要&#xff…...

【工业C# OPC UA配置黄金法则】:20年资深工程师亲授5大避坑指南与一键式配置模板

第一章&#xff1a;工业C# OPC UA配置黄金法则总览在工业自动化系统中&#xff0c;C# 与 OPC UA 的集成必须兼顾安全性、可维护性与实时性。配置不当不仅导致通信中断&#xff0c;更可能引发证书信任链失效、节点访问越权或会话超时风暴。以下核心原则构成稳定部署的基石。强制…...

Mojo与Python混合架构的成本可控性验证报告(内部绝密版):仅限前500名开发者获取的11项成本基线指标

第一章&#xff1a;Mojo与Python混合架构的成本可控性验证总览Mojo作为新兴的系统编程语言&#xff0c;专为AI原生开发设计&#xff0c;兼具Python语法亲和力与接近C的执行效率。在实际工程落地中&#xff0c;全量迁移至Mojo尚不现实&#xff0c;而采用Mojo与Python混合架构——…...

新手也能搞定的应急响应实战:用知攻善防靶场复现近源渗透与挖矿事件

新手也能搞定的应急响应实战&#xff1a;用知攻善防靶场复现近源渗透与挖矿事件 网络安全应急响应是每个安全从业者的必修课&#xff0c;但对于刚入门的新手来说&#xff0c;面对真实的攻击事件往往无从下手。本文将带你通过知攻善防靶场&#xff0c;手把手复现"近源渗透O…...

做自媒体,我是怎么把“不知道写什么”变成“写不完”的

刚开始做自媒体的那半年&#xff0c;我最怕的就是“选题”。每天早上打开文档&#xff0c;脑子里一片空白。上周写了什么&#xff1f;前天写了什么&#xff1f;今天该写什么&#xff1f;完全没方向。有时候坐一个小时&#xff0c;标题都没憋出来。那种感觉特别绝望——不是不想…...

ESP居然能当 DNS 服务器用?内含NCSI欺骗和DNS劫持实现妆

前言 Kubernetes 本身并不复杂&#xff0c;是我们把它搞复杂的。无论是刻意为之还是那种虽然出于好意却将优雅的原语堆砌成 鲁布戈德堡机械 的狂热。平台最初提供的 ReplicaSets、Services、ConfigMaps&#xff0c;这些基础组件简单直接&#xff0c;甚至显得有些枯燥。但后来我…...

Ecqlipse32:车规级嵌入式LCD显示驱动框架

1. 项目概述Ecqlipse32 是一款专为大众汽车集团 CARIAD 车载信息娱乐系统&#xff08;IVI&#xff09;平台定制开发的嵌入式 TFT-LCD 显示驱动框架&#xff0c;面向基于 ARM Cortex-M 系列微控制器&#xff08;特别是 STM32H7 和 NXP i.MX RT117x 等高性能 MCU&#xff09;的车…...

MPU6050 DMP硬件姿态解算与nRF52832低功耗BLE集成方案

1. 项目概述 MPU6050-DMP-Seeed-Tiny-BLE 是一个面向低功耗嵌入式姿态感知应用的完整固件解决方案&#xff0c;专为 Seeed Studio 推出的 Tiny BLE 模块&#xff08;基于 Nordic nRF52832 SoC&#xff09;设计&#xff0c;深度集成 Invensense MPU6050 六轴惯性测量单元&#x…...

【typst-rs】greet.rs文件

以下是对greet.rs的详细解析。 use std::io::{self, Read};/// This is shown to users who just type typst the first time. #[rustfmt::skip] const GREETING: &str color_print::cstr!("\ <s>Welcome to Typst, we are glad to have you here!</> ❤…...

嵌入式系统中nanopb序列化方案的优势与实践

1. 嵌入式通信序列化的痛点与选择在资源受限的嵌入式系统中&#xff0c;数据序列化方案的选择往往面临多重挑战。我曾在一个智能农业传感器项目中&#xff0c;就遇到过这样的困境&#xff1a;节点设备使用STM32F103&#xff08;64KB Flash&#xff0c;20KB RAM&#xff09;&…...