花费-效益分析筛选肿瘤标记物最佳组合

基于花费-效益分析的肿瘤标记物最佳组合筛选

本文的想法来自于一篇发表的论文[1]。论文作者有感于临床上存在的不恰当的肿瘤标记物的检测,搜集了各种肿瘤标记物(TM)的价格、检测结果和最终诊断等数据,使用逻辑回归模型分别计算出2,3和4种TM组合的敏感度,最终使用TM组合的价格和其敏感度的比值(越低越好)来筛选最具有效价比的TM组合,以实现降低花费等目的。

疾病的花费显然是政府、医院和患者三方面共同关心的问题之一。通过相关数据分析,把钱花在该花的地方,对各方面都有益处,但是这方面的数据并不易得。本文旨在通过复现一篇论文中的研究方法,利用Python代码分析不同TM组合的花费与效益,进而筛选出最具性价比的组合。同时,我们尝试优化分析流程,并对效益指标的选择进行讨论。
在这里插入图片描述

分析规划

  1. 复现工作:使用论文中提供的数据集,通过Python代码实现不同TM组合的敏感度计算及花费-效益比分析。
  2. 优化流程:引入变量筛选方法(如Boruta算法),以减少不必要的TM检查,提高分析效率。
  3. 算法讨论:探讨敏感度作为效益指标的合理性,并考虑是否应纳入其他指标(如真阴性率或F1评分)以更全面地评估TM组合的效益。

方法与结果

  1. 复现研究:我们采用了逻辑回归算法与5折交叉验证相结合的方法,计算了不同TM组合(包括2种、3种和4种标记物的组合)的敏感度,并结合这些组合的价格计算了花费-效益比。由于原文章数据预处理和TM单价描述的不够充份,我们的结果与原文不完全一致,但基本实现了研究目的。其中各种TM的单价比网络上低许多,不知道是什么原因导致的。
  2. 流程优化:为减少计算量,我们引入了Boruta算法进行变量筛选。该算法有效地识别并淘汰了部分不重要的TM,保留了原文推荐的TM组合中的关键标记物,证明了其在TM筛选中的有效性。
  3. 算法讨论:敏感度作为效益指标虽然能反映标记物诊断患病个体的能力,但忽视了其对非患病个体的诊断效果。因此,同时考虑真阴性率和真阳性率的的F1评分是不是一个更全面地反映TM组合的效益的指标?未来的研究可以进一步探讨这些指标在花费-效益分析中的应用。

完整的分析过程参见和鲸社区相关的项目。

核心函数如下:5折交叉验证计算敏感度和AUC


#自定义计算acu和recall(敏感度)的函数
def cv_auc_score(X,y):
    n_fold = 5
    folds = KFold(n_splits=n_fold, shuffle=True, random_state=2022)
    #这个是汇总预测概率的结构
    oof_lg = {'.pred_0':np.zeros(len(X)),'.pred_1':np.zeros(len(X)),'truth':np.zeros(len(X)),'pred_class':np.zeros(len(X))}
    for fold_n, (train_index, valid_index) in enumerate(folds.split(X)):
        X_train, X_valid = X.iloc[train_index], X.iloc[valid_index]
        y_train, y_valid = y[train_index], y[valid_index]
        eval_set = [(X_valid, y_valid)]
        model_lg = logistic_model.fit(X_train,y_train )
        y_pred_valid = model_lg.predict_proba(X_valid)
        y_pred_class=model_lg.predict(X_valid)
        oof_lg['.pred_0'][valid_index] = y_pred_valid[:,0]
        oof_lg['.pred_1'][valid_index] = y_pred_valid[:,1]
        oof_lg['truth'][valid_index]=y_valid
        oof_lg['pred_class'][valid_index]=y_pred_class
    oof_lg_df=pd.DataFrame(oof_lg)
    oof_lg_df['truth']=oof_lg_df['truth'].astype(int)
    oof_lg_df['pred_class']=oof_lg_df['pred_class'].astype(int)
    # oof_lg_df.info()
    # print(f'逻辑回归中用到的预测变量{X.columns}')
    # print('----------------------------------------------------')
    # print(classification_report(oof_lg_df['truth'], oof_lg_df['pred_class']))
    # print('----------------------------------------------------------------------')
    # print(roc_auc_score(oof_lg_df['truth'], oof_lg_df['pred_class']))
    return roc_auc_score(oof_lg_df['truth'], oof_lg_df['pred_class']),recall_score(oof_lg_df['truth'], oof_lg_df['pred_class'])

结论

通过对不同TM组合的花费-效益比分析,不同组合之间确实存在显著的差异。如果理论上这个指标可以服务临床床的话,通过自动化其计算过程,可以应用这一分析方法,使其服务于临床实践,提高诊断效率,降低医疗成本。

[1] Zhang, Haichen et al. (2018), Extent and cost of inappropriate use of tumour markers in patients with pulmonary disease: a multicentre retrospective study in Shanghai, China, BMJ Open, Article-journal, https://doi.org/10.1136/bmjopen-2017-019051

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024-06-05 Android app jni里面c语言函数申请的局部变量数组过大会导致程序崩溃的问题分析

一、下面是一个app jni里面一个函数,函数里面定义一个数组,实际运行的时候发现数组过大的时候会导致app崩溃。 JNIEXPORT jint JNICALL JNI_FUNCTION(native_1getcapture_1data)(JNIEnv *env, jobject obj,jbyteArray des_data,jbyteArray src_data,jin…

视频生成框架EasyAnimate正式开源!

近期,Sora模型的热度持续上涨,社区中涌现了一些类Sora的开源项目,这些项目均基于Diffusion Transformer结构,使用Transformer结构取代了UNet作为扩散模型的基线,旨在生成更长、更高分辨率、且效果更好的视频。EasyAnim…

组合和为N的数量-第13届蓝桥杯选拔赛Python真题精选

[导读]:超平老师的Scratch蓝桥杯真题解读系列在推出之后,受到了广大老师和家长的好评,非常感谢各位的认可和厚爱。作为回馈,超平老师计划推出《Python蓝桥杯真题解析100讲》,这是解读系列的第78讲。 组合和为N的数量&…

直播用什么领夹麦比较好?轻揭秘无线领夹麦克风哪个品牌音质最好

​在当下自媒体风起云涌的时代,领夹式无线麦克风以其卓越的音质和便携性,已然成为视频博主、直播达人和新闻访谈的得力助手。在短视频、直播互动、在线访谈等多个场景中,它们默默守护着每一声清晰的传递,为内容的呈现增色添彩。面…

AWS EMR Serverless

AWS概述 EMR Serverless 简介 在AWS概述一文中简单介绍过AWS EMR, 它是AWS提供的云端大数据平台。借助EMR可以设置集群以便在几分钟内使用大数据框架处理和分析数据。创建集群可参考官方文档:Amazon EMR 入门。但集群创建之后需要一直运行,用户需要管理…

SSL证书到底怎么选?

在全球CA官方原厂的SSL证书兼容性达到99%的机构仅有4家,其中一家勉强,分别:GlobalSign、DigiCert、Sectigo、Certum,如果不在这个范围的建议都不用看。 【不包括套用品牌的“国产化”SSL证书、山寨SSL证书,这些证书的…

聊一聊 js的事件循环、进程、线程、定时器延迟问题

概括来说是什么? 所谓Event Loop,就是事件循环,其实就是JS管理事件执行的一个流程,具体的管理办法由他具体的运行环境确定。目前JS的主要运行环境有两个,浏览器和Node.js。这两个环境的Event Loop还有点区别&#xff…

Leetcode 力扣107. 二叉树的层序遍历 II (抖音号:708231408)

给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:[[15,7],[9,20],…

LabVIEW 反向工程的实现与法律地位

什么是LabVIEW反向工程? 反向工程是指从现有的应用程序或软件中推导出其设计、架构、代码等信息的过程。对于LabVIEW而言,反向工程涉及从现有的VI(虚拟仪器)文件、项目或应用程序中提取出设计思路、功能模块、算法实现等。 LabV…

Ubuntu server 24.04 (Linux) 搭建DNS服务器 通过Nginx实现UDP/TCP负载均衡 轻量级dnsmasq服务器

一 系统运行环境 testtest:~$ cat /etc/os-release PRETTY_NAME"Ubuntu 24.04 LTS" NAME"Ubuntu" VERSION_ID"24.04" VERSION"24.04 LTS (Noble Numbat)" VERSION_CODENAMEnoble IDubuntu ID_LIKEdebian HOME_URL"https://www.…

【AI大模型】Prompt Engineering

目录 什么是提示工程(Prompt Engineering) Prompt 调优 Prompt 的典型构成 「定义角色」为什么有效? 防止 Prompt 攻击 攻击方式 1:著名的「奶奶漏洞」 攻击方式 2:Prompt 注入 防范措施 1:Prompt 注…

linux查看磁盘类型命令

在Linux中,有多种方法可以查看磁盘是固态硬盘(SSD)还是机械硬盘(HDD)。以下是一些常用的方法: 查看/sys/block/目录 /sys/block/目录包含了系统中所有块设备的信息。你可以查看这个目录中的设备属性来判断…

计算机网络 —— 数据链路层(以太网)

计算机网络 —— 数据链路层(以太网) 什么是以太网以太网传输介质和拓扑结构的发展传输介质的发展:拓扑结构的发展: 10BASE-T 以太网适配器和MAC地址适配器(Adapter)MAC地址适配器与MAC地址的关系 MAC帧以太…

保姆级教程:Redis 主从复制原理及集群搭建

😄作者简介: 小曾同学.com,一个致力于测试开发的博主⛽️,主要职责:测试开发、CI/CD 如果文章知识点有错误的地方,还请大家指正,让我们一起学习,一起进步。 😊 座右铭:不…

Unity编辑器扩展-番外篇-Gizmos基础-物体如何在球面上移动

目录 一、本节目标效果展示 二、先画出素材 1.先新建一个普通的代码 2.画素材(一个头,两个耳朵,一个鼻子) a.关于贴心的Unity b.开始画素材 三、了解移动的原理 四、辅助物体的建立 五、画左耳朵 六、全部代码 七、作者的…

开源模型应用落地-LangChain试炼-LCEL-表达式语言(一)

一、前言 尽管现在的大语言模型已经非常强大,可以解决许多问题,但在处理复杂情况时,仍然需要进行多个步骤或整合不同的流程才能达到最终的目标。然而,现在可以利用langchain来使得模型的应用变得更加直接和简单。 LCEL是什么&…

AC自动机(查询)

上面讲了AC自动机是如何建树和建自动机的,这里要讲的是AC自动机的查询和各个数组的功能和作用。 其实AC自动机的查询和KMP算法是及其相近的,都是一个指针跑主串,另一个指针跑ne串(这里就是回跳边)。 话都说到这了&…

Linux C语言学习:数据类型

一、 为什么要引入数据类型 • 计算机中每个字节都有一个地址(类似门牌号) • CPU通过 地址 来访问这个字节的空间 0x20001103 1 0 0 1 0 0 1 1 0x20001102 1 1 1 0 1 1 1 0 0x20001101 1 1 1 1 0 1 0 1 0x20001100 0 …

南京观海微电子-----555函数信号发生器电路分析

电路图 整个电路的工作过程: 首先,555芯片通过外围电阻电容组成一个多谐振荡器,输出一个方波。 555多谐振荡器输出方波后,经电容C1耦合到由R3,C3组成的积分网络。输出三角波。这也是一个电容充放电的过程&#xff0c…