本文首发于公众号:医学和生信笔记

医学和生信笔记,专注R语言在临床医学中的使用,R语言数据分析和可视化。主要分享R语言做医学统计学、meta分析、网络药理学、临床预测模型、机器学习、生物信息学等。

R语言临床预测模型系列文章,目前已更新20+篇内容,持续更新中,欢迎订阅!

今天说一说ROC(AUC)的比较。

二分类资料的ROC比较

可以通过pROC包实现的,使用其中roc.test()函数可实现两个ROC 的Delong检验。

使用pROC包的aSAH数据,其中outcome列是结果变量,1代表Good,2代表Poor。

library(pROC)## Type 'citation("pROC")' for a citation.## ## Attaching package: 'pROC'## The following objects are masked from 'package:stats':## ##     cov, smooth, var

data(aSAH)dim(aSAH)## [1] 113   7str(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 ...

构建两个ROC对象,然后直接比较即可:

roc1 <- roc(aSAH$outcome,aSAH$s100b)## Setting levels: control = Good, case = Poor## Setting direction: controls < casesroc2 <- roc(aSAH$outcome,aSAH$ndka)## Setting levels: control = Good, case = Poor## Setting direction: controls < cases

res <- roc.test(roc1,roc2)

res## ##  DeLong's test for two correlated ROC curves## ## data:  roc1 and roc2## Z = 1.3908, p-value = 0.1643## alternative hypothesis: true difference in AUC is not equal to 0## 95 percent confidence interval:##  -0.04887061  0.28769174## sample estimates:## AUC of roc1 AUC of roc2 ##   0.7313686   0.6119580

这个函数里面有个method参数:delong/bootstrap/venkatraman,默认是delongdelongbootstrap用于比较AUC,如果只是ROC曲线的比较,需要用venkatraman。关于这几种方法的具体原理,大家可以去翻相关的论文~

roc.test只能用于两个ROC的比较,如果是多个比较,可以使用MedCalc软件,这个是和SPSS类似的软件,只要点点点即可。

当然也是可以直接画在图里的:

rocobj1 <- plot.roc(aSAH$outcome, aSAH$s100,percent=TRUE, col="#1c61b6")## Setting levels: control = Good, case = Poor## Setting direction: controls < casesrocobj2 <- lines.roc(aSAH$outcome, aSAH$ndka, percent=TRUE, col="#008600")## Setting levels: control = Good, case = Poor## Setting direction: controls < cases

legend("bottomright", legend=c("S100B", "NDKA"), col=c("#1c61b6", "#008600"), lwd=2)

testobj <- roc.test(rocobj1, rocobj2)

text(50, 50, labels=paste("p-value =", format.pval(testobj$p.value)), adj=c(0, .5))

当然你也可以用其他非参数检验的方法进行比较,比如mann whitney u检验(一家之言)。

生存资料ROC的比较

使用timeROC包实现。

还是用之前推文中用过的例子,获取数据请翻看之前的推文~

rm(list = ls())library(timeROC)library(survival)

load(file = "../000files/timeROC.RData")

使用其中的df2这个数据:

str(df2)## 'data.frame': 297 obs. of  8 variables:##  $ event    : num  0 0 1 0 0 1 0 0 0 0 ...##  $ age      : int  59 63 65 73 59 66 56 42 61 48 ...##  $ riskScore: num  -0.249 -0.511 -0.211 -0.427 0.279 ...##  $ futime   : num  3.03 1.16 1.82 1.52 1.34 ...##  $ gender   : num  2 2 2 1 2 2 1 2 2 2 ...##  $ t        : num  4 4 4 3 3 3 5 3 NA 4 ...##  $ n        : num  1 5 1 1 1 1 3 1 NA 1 ...##  $ m        : num  1 1 1 1 1 3 1 1 3 3 ...

构建几个timeROC:

# riskScore的ROC曲线ROC.risk <- timeROC(T=df2$futime,                    delta=df2$event,                       marker=df2$riskScore,                       cause=1,                                    weighting="marginal",                       times=3,  # c(1,2)                     iid=TRUE)

# age的ROC曲线ROC.age <- timeROC(T=df2$futime,                      delta=df2$event,                      marker=df2$age,                      cause=1,                      weighting="marginal",                      times=3,   # c(1,2)                   iid=TRUE)

比较就用compare()函数即可:

compare(ROC.risk, ROC.age)## $p_values_AUC##       t=0       t=3 ##        NA 0.4544231

同时使用多个时间点也是可以的:

# riskScore的ROC曲线ROC.risk <- timeROC(T=df2$futime,                    delta=df2$event,                       marker=df2$riskScore,                       cause=1,                                    weighting="marginal",                       times=c(1,2),                    iid=TRUE)

# age的ROC曲线ROC.age <- timeROC(T=df2$futime,                      delta=df2$event,                      marker=df2$age,                      cause=1,                      weighting="marginal",                      times=c(1,2),                   iid=TRUE)

compare(ROC.risk, ROC.age)## $p_values_AUC##        t=1        t=2 ## 0.09758546 0.27995259

compare(ROC.risk, ROC.age, adjusted = T) # 计算调整p值## $p_values_AUC##                     t=1       t=2## Non-adjusted 0.09758546 0.2799526## Adjusted     0.14983636 0.3984702## ## $Cor##           [,1]      [,2]## [1,] 1.0000000 0.7750774## [2,] 0.7750774 1.0000000

画图就不演示了,可以参考之前的推文。

本文首发于公众号:医学和生信笔记

医学和生信笔记,专注R语言在临床医学中的使用,R语言数据分析和可视化。主要分享R语言做医学统计学、meta分析、网络药理学、临床预测模型、机器学习、生物信息学等。

本文由 mdnice 多平台发布

ROC(AUC)的显著性检验相关推荐

  1. 准确率,召回率,F值,ROC,AUC

    准确率,召回率,F值,ROC,AUC 责任编辑:词汇网 发表时间:2016-4-23 20:08:08 度量表 1.准确率 (presion)p=TPTP+FP 理解为你预测对的正例数占你预测正例总量 ...

  2. Recall(召回率) Precision(准确率) F-Measure E值 sensitivity(灵敏性) specificity(特异性)漏诊率 误诊率 ROC AUC

    Berkeley Computer Vision page Performance Evaluation 机器学习之分类性能度量指标 : ROC曲线.AUC值.正确率.召回率 True Positiv ...

  3. ROC/AUC、精准率、召回率、真正率,假正率等指标含义,学习笔记

    1. 混淆矩阵 对于二分类模型,预测值与真实值的组合情况,行成了混淆矩阵. 第一个字母表示是否预测正确(T/F),第二个表示预测为 P/1 还是 N/0. 2. 准确率 预测正确的结果占总样本的百分比 ...

  4. AP AR mAP ROC AUC(目标检测)

    目标检测之AP AR mAP ROC AUC(Evaluation metrics) 混淆矩阵中 TP.TN.FP.FN Precision查准率和Recall召回率 P-R曲线 AP mAP AR ...

  5. 回归和分类模型性能评估指标MSE,MAE,PR,ROC,AUC

    文章目录 0. 模型评估是什么,为什么 1. 不同类型问题的评估指标 1.1 回归问题 1.2 分类问题 1.2.1 准确率和错误率 1.2.2 精确率和召回率 1.2.3 PR曲线图 1.2.4 F ...

  6. 模型评估指标 -1- 基础篇 -FPR/TPR/F1/ROC/AUC

    导语:本文是模型评估指标系列的第一篇,将详细地介绍分类模型中基于混淆矩阵衍生出来的各个指标的计算公式,如准确率,精确率,召回率,FPR,TPR,ROC曲线的绘制逻辑,AUC的计算公式等.本文首发在个人 ...

  7. 准确率,精准率,召回率,真正率,假正率,ROC/AUC

      最近在看到这些词得时候老是混淆,看了之后还很容易遗忘,于是查了些资料把他们记录下来. 我们在设计深度学习网络模型的时候经常要对其进行评估,评估就要用到这些东西,在接介绍这个率,那个率之前,我先来介 ...

  8. ROC/AUC曲线学习及Python实现

    参考博客: 目标检测 - 评价指标 详解ROC/AUC计算过程 [机器学习笔记]:一文让你彻底理解准确率,精准率,召回率,真正率,假正率,ROC/AUC 一.准确率,精准率,召回率 1.TP.TN.F ...

  9. ROC/AUC 简易试验 最佳截断点 混淆矩阵 敏感度 特异度 约登指数 各个指标置信区间

    ROC/AUC 简易试验 最佳截断点 敏感度 特异度 约登 召回率 混淆矩阵 学习链接, 鼠标放这里 常规学习下面这个矩阵 金标准 + - 模型 + True Positives(TP) False ...

  10. 机器学习分类器评价指标详解(Precision, Recall, PR, ROC, AUC等)(一)

    为了系统性地理解机器学习模型的不同评价指标及其之间的关系,我们将从其定义出发,探究其物理含义及彼此之间的联系,并从数学上给出相应的公式推导,以方便后续用到时复习理解.由于篇幅较长,因此将其分为两篇,这 ...

最新文章

  1. Web服务集成CRM的应用
  2. php lock sh,php文件加锁 lock_sh ,lock_ex
  3. 10组第一次作业-现代软件工程2017成员介绍
  4. 并发工具类【线程安全相关的类】
  5. 5886. 如果相邻两个颜色均相同则删除当前颜色
  6. java pixel data_java - JavaFX PixelWriter性能低下
  7. Linux之http服务基本配置案例
  8. python是哪一年发明的_Python的发明,竟然是因为他不喜欢花括号。
  9. ConceptDraw Office for mac(跨平台图表办公程序)
  10. c语言= 什么意思,C语言=是什么意思?
  11. html5仿微博弹出,JS 仿腾讯发表微博的效果代码
  12. windows XP系统内核文件分析
  13. 服务器系统tcpip.sys,win7系统tcpip.sys文件引起蓝屏的解决方法
  14. 君正X1000开发板/方案开发介绍
  15. 腾讯轻量云FREEBSD11.1安装panabit cloud
  16. 电脑屏幕下方任务栏不显示了怎么处理 ?
  17. 地图匹配实例-几何匹配
  18. 一个神奇的分布式计算框架:jini
  19. 磨刀不误砍柴 - 配置适合工作学习的桌面环境
  20. 扒勒索病毒史,聊真CDP与准CDP

热门文章

  1. 清明节 java_清明节习俗
  2. 完整的ACSII编码表
  3. 常用英文字体收集备用
  4. 推荐一个统计英语词频的软件:replace pioneer
  5. android手机fingerprint,Fingerprint HIDL
  6. stm32内部基准电压
  7. CapstoneCS5211|CS5211电路|CS5211中文规格书|CS5211设计eDP到LVDS转接板/转换器方案
  8. SNIFFER(嗅探器)基础知识
  9. 如何无损把mp4视频格式转换成mp3音频格式
  10. elasticsearch报错:exceeds the [index.highlight.max_analyzed_offset] limit [1000000]