美文网首页文献图片解读
python实现绘制ROC曲线寻找指标最佳诊断临界值

python实现绘制ROC曲线寻找指标最佳诊断临界值

作者: 真滩主 | 来源:发表于2022-05-14 10:23 被阅读0次

实现功能:

根据患者的诊断结果以及某一个诊断指标数值,绘制ROC曲线,寻找出这个指标的最佳诊断临界值,并在曲线中标记出此时的坐标。

实现代码:

import numpy as np

import matplotlib.pyplot as plt

from sklearn.metrics import roc_curve, auc

import xlrd

import seaborn as sns

def Find_Optimal_Cutoff(TPR, FPR, threshold):

    y = TPR - FPR

    Youden_index = np.argmax(y)

    optimal_threshold = threshold[Youden_index]

    print(optimal_threshold)

    point = [FPR[Youden_index], TPR[Youden_index]]

    return optimal_threshold, point

def acu_curve(index_name,y,prob):

    font = {'family': 'Times New Roman',

            'size': 12,

            }

    sns.set(font_scale=1.2)

    plt.rc('font', family='Times New Roman')

    fpr, tpr, thresholds = roc_curve(y,prob)

    roc_auc = auc(fpr,tpr) ###计算auc的值

    lw = 2

    plt.plot(fpr, tpr, color='darkorange',

            lw=lw, label='ROC curve (area = %0.3f)' % roc_auc)

    plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--')

    optimal_th, optimal_point = Find_Optimal_Cutoff(TPR=tpr, FPR=fpr, threshold=thresholds)

    print(optimal_point)

    plt.plot(optimal_point[0], optimal_point[1], marker='o', color='r')

    plt.text(optimal_point[0], optimal_point[1], (float('%.2f'% optimal_point[0]),

                                                  float('%.2f'% optimal_point[1])),

                                                    ha='right', va='top', fontsize=12)

    plt.text(optimal_point[0], optimal_point[1],  f'Threshold:{optimal_th:.2f}', fontsize=12)

    plt.xlim([0.0, 1.0])

    plt.ylim([0.0, 1.0])

    plt.xlabel('False Positive Rate',fontsize = 14)

    plt.ylabel('True Positive Rate',fontsize = 14)

    plt.title('ROC analysis of '+ index_name,fontsize = 14)

    plt.legend(loc="lower right",fontsize = 12)

    plt.show()

def extract(inpath,sheet_index,label_index,col_index):

    data = xlrd.open_workbook(inpath, encoding_override='utf-8')

    table = data.sheets()[sheet_index]  # 选定表

    nrows = table.nrows  # 获取行号

    ncols = table.ncols  # 获取列号

    label = []

    prb = []

    for i in range(1, nrows):  # 第0行为表头

        alldata = table.row_values(i)  # 循环输出excel表中每一行,即所有数据

        label_value=alldata[label_index]

        label.append(label_value)

        result = alldata[col_index]  # 取出表中第二列数据

        prb.append(result)

    return label,prb

if __name__=="__main__":

    inpath = 'F:\医学大数据课题\RA预测\RA预测\指标分析.xls'

    (label,prb) = extract(inpath,0,0,1)

    print(label)

    print(prb)

    acu_curve(index_name='CCP',y=label,prob=prb)

    (label,prb) = extract(inpath,1,0,1)

    print(label)

    print(prb)

    acu_curve(index_name='MCV',y=label,prob=prb)

    (label,prb) =extract(inpath,2,0,1)

    print(label)

    print(prb)

    acu_curve(index_name='RF',y=label,prob=prb)

    (label,prb) =extract(inpath,3,0,1)

    print(label)

    print(prb)

    acu_curve(index_name='CRP',y=label,prob=prb)

实现效果:

CCP指标:

MCV指标:

RF指标:

CRP指标:

控制台输出:

喜欢记得点赞,在看,收藏,

关注V订阅号:数据杂坛,获取完整代码和效果,将持续更新!

相关文章

  • ROC曲线绘制-plotROC和survivalROC

    ROC曲线 ROC曲线是反应一个分类器在某个阈值时对样本的识别能力。 可以借助ROC曲线选择出某一诊断方法最佳的诊...

  • ROC曲线理解

    本文用于理解ROC曲线的定义,绘制过程及其应用实现。 基本目录如下: 什么是ROC曲线?1.1 ROC曲线的历史1...

  • pROC包学习

    ROC曲线 > 我们在做诊断性实验的时候,最常用的选择最佳cutoff的方法是使用ROC曲线。本次主要介绍的是pR...

  • R包学习-pROC

    ROC曲线 我们在做诊断性实验的时候,最常用的选择最佳cutoff的方法是使用ROC曲线。本次主要介绍的是pROC...

  • 【r<-ROC|包】分析与可视化ROC——plotROC、

    在【r<-绘图|ROC】ROC的计算与绘制这篇文章中我讲了ROC曲线的本质以及如何计算和绘制ROC曲线。注意,我这...

  • R语言可视化(三十八):ROC曲线图绘制

    38. ROC曲线图绘制 清除当前环境中的变量 设置工作目录 使用ROCR包绘制ROC曲线 使用pROC包绘制RO...

  • python 使用sklearn进行ROC分析

    # ROC 曲线 ## 准备数据 ## 绘制ROC曲线 自定义图元素 ## 计算AUC 使用yardstick包进...

  • 在线进行ROC曲线分析(二):多指标类型

    上一篇我们讲到单指标类型的在线ROC曲线分析,今天我们来讲讲多指标类型的。 疾病的诊断有时候需要多个指标联合才能做...

  • 机器学习评估指标02

    OC曲线与AUC值 ROC曲线绘制方法与AUC值计算方法 除了F1-Score以外,还有一类指标也可以很好的评估模...

  • Graphpad绘制ROC曲线

    Graphpad绘制ROC曲线 接受者操作特性曲线(receiver operating characterist...

网友评论

    本文标题:python实现绘制ROC曲线寻找指标最佳诊断临界值

    本文链接:https://www.haomeiwen.com/subject/xkwvurtx.html