一、背景介绍

在临床医学中,医生的一项重要任务就是判断就诊者是否患病,以便采取适当的进一步行动。临床检测结果常被用于指导临床决策,因此对临床诊断实验的质量评价由于重要。常用的描述检测质量的统计指标有:灵敏度、特异度、预测值、正确率和似然比等。

二、数据集

下面将以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. 灵敏度和特异度

  1. 灵敏度:是指患者检测结果为阳性的百分率,也叫真阳性率(Sensitivity)。
灵敏度 = a/(a+c)*100%
  1. 特异度:是指未患病的人检测结果为阴性的百分率,也叫真阴性率(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):是患者与非患者中出现某种检验结果的概率之比,反映了得到该测定结果的诊断价值。

  1. 阳性似然比
    阳性似然比(positive likelihood ratio):是真阳性与假阳性之比。
阳性似然比 = 灵敏度/(1-特异度)=(a/(a+c))/(b/(b+d))
  1. 阴性似然比
    阴性似然比(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值相关推荐

  1. R语言实战 input+结果——ROC曲线的绘制 auc 时量下曲线面积

    1.数据处理 第一步当然得处理一下数据.默认的Iris数据集有三类鸢尾花,我目前的理解是只有二分类才画的出ROC曲线,所以才去一定的手段处理一下数据: 输入 # 数据准备 iris2 <- ir ...

  2. r语言 把2条roc曲线画在同一个图上_R语言如何将多个图像画到一张图

    介绍 有时候我们需要将多个图像排列好放到一张图上,对于R语言基础包的函数,比如plot, barplot, hist等,是可以通过par, layout进行排版,但是对于ggplot的图像,我们需要使 ...

  3. r语言ggplot画两条曲线_R语言作图——Line plot with error

    原创:黄小仙 为了画今天的这个图,小仙决定凭空想象一台可以实时监控基因表达水平的设备,成功得到了这么一组数据. 想要画的图是这样子滴. Step1.绘图数据的准备 首先要把你想要绘图的数据调整成R语言 ...

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

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

  5. R语言计算AUC(ROC曲线)的注意事项

    之前的推文中介绍了ROC曲线的本质以及两面性: ROC阳性结果还是阴性结果? 并详细介绍了如何手动计算真阳性率/假阳性率,以及怎样计算多个,并把点连接成线,变成ROC曲线:ROC曲线纯手工绘制 这些现 ...

  6. 二元置信椭圆r语言_医学统计与R语言:画一个姑娘陪着我,再画个花边的被窝...

    微信公众号:医学统计与R语言如果你觉得对你有帮助,欢迎转发 输入1: "waffle") 结果1: 1] 输入2: library(ggpubr)a <- waffle(c( ...

  7. 机器学习之选择小样本交叉验证训练模型并使用精确率、召回率、F1分数和AUC值、画出ROC曲线评估

    题目如下 (1)读入aviation数据集,设置MEMBER_NO为索引列:(4分) (2)剔除重复值.缺失值.(4分) (3)随机抽取500样本,切片特征X和标签Y:(4分) 因为调参很慢,所以这里 ...

  8. 使用Python画出ROC曲线后,如何在ROC曲线代码中增加95%CI?

    使用Python画出ROC曲线后,如何在ROC曲线代码中增加95%CI? 计算AUC之后,大部文献都会给出95%CI,如何在代码中增加这一功能呢?希望有大神给出代码!!!! 代码如下: import ...

  9. python画出roc曲线 auc计算逻辑_ROC及AUC计算方法及原理

    1.非均衡分类问题 在大多数情况下不同类别的分类代价并不相等,即将样本分类为正例或反例的代价是不能相提并论的.例如在垃圾邮件过滤中,我们希望重要的邮件永远不要被误判为垃圾邮件,还有在癌症检测中,宁愿误 ...

  10. R语言临床诊断试验的ROC分析方法示例

    R语言临床诊断试验的ROC分析方法示例 ROC(receiver operating characteristic curve)接收者操作特征曲线,是由二战中的电子工程师和雷达工程师发明用来侦测战场上 ...

最新文章

  1. 移动平台还有哪些创业机会
  2. [React-Native]样式和布局
  3. Windows自动删除n天前的文件的批处理脚本
  4. 打造人脉不如打造自己
  5. 【第五周课后作业】“番茄工作法”软件创新性分析
  6. 卡在linuxctrld进系统_Linux系统执行df -h命令卡死的解决方案
  7. Objective-C中的@Property具体解释
  8. python时间如何处理_python 时间处理
  9. FPGA_四选一数据选择器
  10. 语义化版本号 Sematic Versioning
  11. 怎样快速将PDF文件旋转
  12. html,css笔记
  13. matlab求三维图形表面积,基于MATLAB的不规则平面立体表面积计算
  14. 计算机网络分布式处理的应用,谈计算机网络发展及其应用研究
  15. 终极单词index 排序 G-H
  16. 巴特沃斯、切比雪夫Ⅰ型、切比雪夫Ⅱ型和椭圆型滤波器的相同和不同之处
  17. alpha冲刺(6/10)
  18. Windows下 批量重命名文件【bat实现】
  19. 音视频技术开发周刊 | 282
  20. 服装服饰行业SCRM-VIP会员营销解决方案

热门文章

  1. 粘贴时word左下角出现“正在与服务器联系以获取信息,按ESC取消”
  2. lucene 学习笔记之飞龙在天
  3. java给文件夹加密码_用JavaScrpt 实现文件夹轻松加密 (转)
  4. CPU,操作系统,应用软件,安装时的32位与64位区别收集总结
  5. sns.relplot
  6. 小区物业专属公众号管理办法
  7. JavaScipt设计模式初探-代理模式(一)
  8. golang 修改全局默认时区的方法
  9. win10卸载软件_一款适合于windows端的卸载神器 彻底清理残留软件
  10. 基于java网络版坦克大战游戏