R语言快速画出ROC曲线和算出可信区间和p值
一、背景介绍
在临床医学中,医生的一项重要任务就是判断就诊者是否患病,以便采取适当的进一步行动。临床检测结果常被用于指导临床决策,因此对临床诊断实验的质量评价由于重要。常用的描述检测质量的统计指标有:灵敏度、特异度、预测值、正确率和似然比等。
二、数据集
下面将以pROC包的数据集aSAH为例进行下面讲述:
1. 查看pROC下数据集
install.packages('pROC')
library(pROC)
data(aSAH)
str(aSAH)
2. 结果展示
# 未引入pROC前是无法查看到aSAH数据集
> data(aSAH)
Warning message:
In data(aSAH) : 没有‘aSAH’这个数据集
> library(pROC)
Type 'citation("pROC")' for a citation.载入程辑包:‘pROC’The following objects are masked from ‘package:stats’:cov, smooth, varWarning message:
程辑包‘pROC’是用R版本4.0.5 来建造的
> data(aSAH)
> str(aSAH)
'data.frame': 113 obs. of 7 variables:$ gos6 : Ord.factor w/ 5 levels "1"<"2"<"3"<"4"<..: 5 5 5 5 1 1 4 1 5 4 ...$ outcome: Factor w/ 2 levels "Good","Poor": 1 1 1 1 2 2 1 2 1 1 ...$ gender : Factor w/ 2 levels "Male","Female": 2 2 2 2 2 1 1 1 2 2 ...$ age : int 42 37 42 27 42 48 57 41 49 75 ...$ wfns : Ord.factor w/ 5 levels "1"<"2"<"3"<"4"<..: 1 1 1 1 3 2 5 4 1 2 ...$ s100b : num 0.13 0.14 0.1 0.04 0.13 0.1 0.47 0.16 0.18 0.1 ...$ ndka : num 3.01 8.54 8.09 10.42 17.4 ...
> head(aSAH)gos6 outcome gender age wfns s100b ndka
29 5 Good Female 42 1 0.13 3.01
30 5 Good Female 37 1 0.14 8.54
31 5 Good Female 42 1 0.10 8.09
32 5 Good Female 27 1 0.04 10.42
33 1 Poor Female 42 3 0.13 17.40
34 1 Poor Male 48 2 0.10 12.75
三、统计指标解析
检查结果 | 有病 | 无病 | 合计 |
---|---|---|---|
阳性 | a(真阳性) | b(假阳性) | a+b |
阴性 | c(假阴性) | d(真阴性) | c+d |
合计 | a+c | b+d | a+b+c+d |
1. 灵敏度和特异度
- 灵敏度:是指患者检测结果为阳性的百分率,也叫真阳性率(Sensitivity)。
灵敏度 = a/(a+c)*100%
- 特异度:是指未患病的人检测结果为阴性的百分率,也叫真阴性率(Specificity)。
特异度 = d/(b+d)*100%
2. 正确率
正确率(accuracy):又称总符合率,表示检测结果与金标准的符合程度。
正确率=(a+d)/(a+b+c+d)*100%
正确率反应一项诊断实验或者参数正确区分患者与非患者的能力,但是很大程度依赖人群的发病率(患病率如果为3%,即使全部诊断为阴性,也有97%的正确率)。
3. 约登指数
约登指数(Youden index):反映诊断实验真实性的综合指标。
约登指数 = 灵敏度+特异度-1
约登指数的值范围在-1和1之间,其值越大表明诊断实验的真实性越好,当值为负数时,该诊断实验无任何临床应用价值。
4. 似然比
似然比(likelihood ratio):是患者与非患者中出现某种检验结果的概率之比,反映了得到该测定结果的诊断价值。
- 阳性似然比
阳性似然比(positive likelihood ratio):是真阳性与假阳性之比。
阳性似然比 = 灵敏度/(1-特异度)=(a/(a+c))/(b/(b+d))
- 阴性似然比
阴性似然比(negative likelihood ratio):是假阴性率与真阴性率之比。
阴性似然比 = (1-灵敏度)/特异度=(c/(a+c))/(b/(b+d))
如果似然比等于1说明在患者和非患者中得到该检验结果是相同的,无诊断价值。似然比离1越远表明该检验结果诊断的准确性越高。同时其不受患病率影响,同时结合了灵敏度和特异度信息,比预测值更能反应指标的正确性。
四、单个ROC曲线分析
1. 画ROC曲线
> head(aSAH,1)gos6 outcome gender age wfns s100b ndka
29 5 Good Female 42 1 0.13 3.01
> roc1 <- roc(outcome~age,data=aSAH)
Setting levels: control = Good, case = Poor
Setting direction: controls < cases
> plot.roc(roc1,print.auc=TRUE,auc.polygon=TRUE,print.thres = TRUE)
>
2. 计算95%可信区间
> library(dplyr)载入程辑包:‘dplyr’The following objects are masked from ‘package:stats’:filter, lagThe following objects are masked from ‘package:base’:intersect, setdiff, setequal, union> ci.auc(roc1)
95% CI: 0.5082-0.7219 (DeLong)
3. 计算p值
由于outcome是字符串,不能直接参与p值的计算,这里我们需要添加一个新的参数result(如果outcome是Good的在result中对应是0,如果不是则为1)
> library(verification)
> aSAH$result[aSAH$outcome == "Good"] <- 0
> aSAH$result[aSAH$outcome == "Poor"] <- 1
> aSAH$result[1] 0 0 0 0 1 1 0 1 0 0 1 0 1 1 0 0 1 0 1 1 1 0 1 0 0 0 0 0 0 0 0 0 1 0 0 1[37] 1 0 1 1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 1 0 0 0 1 0 1 0 0 1 1 1 0 1 1 0 1 1[73] 1 1 0 0 0 1 1 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0
[109] 0 1 0 0 0
> roc.area(aSAH$result,roc1$predictor)
$A
[1] 0.6150068$n.total
[1] 113$n.events
[1] 41$n.noevents
[1] 72$p.value
[1] 0.02143495
R语言快速画出ROC曲线和算出可信区间和p值相关推荐
- R语言实战 input+结果——ROC曲线的绘制 auc 时量下曲线面积
1.数据处理 第一步当然得处理一下数据.默认的Iris数据集有三类鸢尾花,我目前的理解是只有二分类才画的出ROC曲线,所以才去一定的手段处理一下数据: 输入 # 数据准备 iris2 <- ir ...
- r语言 把2条roc曲线画在同一个图上_R语言如何将多个图像画到一张图
介绍 有时候我们需要将多个图像排列好放到一张图上,对于R语言基础包的函数,比如plot, barplot, hist等,是可以通过par, layout进行排版,但是对于ggplot的图像,我们需要使 ...
- r语言ggplot画两条曲线_R语言作图——Line plot with error
原创:黄小仙 为了画今天的这个图,小仙决定凭空想象一台可以实时监控基因表达水平的设备,成功得到了这么一组数据. 想要画的图是这样子滴. Step1.绘图数据的准备 首先要把你想要绘图的数据调整成R语言 ...
- roc图 r语言_浅谈ROC曲线-R语言
原文链接:https://www.r-bloggers.com/lang/chinese/1205www.r-bloggers.com 机器学习中很常见的一个大类就是二元分类器.很多二元分类器会产生 ...
- R语言计算AUC(ROC曲线)的注意事项
之前的推文中介绍了ROC曲线的本质以及两面性: ROC阳性结果还是阴性结果? 并详细介绍了如何手动计算真阳性率/假阳性率,以及怎样计算多个,并把点连接成线,变成ROC曲线:ROC曲线纯手工绘制 这些现 ...
- 二元置信椭圆r语言_医学统计与R语言:画一个姑娘陪着我,再画个花边的被窝...
微信公众号:医学统计与R语言如果你觉得对你有帮助,欢迎转发 输入1: "waffle") 结果1: 1] 输入2: library(ggpubr)a <- waffle(c( ...
- 机器学习之选择小样本交叉验证训练模型并使用精确率、召回率、F1分数和AUC值、画出ROC曲线评估
题目如下 (1)读入aviation数据集,设置MEMBER_NO为索引列:(4分) (2)剔除重复值.缺失值.(4分) (3)随机抽取500样本,切片特征X和标签Y:(4分) 因为调参很慢,所以这里 ...
- 使用Python画出ROC曲线后,如何在ROC曲线代码中增加95%CI?
使用Python画出ROC曲线后,如何在ROC曲线代码中增加95%CI? 计算AUC之后,大部文献都会给出95%CI,如何在代码中增加这一功能呢?希望有大神给出代码!!!! 代码如下: import ...
- python画出roc曲线 auc计算逻辑_ROC及AUC计算方法及原理
1.非均衡分类问题 在大多数情况下不同类别的分类代价并不相等,即将样本分类为正例或反例的代价是不能相提并论的.例如在垃圾邮件过滤中,我们希望重要的邮件永远不要被误判为垃圾邮件,还有在癌症检测中,宁愿误 ...
- R语言临床诊断试验的ROC分析方法示例
R语言临床诊断试验的ROC分析方法示例 ROC(receiver operating characteristic curve)接收者操作特征曲线,是由二战中的电子工程师和雷达工程师发明用来侦测战场上 ...
最新文章
- 移动平台还有哪些创业机会
- [React-Native]样式和布局
- Windows自动删除n天前的文件的批处理脚本
- 打造人脉不如打造自己
- 【第五周课后作业】“番茄工作法”软件创新性分析
- 卡在linuxctrld进系统_Linux系统执行df -h命令卡死的解决方案
- Objective-C中的@Property具体解释
- python时间如何处理_python 时间处理
- FPGA_四选一数据选择器
- 语义化版本号 Sematic Versioning
- 怎样快速将PDF文件旋转
- html,css笔记
- matlab求三维图形表面积,基于MATLAB的不规则平面立体表面积计算
- 计算机网络分布式处理的应用,谈计算机网络发展及其应用研究
- 终极单词index 排序 G-H
- 巴特沃斯、切比雪夫Ⅰ型、切比雪夫Ⅱ型和椭圆型滤波器的相同和不同之处
- alpha冲刺(6/10)
- Windows下 批量重命名文件【bat实现】
- 音视频技术开发周刊 | 282
- 服装服饰行业SCRM-VIP会员营销解决方案
热门文章
- 粘贴时word左下角出现“正在与服务器联系以获取信息,按ESC取消”
- lucene 学习笔记之飞龙在天
- java给文件夹加密码_用JavaScrpt 实现文件夹轻松加密 (转)
- CPU,操作系统,应用软件,安装时的32位与64位区别收集总结
- sns.relplot
- 小区物业专属公众号管理办法
- JavaScipt设计模式初探-代理模式(一)
- golang 修改全局默认时区的方法
- win10卸载软件_一款适合于windows端的卸载神器 彻底清理残留软件
- 基于java网络版坦克大战游戏