统计小白如何计算各个指标的95%CI以及两个AUC之间的Delong Test

目录
  • 第一部分:计算各个指标的95%CI
    • 指标计算方式
    • 95%CI计算方式
    • 计算实现方式
      • 方式1:利用现成的网站
      • 方式2::Python代码实现
  • 第二部分:两个AUC之间的Delong Test

第一部分:计算各个指标的95%CI

指标计算方式

根据论文需要,指标包括AUC(AUC的所有计算见第二部分)、精度ACC、敏感度SEN、特异度SPE、正预测值PPV、负预测值NPV、F1分数
各计算公式如下:
\(\text{ACC} = \frac{TP + TN}{TP + TN + FP + FN}\)

\(\text{SEN} = \frac{TP}{TP + FN}\)

\(\text{SPE} = \frac{TN}{TN + FP}\)

\(\text{PPV} = \frac{TP}{TP + FP}\)

\(\text{NPV} = \frac{TN}{TN + FN}\)

\(\text{F1} = 2 \times \frac{\text{PPV} \times \text{SEN}}{\text{PPV} + \text{SEN}}\)

其中,\(TP=True Positive, TN=True Negative, FP=False Positive, FN=False Negative\)

95%CI计算方式

采用正态近似法(前提是假设数据分别为正态分布,未必都适用哦)
计算公式为\(\hat{p} \pm z_{\frac{\alpha}{2}} \times SE\)
其中:
\(\hat{p}\)为估计值(如ACC等)
\(z_{\frac{\alpha}{2}}\)为标准正态分布的临界值(通常取1.96对应于95%置信区间
\(SE\)为标准误,其计算公式为\(SE = \sqrt{\frac{\hat{p}(1 - \hat{p})}{n}}\)n为样本总数,不同指标的n不同,是计算指标时的分母

计算实现方式

方式1:利用现成的网站

进入网站后,只需要输入True Positive, True Negative, False Positive, False Negative四个变量后点击计算即可。网站1中还需输入\(1-\alpha\)为0.95,网站2中似乎是默认的
网站1:https://www2.ccrb.cuhk.edu.hk/stat/confidence interval/Diagnostic Statistic.htm
网站2:http://vassarstats.net/clin1.html#return
根据我自己的结果,网站1更准确,网站2的95%CI会有点偏差,但是因为其并未给出计算公式,具体原因不得而知
然而,这些网站计算的指标其实是不全的,只包括SEN、SPE、PPV和NPV。如果需要更全指标的结果,可使用下一节的python代码得到

方式2::Python代码实现

代码如下,按照公式计算,与网站1的结果完全一致:

import pandas as pd
import math
import scipy.stats as stats# 定义计算各项指标及其95%置信区间的函数
def calculate_metrics(TP, TN, FP, FN):# 总样本数n = TP + TN + FP + FN# 计算各个指标ACC = (TP + TN) / nSEN = TP / (TP + FN)SPE = TN / (TN + FP)PPV = TP / (TP + FP)NPV = TN / (TN + FN)F1 = 2 * (PPV * SEN) / (PPV + SEN)# 计算标准误SE_ACC = math.sqrt(ACC * (1 - ACC) / n)SE_SEN = math.sqrt(SEN * (1 - SEN) / (TP + FN))SE_SPE = math.sqrt(SPE * (1 - SPE) / (TN + FP))SE_PPV = math.sqrt(PPV * (1 - PPV) / (TP + FP))SE_NPV = math.sqrt(NPV * (1 - NPV) / (TN + FN))SE_F1 = math.sqrt(F1 * (1 - F1) / n)# Z值z = stats.norm.ppf(0.975)# 计算95%置信区间CI_ACC = (ACC - z * SE_ACC, ACC + z * SE_ACC)CI_SEN = (SEN - z * SE_SEN, SEN + z * SE_SEN)CI_SPE = (SPE - z * SE_SPE, SPE + z * SE_SPE)CI_PPV = (PPV - z * SE_PPV, PPV + z * SE_PPV)CI_NPV = (NPV - z * SE_NPV, NPV + z * SE_NPV)CI_F1 = (F1 - z * SE_F1, F1 + z * SE_F1)# 返回结果return {"ACC": round(ACC, 3),"CI_ACC_Lower": round(CI_ACC[0], 3),"CI_ACC_Upper": round(CI_ACC[1], 3),"SEN": round(SEN, 3),"CI_SEN_Lower": round(CI_SEN[0], 3),"CI_SEN_Upper": round(CI_SEN[1], 3),"SPE": round(SPE, 3),"CI_SPE_Lower": round(CI_SPE[0], 3),"CI_SPE_Upper": round(CI_SPE[1], 3),"PPV": round(PPV, 3),"CI_PPV_Lower": round(CI_PPV[0], 3),"CI_PPV_Upper": round(CI_PPV[1], 3),"NPV": round(NPV, 3),"CI_NPV_Lower": round(CI_NPV[0], 3),"CI_NPV_Upper": round(CI_NPV[1], 3),"F1": round(F1, 3),"CI_F1_Lower": round(CI_F1[0], 3),"CI_F1_Upper": round(CI_F1[1], 3)}# 示例数据:TP, TN, FP, FN
TP = 64
TN = 101
FP = 14
FN = 13# 计算指标
metrics = calculate_metrics(TP, TN, FP, FN)# 创建一个DataFrame用于保存结果
df = pd.DataFrame([metrics])# 输出为CSV文件
df.to_csv(r'metrics.csv', index=False)print(df)

第二部分:两个AUC之间的Delong Test

关于AUC及其95%CI的计算,以及两个AUC之间的Delong Test,都是用Medcalc这个软件最方便
关于如何使用Medcalc软件,可参考:https://zhuanlan.zhihu.com/p/76351802
简单介绍如下,可以自己摸索一下:
1、点击File——New,新建一个工作表,把预测概率(或者其他形式,这里指机器学习模型预测各个样本为正样本的概率)和label(ground truth标签)粘贴进来,第一行为列名(以识别对应列的数据),不同列对应于不同模型的结果
2、点击Statistics——ROC curves,如果你只需要算一列结果的AUC,则选择ROC curve analysis;如果需要比较多个AUC,且共用一列的label,则选择Comparison of ROC curves
3、会跳出一个页面,在Variables下选择需要得到AUC的数据列的列名(多个比较则选多个);在Classification Variable下选择label列的列名,并且在其下面的define status里输入你在label列中用什么表示正样本,什么表示负样本
4、在对比ROC曲线时,跳出的页面右侧可以选择使用Delong test还是Hanley & McNeil
5、最后点击OK即可,会跳出结果页面,里面ROC曲线,AUC,其95%CI,两两ROC曲线比较得到的P值,等等,应有尽有

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/872887.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3. 使用sql查询csv/json文件内容,还能关联查询?

1. 简介 我们在前面的文章提到了calcite可以支持文件系统的数据源适配, 其实官方已经提供了相应的能力, 其支持csv和json的查询适配, 废话不多说, 直接展示. 2. Maven <!-- calcite文件系统支持 --> <dependency><groupId>org.apache.calcite</groupId>…

一文搞懂 APP 算法备案

今天来给大家好好科普一下超重要的 APP 算法备案,这可是和我们日常使用 APP 以及 APP 运营都息息相关的知识点哦! 什么是算法备案 简单来讲,算法备案就相当于 APP 运营者要把自家 APP 里使用的算法详情,向有关部门进行申报登记。这就如同给算法这个 “幕后大脑” 办一张正式…

IDEA 在远程 Tomcat 上运行项目(转载补充版)

转载:IDEA 在远程 Tomcat 上运行项目(亲身避坑版) 我在操作的时候,遇到个问题,提示Unable to open debugger port (192.168.252.232:54578): java. net. ConnectException "Connection refused: connect" 原因是,开启JVM调试,需要在2.1小节设置环境变量的时候…

VMware Tools 13.0.0 发布 - 客户机操作系统无缝交互必备组件

VMware Tools 13.0.0 发布 - 客户机操作系统无缝交互必备组件VMware Tools 13.0.0 发布 - 客户机操作系统无缝交互必备组件 VMware 虚拟机必备组件 (驱动和交互式服务) VMware Tools 13.0.0 发布 - 虚拟机必备组件 (驱动和交互式服务) VMware 客户机操作系统无缝交互必备组件 请…

【交通行业】2024中国网络安全产业势能榜优能企业「交通行业」典型案例展示

交通行业的智能化发展使得交通系统的效率得到了大幅提升,但随之而来的安全隐患也不容忽视。从自动驾驶到智慧交通,每一项技术的进步都伴随着数据保护和系统安全的挑战。我们将通过交通行业的典型案例,探索在高速发展的同时,如何确保交通系统的安全和稳定。 PS:典型案例展示…

ITIL认证工具商-ManageEngine Servicedesk Plus

ServiceDesk Plus是Zoho Corporation旗下企业IT管理部门ManageEngine提供的统一服务管理解决方案。凭借其无限的可扩展性、情境化的IT和业务集成以及一键式工作流程自动化功能,IT领导者可以使用ServiceDesk Plus有效执行和控制跨不同业务部门和IT功能的复杂工作流程。 Service…

微信公众号-脚本简单实现,自动新建草稿并发布草稿文章,代码开源

介绍 本来想写一个自动化发布微信公众号的小绿书的脚本。但是微信公众号官网没有小绿书的接口。 想着算了吧,写都写了,那就写一个微信普通文章的脚本吧。 写完了 就想着把脚本分享出来,给大家一起交流下。 水平有限,大佬轻喷。思路 1,获取百度热搜列表 2,给热搜图片加上文…

如何在织梦CMS中修改网站标题?

织梦CMS(DedeCMS)是一款流行的开源内容管理系统。以下是修改织梦网站标题的步骤:登录后台:使用管理员账号登录织梦CMS后台管理系统。 进入模板管理:在后台管理系统中找到“模板管理”或“模板文件管理”选项。 编辑模板文件:找到包含网站标题的模板文件(如index.htm),…

修改公司网站数据库名称时需要注意的问题及解决方案

问题描述 当需要对公司网站的数据库名称进行更改时,有哪些潜在风险和挑战?如何确保这一过程顺利进行? 答案 修改公司网站的数据库名称是一项敏感的操作,因为它涉及到整个系统的底层架构,稍有不慎就可能导致数据丢失或服务中断。以下是需要注意的问题及解决方案:评估影响范…

使用FlashFXP修改网站代码

问题描述 如何使用FlashFXP工具安全地修改网站代码,确保网站正常运行? 答案 FlashFXP是一款常用的FTP客户端,广泛用于网站文件的上传和下载。通过FlashFXP,用户可以方便地修改网站代码。以下是详细的步骤和注意事项:安装FlashFXP:首先,下载并安装FlashFXP软件。确保安装…

如何处理虚拟主机上的系统误报和非法信息检测问题?

要处理虚拟主机上的系统误报和非法信息检测问题,您可以采取以下措施:确认误报文件:检查被误报为病毒的文件是否确实为正常文件。如果是正常文件,建议联系程序提供商重新设计页面,避免使用容易被误判的文件名或格式。 如果文件确实是合法的,可以尝试将其路径添加到白名单中…

服务器端口不通?快速排查与解决方法

用户在配置安全组时遇到问题,尽管已经开放了特定端口(如1238和8283),但仍然无法访问这些端口。例如,用户尝试访问这两个端口时发现ping不通。 解决方案:步骤 描述1 确认服务器上是否有服务正在监听这些端口。如果没有服务监听,则外网无法访问这些端口。2 检查服务器防火…