精华内容
下载资源
问答
  • R语言 ROC曲线

    千次阅读 2018-01-15 18:52:00
    ROC曲线(受试者工作特征, Receiver Operating Characteristic) 可以简单、直观得观察分析方法的临床准确性,并可用肉眼作出判断。ROC以真阳性率(灵敏度FPR)为纵坐标,假阳性率(1-特异度TPR)为横坐标绘制的曲线...
    • ROC曲线(受试者工作特征, Receiver Operating Characteristic) 可以简单、直观得观察分析方法的临床准确性,并可用肉眼作出判断。ROC以真阳性率(灵敏度FPR)为纵坐标,假阳性率(1-特异度TPR)为横坐标绘制的曲线,可准确反映某分析方法特异性和敏感性的关系,是试验准确性的综合代表。ROC曲线不固定分类界值,允许中间状态存在,利于使用者结合专业知识,权衡漏诊与误诊的影响,选择一更佳截断点作为诊断参考值。提供不同试验之间在共同标尺下的直观的比较,ROC曲线越凸越近左上角表明其诊断价值越大,利于不同指标间的比较。曲线下面积可评价诊断准确性。
    • 相关定义及计算公式(用混淆矩阵的形式将分类结果展示出来)


      img_11b13a4d5da146447cfb527ef65a8e18.jpe
    setwd("E:\\Rwork")
    library(ROCR)
    data(ROCR.simple)
    pred <- prediction(ROCR.simple$predictions, ROCR.simple$labels) 
    #ROCR.simple$predictions为预测标签,ROCR.simple$labels为真实标签
    perf <- performance(pred,"tpr","fpr")
    auc <- performance(pred,'auc')
    auc = unlist(slot(auc,"y.values"))
    plot(perf,
         xlim=c(0,1), ylim=c(0,1),col='red', 
         main=paste("ROC curve (", "AUC = ",auc,")"),
         lwd = 2, cex.main=1.3, cex.lab=1.2, cex.axis=1.2, font=1.2)
    abline(0,1)
    
    img_275e294b32a85b32f6f1c09b25e40008.png
    • 使用pROC包 Affairs(婚外情数据)数据取于1969年,该数据包括9个变量,601个样本


      img_73ac4394190dadcabc4c0cd3dd35a68c.jpe
    data(Affairs, package="AER")
    summary(Affairs)
    
    Affairs$ynaffair[Affairs$affairs > 0] <- 1
    Affairs$ynaffair[Affairs$affairs == 0] <- 0
    Affairs$ynaffair <- factor(Affairs$ynaffair,
                                 levels=c(0,1),
                                 labels=c("No","Yes"))
    table(Affairs$ynaffair)
    fit.full <- glm(ynaffair ~ gender + age + yearsmarried + children +
                      religiousness + education + occupation +rating,
                    data=Affairs, family=binomial())
    summary(fit.full)
    
    # 做一个logistic回归,生成概率预测值
    
    pre <- predict(fit.full,type='response')
    # 将预测概率prob和实际结果y放在一个数据框中
    data <- data.frame(prob=pre,obs=Affairs$ynaffair)
    # 按预测概率从低到高排序
    
    library(pROC)
    modelroc <- roc(Affairs$ynaffair,pre)
    plot(modelroc, print.auc=TRUE, auc.polygon=TRUE, grid=c(0.1, 0.2),
         grid.col=c("green", "red"), max.auc.polygon=TRUE,
         auc.polygon.col="skyblue", print.thres=TRUE)
    
    img_c0434e42e62148b81722fe83535bd1d4.png
    • ROC曲线下的面积(area under ROC curve)值在1.0和0.5之间。
    • 在AUC>0.5的情况下,AUC越接近于1,说明诊断效果越好。
    • AUC在 0.5~0.7时有较低准确性,AUC在0.7~0.9时有一定准确性,AUC在0.9以上时有较高准确性。
    • AUC=0.5时,说明诊断方法完全不起作用,无诊断价值。
    • AUC<0.5不符合真实情况,在实际中极少出现。

    0.9 ~ 1.0 ( 优秀)
    0.8 ~ 0.9 (良好)
    0.7 ~ 0.8(一般)
    0.6 ~ 0.7(很差)
    0.5 ~ 0.6(无法区分)

    展开全文
  • R语言 ROC曲线 截断值、特异性、敏感性和曲线下面积AUC值的计算和显示 R语言绘制ROC曲线在临床医学中的应用 ** #计算体脂率对诊断妊娠期糖尿病的ROC曲线、截断值 sumExcel1.2018合4_列合并症<- read.csv(“C:\...

    **

    R语言 ROC曲线 截断值、特异性、敏感性和曲线下面积AUC值的计算和显示

    R语言绘制ROC曲线在临床医学中的应用

    **

    #计算体脂率对诊断妊娠期糖尿病的ROC曲线、截断值
    sumExcel1.2018合4_列合并症<- read.csv(“C:\Users\Desktop\sumExcel1_2019071.csv”,sep = “,”,header = TRUE)#读取数据,excel中数据格式如下图,数据有空值,符合实际应用情况

    在这里插入图片描述
    attach(sumExcel1.2018合4_列合并症)
    print(sumExcel1.2018合4_列合并症)
    #options(scipen = 1000)#样本超过一千才使用科学计数法
    #var2 <- sumExcel1.2018合4_列合并症[c(‘体脂百分百_percent’,诊断妊娠期糖尿病0正常1 患病’)]
    var2 <- subset(sumExcel1.2018合4_列合并症,
    !is.na(sumExcel1.2018合4_列合并症[‘体脂百分百_percent’])&
    !is.na(sumExcel1.2018合4_列合并症[‘诊断妊娠期糖尿病0正常1患病’]),
    select=c(‘体脂百分百_percent’,诊断妊娠期糖尿病0正常1患病’))
    #install.packages(“pROC”)#此程辑包要求R版本更新至3.5.1以上,仅第一次使用需要安装
    library(pROC)#载入pROC包
    modelroc <- roc(var2 ′ 诊 断 妊 娠 期 糖 尿 病 0 正 常 1 患 病 ′ , v a r 2 '诊断妊娠期糖尿病0正常1患病',var2 尿01,var2’体脂百分百_percent’)#计算体脂率对诊断妊娠期糖尿病的ROC曲线
    plot(modelroc, print.auc=TRUE, auc.polygon=TRUE, grid=c(0.1, 0.2),
    grid.col=c(“green”, “red”), max.auc.polygon=TRUE,#设置坐标系网格纵、横坐标虚线分别为绿色、红色,曲线上颜色T灰色F无色,显示AUC曲线下面积
    auc.polygon.col=“skyblue”, print.thres=TRUE)#设置曲线下填充天蓝色
    detach(sumExcel1.2018合4_列合并症)

    体脂率判断妊娠期糖尿病的ROC曲线如下图,其曲线下面积AUC最大值0.61,对应截断值13.500kg,特异性0.402、敏感性0.793,说明体脂率高达13.5kg时判断妊娠期糖尿病发生的敏感性为79.3%,特异性为40.2%,(临床意义)使用该指标进行妊娠期糖尿病风险筛查具有较好的意义,但其确诊把握不足。
    在这里插入图片描述

    展开全文
  • 本文将使用一个小数据说明ROC曲线,其中n = 10个观测值,两个连续变量x_1和x_2,以及二元变量y∈{0,1}。

    原文链接:http://tecdat.cn/?p=18944

    原文出处:拓端数据部落公众号

    本文将使用一个小数据说明ROC曲线,其中n = 10个观测值,两个连续变量x_1和x_2,以及二元变量y∈{0,1}。

    我们可以表示平面(x_1,x_2)中的点,并且对y∈{0,1}中的y 使用不同的颜色。

    
    df = data.frame(x1=x1,x2=x2,y=as.factor(y))
    plot(x1,x2,col=c("red","blue")[1+y],pch=19,cex=1.5)


    然后,我们可以进行逻辑回归,P(Y = 1∣x1,x2)= 1 +eβ0+β1x1 +β2x2eβ0+β1x1 +β2x2 ,

    
    reg = glm(y~x1+x2,data=df,family=binomial(link = "logit"))
    


    然后我们可以将y_i表示为得分的函数,即P(Y = 1∣x1,i ,x2,i),

    
    S = predict(reg,type="response")
    plot(S,y )

    然后,我们将设定一个阈值(例如50%):如果Y取值1的概率超过阈值,我们将预测为1(否则为0)。在上图中,我们有4个点:阈值左侧的那些点(预测为0),如果位于底部,则分类很好,而位于顶部的分类很差;在阈值的右边(并且预测为1),如果它们位于顶部,则可以很好地分类,而底部则不能很好地分类 

    
    plot(S,y,
    col=c("red","blue")[1+(y==Yhat)])
    abline(v=s,lty=2)


    颜色反映了分类的好坏:红点表示分类错误。我们可以在 下面的列联表(混淆矩阵)中找到所有这些内容 。

    
    Y Yhat 0 1
    0 3 1
    1 1 5


    在这里,我们感兴趣的是两个指标:假正例和真正例,

    FP=sum((Ps==1)*(Y==0))/sum(Y==0) 
    TP=sum((Ps==1)*(Y==1))/sum(Y==1)

    我们在给定的阈值(此处为50 %)处获得了该表。
    这组结果给出了ROC曲线。

    
    
    plot(t(V),type="s" )
    segments(0,0,1,1,col="light blue")


    我们可以检查在曲线上阈值50%处的点

    
    Y Yhat 0 1
    0 3 1
    1 1 5
    (FP = sum((Yhat)*(Y==0))/sum(Y==0))
    [1] 0.25
    (TP = sum((Yhat==1)*(Y==1))/sum(Y==1))
    [1] 0.83
    


     

    
    plot(performance(pred,"tpr","fpr"))


    一个有趣的量称为曲线下面积(或 AUC),可在此处手动计算(我们有一个简单的阶梯函数)

    p2[1]*p2[2]+(p1[1]-p2[1])*p1[2]+(1-p1[1]) 
    [1] 0.875


    也可以用函数计算

    auc.perf@y.values[[1]]
    [1] 0.87

    我们尝试另一个分类器:仍然是逻辑回归,但要考虑通过将第二个变量分割成两个而获得的因子1 [s,∞) x2)

    abline(h=.525)


    水平线不再是红色和蓝色一样多的线,而是与变量x_2相交的线。在这里,我们仅预测两个值:底部出现蓝色的概率为40%,顶部为蓝色的概率为80%。如果我们将观测值yi表示为预测概率的函数,则可以得出

    plot(S,y,ylab="y",xlim=0:1)

    50%的阈值,我们获得以下列联表

    
    Y Yhat 0 1
    0 3 2
    1 1 4

    如果绘制ROC曲线,我们得到

    
    plot(t(V),type="l"
    segments(0,0,1,1,col="light blue")


    这次,曲线是线性的。上图中的蓝色对角线恰好是随机分类器,这是我们随机预测的结果

    pred = prediction(S,Y)
    plot(performance(pred,"tpr","fpr"))


    该点的阈值为50%。再次,我们可以计算曲线下的面积

    
    p2[1]*p2[2]/2+(1-p1[1])*p1[2]+(1-p1[1])*(1-p1[2])/2
    [1] 0.708
    auc.perf@y.values[[1]]
    [1] 0.708


    最受欢迎的见解

    1.从决策树模型看员工为什么离职

    2.R语言基于树的方法:决策树,随机森林

    3.python中使用scikit-learn和pandas决策树

    4.机器学习:在SAS中运行随机森林数据分析报告

    5.R语言用随机森林和文本挖掘提高航空公司客户满意度

    6.机器学习助推快时尚精准销售时间序列

    7.用机器学习识别不断变化的股市状况——隐马尔可夫模型的应用

    8.python机器学习:推荐系统实现(以矩阵分解来协同过滤)

    9.python中用pytorch机器学习分类预测银行客户流失

    展开全文
  • 在讨论ROC曲线之前,首先让我们在逻辑回归的背景下考虑校准和区分之间的区别。 良好的校准是不够的 对于模型协变量的给定值,我们可以获得预测的概率。如果观察到的风险与预测的风险(概率)相匹配,则称该...

    原文链接:http://tecdat.cn/?p=6310

    原文出处:拓端数据部落公众号

    在讨论ROC曲线之前,首先让我们在逻辑回归的背景下考虑校准和区分之间的区别。 

    良好的校准是不够的

    对于模型协变量的给定值,我们可以获得预测的概率。如果观察到的风险与预测的风险(概率)相匹配,则称该模型已被很好地校准。也就是说,如果我们要分配一组值的大量观察结果,这些观察结果的比例应该接近20%。如果观察到的比例是80%,我们可能会同意该模型表现不佳 - 这低估了这些观察的风险。 我们是否应满足于使用模型,只要它经过良好校准?不幸的是。为了了解原因,假设我们为我们的结果拟合了一个模型但没有任何协变量,即模型: 对数几率,使得预测值将与数据集中的观察的比例相同。 这个(相当无用的)模型为每个观察分配相同的预测概率。它将具有良好的校准 - 在未来的样品中,观察到的比例将接近我们的估计概率。然而,该模型并不真正有用,因为它不区分高风险观察和低风险观察。这种情况类似于天气预报员,他每天都说明天下雨的几率为10%。这个预测可能已经过很好的校准,但它没有告诉人们在某一天下雨的可能性是否更大或更低,因此实际上并不是一个有用的预测!

     

    在R中绘制ROC曲线 
     

    set.seed(63126)
    n < -  1000
    x < -  rnorm(n)
    pr < -  exp(x)/(1 + exp(x))
    y < -  1 *(runif(n)<pr)
    mod < -  glm(y~x,family =“binomial”)

    接下来,我们从拟合的模型对象中提取拟合概率的向量:

    predpr < -  predict(mod,type = c(“response”))
    
    我们现在加载pROC包,并使用roc函数生成一个roc对象。基本语法是指定回归类型方程,左侧是响应y,右侧是包含拟合概率的对象:
    
     roccurve < -  roc(y~preppr)
    
    然后可以使用绘制roc对象
     

    这给了我们ROC图(见前面的图)。请注意,这里因为我们的逻辑回归模型只包含一个协变量,如果我们使用roc(y~x),ROC曲线看起来完全相同,即我们不需要拟合逻辑回归模型。这是因为只有一个协变量,拟合概率是唯一协变量的单调函数。然而,一般而言(即模型中有一个以上的协变量),情况并非如此。

    以前我们说过一个具有良好辨别能力的模型,ROC曲线将接近左上角。要通过模拟检查这一点,我们将重新模拟数据,将日志优势比从1增加到5:

    set.seed(63126)
    n < -  1000
    x < -  rnorm(n)
    pr < -  exp(5 * x)/(1 + exp(5 * x))
    y < -  1 *(runif(n)<pr)
    mod < -  glm(y~x,family =“binomial”)
    
    predpr < -  predict(mod,type = c(“response”))
    
    roccurve < -  roc(y~preppr)

     现在让我们再次运行模拟,但变量x实际上与y无关。为此,我们只需修改生成概率向量pr的行

    pr < -  exp(0 * x)/(1 + exp(0 * x))
    
    它给出了以下ROC曲线

    ROC曲线,其中预测因子与结果无关

    ROC曲线下面积


    总结模型辨别能力的一种流行方式是报告ROC曲线下的面积。我们已经看到具有辨别能力的模型具有更接近图的左上角的ROC曲线,而没有辨别能力的模型具有接近45度线的ROC曲线。因此,曲线下面积从1(对应于完美辨别)到0.5(对应于没有辨别能力的模型)。ROC曲线下面积有时也称为c统计量(c表示一致性)。

     

    展开全文
  • 在讨论ROC曲线之前,首先让我们在逻辑回归的背景下考虑校准和区分之间的区别。 良好的校准是不够的 对于模型协变量的给定值,我们可以获得预测的概率。如果观察到的风险与预测的风险(概率)相匹配,则称该...
  • R语言绘制ROC曲线

    万次阅读 多人点赞 2019-02-25 09:44:01
    1 roc曲线的意义 ROC曲线就是用来判断诊断的正确性,最理想的就是曲线下的面积为1,比较理想的状态就是曲线下的面积在0.8-0.9之间,0.5的话对实验结果没有什么影响。 如图: 2代码部分 install.packages(...
  • R语言 画图roc

    2019-03-11 19:00:00
    这才是我要的滑板鞋~~~~~ #glm模型glm.model=train(y~.,data=data_train, method="glm", metric="ROC", trControl=control)#svm模型svm.model=train(y~.,data=data_train, ...
  • 拓端tecdat|R语言ROC曲线总结

    千次阅读 2020-02-18 17:45:48
    在本文中,我描述了如何在CRAN中搜索用于绘制ROC曲线的包,并重点介绍了六个有用的包。
  • R语言绘制ROC曲线图

    2021-09-27 13:34:04
    受试者工作特征曲线(ROC曲线),最初作为一种分析方法在二战时用于评价雷达性能(鉴别敌方,友方以及噪音),目前广泛应用于医学诊断、生物信息学、数据挖掘和机器学习等研究中。 ROC曲线可用于评价生物标记物...
  • R语言绘制ROC曲线

    万次阅读 多人点赞 2013-03-21 10:49:07
    (PS:下述内容或许部分表述有误,请谨慎参考,但以下操作本人均测试正常;本文很多内容参考了...内容:利用R语言绘制ROC曲线并计算AUC 平台:R 2.15.3 1. 吐槽一大堆,省略xxx字 2. 准备工作 2.1 安装 R  2.2 安装
  • ROC曲线基于R语言-(pROC包)

    万次阅读 2020-01-24 16:52:53
    R语言ROC曲线 ROC曲线简介: 很多的模型在进行分类预测时,会产生一个实际值或者概率值,然后我们将这个预测值与一个用于分类的阈值进行比较,将结果分成正类和反类。一般我们可以通过任务需求的不同来采用不同的...
  • r语言怎么做ROC曲线

    千次阅读 2017-03-03 18:28:54
    #ROC曲线 TPR=rep(0,1000) FPR=rep(0,1000) for(i in 1:1000){   p0=i/1000;  ypredp0)  TPR[i]=sum(ypred*audit2$is_run)/sum(audit2$is_run)  FPR[i]=sum(ypred*(1-audit2$is_run))/sum(1-audit2$is...
  • R语言实战——ROC曲线的绘制

    千次阅读 2020-04-20 18:30:56
    然后无意间发现了一篇用R语言绘制ROC曲线的文章,赶紧学了并分享出来,以备不时之需。 先通过一个例子来讲解一下参数的作用,使用的数据是大名鼎鼎的Iris数据集,R语言自带。 数据处理 第一步当然得处理一下数据。...
  • R语言绘制ROC曲线如何画在一个图中

    万次阅读 2017-12-16 14:08:10
    data(aSAH) 加载R语言自带的数据 roc1 <- roc(myDatalabel,myDatalabel, myDatascore) roc2 <- roc(myData2label,myData2label, myData2score) plot(roc1, col=”blue”) plot.roc(roc2, add=TRUE, col=”r
  • R语言诊断试验数据处理与ROC分析实战案例:联合诊断ROC 目录 R语言诊断试验数据处理与ROC分析实战案例:联合诊断ROC #ROC指标 #样例数据 #数据分析与ROC曲线 #联合诊断ROC (1)ROC曲线图中的四个点 第...
  • R语言|求ROC和AUC值

    万次阅读 2016-09-29 15:36:54
    1、求ROC和AUC值 #方法一:ROCR包中主要是两个class:prediction和performance。前者是将预测结果和真实标签组合在一起,生成一个prediction对象,然后在用performance函数,按照给定的评价方法,生成一个...
  • R语言-绘制ROC曲线

    万次阅读 多人点赞 2016-04-14 21:28:35
    浅谈ROC曲线机器学习中很常见的一个大类就是二元分类器。很多二元分类器会产生一个概率预测值,而非仅仅是0-1预测值。我们可以使用某个临界点(例如0.5),以划分哪些预测为1,哪些预测为0。得到二元预测值后,可以...
  • R语言临床诊断试验的ROC分析方法示例 ROC(receiver operating characteristic curve)接收者操作特征曲线,是由二战中的电子工程师和雷达工程师发明用来侦测战场上敌军载具(飞机、船舰)的指标,属于信号...
  • R语言临床诊断试验的ROC分析方法示例.pdf
  • R语言绘图:ROC曲线图

    千次阅读 2019-10-06 02:30:44
    使用pROC包绘制ROC曲线 #####***绘制ROC曲线***##### library("pROC") N <- dim(data2)[1] #数据长度 set.seed(1234) ...
  • ROC 曲线可能是评估评分分类器的预测性能的最常用的度量。 预测正类(+1)和负类(-1)的分类器的混淆矩阵具有以下结构: 预测/参考类 +1 -1 +1 TP FP -1 FN TN 这里,TP表示真阳性的数量...
  • 之前因工作需要绘制ROC曲线,所以对该曲线的计算细节进行了一番摸索。刚开始我搜索ROC曲线一般跟机器学习相关联,导致我对它的概念有了曲解,理所当然地以为它只是一个用于机器学习的分类器评估标准,所以在绘制曲线...
  • R语言利用caret包比较ROC曲线

    千次阅读 2017-06-09 11:39:51
    将不同的分类模型的ROC曲线绘制在同一个图中进行比较,设置训练过程的控制参数为重复三次的10折交叉验证,模型性能的评估参数为twoClassSummary,然后在使用glm,svm,rpart,三种不同的方法建立分类模型。 从图中可以...
  • 今天就介绍下用R语言怎么做多指标联合预测ROC曲线。1. 安装和加载包绘制ROC曲线使用pROC包,构建Logistic回归使用glmnet包。"pROC")2. 加载数据集使用pROC包自带的数据集进行演示。#清除环境3. 建立Logistic回归模型...
  • R语言画图之ROC曲线(个人笔记)

    千次阅读 2020-01-09 17:36:06
    R语言画图之ROC曲线 Ctrl + L* 清空控制台 cbind: 根据列进行合并,即叠加所有列,m列的矩阵与n列的矩阵cbind()最后变成m+n列,合并前提:cbind(a, c)中矩阵a、c的行数必需相符 rbind: 根据行进行...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,119
精华内容 1,247
关键字:

r语言roc