精准医学时代:探索人工智能在DCA曲线下的临床医学应用

news2024/11/28 19:05:09

一、引言

在当今医学领域中,精准医学作为一种以个体差异为基础的医疗模式逐渐受到重视和应用[1]。精准医学基于个体基因组、环境和生活方式因素的综合分析,旨在实现个体化的预防、诊断和治疗方案,从而提供更好的临床结果[2]。与传统医学相比,精准医学可针对患者的疾病风险、病因和药物反应等方面进行更为精准的预测,为医生和患者做出更明智的决策提供了依据。

DCA(Decision Curve Analysis)曲线作为一种评估医疗决策效果的工具[3],在临床医学中得到广泛应用。DCA曲线以横轴为阈值,纵轴为净效益,可以通过绘制不同决策策略的DCA曲线来比较其优劣。DCA曲线考虑了患者和医生的风险偏好,可以直观地展示不同策略在避免过度治疗和漏诊的平衡中的表现[4]。它已被广泛应用于癌症早期筛查、疾病诊断和治疗方案选择等领域,为医疗实践提供了重要的决策支持。

随着人工智能技术的迅速发展,将人工智能与DCA曲线相结合的研究和应用也逐渐崭露头角。通过利用人工智能的强大计算和模式识别能力,可以对丰富的临床数据进行挖掘和分析,从而优化医疗决策并提高临床结果的准确性和效果[5]。例如,利用人工智能的算法可以在DCA曲线中寻找关键的阈值点,帮助医生确定最佳的决策策略。此外,人工智能还能够加速DCA曲线的建模过程,并提供更精确的结果,进一步提升医疗决策的效益[6]。人工智能与DCA曲线的结合不仅可以为临床医学提供更强大的决策工具,还有望改进传统医疗模式的不足之处。

二、DCA简介和临床意义

  • 「DCA曲线的基本概念和作用」

DCA曲线是一种衡量医疗决策效果的曲线工具,广泛应用于临床医学中。通过将阈值值与净效益进行比较,DCA曲线能够评估不同决策策略的优劣。横轴表示阈值,用于决定实际操作是否执行某种治疗策略,纵轴表示净效益,衡量该策略相对于其他策略的潜在有益性。DCA曲线的优势在于它考虑了患者和医生的风险偏好,能够提供关于决策策略的详细信息;另外DCA曲线用于评估预测模型预测准确性并确定最优的决策策略。通过绘制DCA曲线,可以使用不同的决策阈值来评估模型的敏感性和特异性,从而评估模型的预测性能。DCA曲线可以帮助医生和研究人员了解模型在不同决策阈值下的真阳性率和伪阳性率,进而选择最适合临床实践的决策策略。

  • 「DCA曲线在治疗效果评估和决策制定中的价值」

DCA曲线在评估治疗效果和指导决策制定方面具有重要价值。通过绘制不同决策策略的DCA曲线,医生可以直观地分析不同阈值下的净效益,并选择最佳治疗策略。DCA曲线能够提供信息,帮助医生在避免过度治疗和漏诊之间找到平衡点。在临床研究和实践中,DCA曲线可应用于多个领域,如癌症早期筛查、疾病诊断和治疗方案选择,为医生提供决策支持,并最大程度地优化患者的临床结果。

  • 「DCA曲线的局限性和改进方向」

尽管DCA曲线在临床医学中具有重要意义,但也存在一些局限性。首先,DCA曲线依赖于模型和数据的质量,因此在实际应用中需注意模型的可靠性和数据的准确性。其次,DCA曲线在面对不同患者群体和疾病情况时可能存在变化,需根据具体情况进行调整和解读。此外,DCA曲线的建立过程可能较为复杂,需要进一步改进算法和方法,以提高其实用性和可解释性。

为了提高DCA曲线的应用效果,未来的研究可以从以下几个方向进行改进。首先,应进一步优化数据收集和分析方法,以提高DCA曲线的准确性和稳定性。其次,结合生物标志物等新的临床指标,以完善DCA曲线在个体化医疗中的应用。此外,结合人工智能技术,提升DCA曲线的预测能力和决策支持水平。通过这些努力,我们可以进一步提高DCA曲线在临床医学中的意义和应用前景。

三、DCA曲线分析过程

  • 数据收集:收集相关的临床数据,包括患者特征、病史、临床诊断参数和治疗结果等。这些数据可以来自临床试验、医疗记录或其他医学数据库。
  • 模型构建:基于收集到的数据,构建一个预测模型,可以是机器学习模型、深度学习模型或其他预测模型。模型的选择取决于研究的具体需求和数据的特点。
  • DCA曲线生成:使用构建好的模型,针对不同的阈值值进行预测。将预测结果与实际观察结果进行比较,计算出每种阈值值下的净效益。根据这些计算结果,绘制出DCA曲线。
  • DCA曲线评估:对生成的DCA曲线进行评估,分析不同决策策略在不同阈值下的净效益。根据曲线的形状和特征,评估不同策略的优劣,并确定最优的治疗策略。
  • 结果解释:根据DCA曲线的结果,解释不同决策策略的潜在益处和风险,并与临床实践和指南进行比较。解释DCA曲线的结果可以帮助医生和决策者更好地理解不同策略的效果,从而做出更明智的决策。

四、案例展示

4.1 衡量医疗决策效果

  • 「数据集简介」

library(survival)
str(gbsg)

结果展示:

'data.frame':   686 obs. of  10 variables:
 $ age    : int  49 55 56 45 65 48 48 37 67 45 ...
 $ meno   : int  0 1 1 0 1 0 0 0 1 0 ...
 $ size   : int  18 20 40 25 30 52 21 20 20 30 ...
 $ grade  : int  2 3 3 3 2 2 3 2 2 2 ...
 $ nodes  : int  2 16 3 1 5 11 8 9 1 1 ...
 $ pgr    : int  0 0 0 0 0 0 0 0 0 0 ...
 $ er     : int  0 0 0 4 36 0 0 0 0 0 ...
 $ hormon : int  0 0 0 0 1 0 0 1 1 0 ...
 $ rfstime: int  1838 403 1603 177 1855 842 293 42 564 1093 ...
 $ status : Factor w/ 2 levels "0","1": 1 2 1 1 1 2 2 1 2 2 ...

age:患者年龄
meno:更年期状态(0表示未更年期,1表示已更年期)
size:肿瘤大小
grade:肿瘤分级
nodes:受累淋巴结数量
pgr:孕激素受体表达水平
er:雌激素受体表达水平
hormon:激素治疗(0表示否,1表示是)
rfstime:复发或死亡时间(以天为单位)
status:事件状态(0表示被截尾,1表示事件发生)
  • 「数据预处理」

gbsg_select <- gbsg[,c("age","meno","size","grade","nodes","pgr","er","hormon","rfstime","status")]
# 划分数据集为训练集和测试集
set.seed(123# 设置随机种子,保证结果的可复现性
train_index <- sample(1:nrow(gbsg), 0.7 * nrow(gbsg)) # 70%的数据作为训练集
train_data <- gbsg_select[train_index, ]
test_data <- gbsg_select[-train_index, ]
  • 「绘制DCA曲线」

library(rmda)
set.seed(123)
bs_md <- decision_curve(status ~ age + meno + size, data = train_data,
    thresholds = seq(00.4, by = 0.005), bootstraps = 10)

plot_decision_curve(bs_md,  
                    curve.names = "Baseline Model",
                    cost.benefit.axis =FALSE,
                    # col= c('red','blue'),
                    confidence.intervals=FALSE,
                    standardize = FALSE)

summary(bs_md,measure= 'NB')

结果展示:

Net Benefit (95% Confidence Intervals):
--------------------------------------------------------------------------------------------------
   risk      cost:benefit       percent             All         status ~ age + meno + size   None 
 threshold      ratio          high risk                                                          
----------- -------------- ------------------ ---------------- ---------------------------- ------
     0           0:1              100              0.444                  0.444               0   
                               (100, 100)      (0.412, 0.481)         (0.412, 0.481)              

   0.005        1:199             100              0.441                  0.441               0   
                               (100, 100)      (0.41, 0.479)          (0.41, 0.479)               
   0.065        13:187            100              0.405                  0.405               0   
                               (100, 100)      (0.372, 0.445)         (0.372, 0.445)              

   0.07          7:93             100              0.402                  0.402               0   
                               (100, 100)      (0.368, 0.442)         (0.368, 0.442)              

   0.075         3:37             100              0.399                  0.399               0   
                               (100, 100)      (0.365, 0.439)         (0.365, 0.439)              

   0.08          2:23             100              0.395                  0.395               0   
                               (100, 100)      (0.361, 0.436)         (0.361, 0.436)              

   0.085        17:183            100              0.392                  0.392               0   
                               (100, 100)      (0.358, 0.433)         (0.358, 0.433)              

   0.09          9:91             100              0.389                  0.389               0   
                               (100, 100)      (0.354, 0.43)          (0.354, 0.43)               
   0.115        23:177            100              0.371                  0.371               0   
                               (100, 100)      (0.336, 0.414)         (0.336, 0.414)              

   0.12          3:22             100              0.368                  0.368               0   
                               (100, 100)      (0.332, 0.411)         (0.332, 0.411)              

             

   0.295        59:141           99.792            0.211                  0.212               0   
                             (87.917, 100)     (0.167, 0.264)         (0.17, 0.265)               

    0.3          3:7             99.792            0.205                  0.206               0   
                             (87.917, 100)     (0.161, 0.259)         (0.165, 0.26)               

   0.305        61:139           99.792             0.2                   0.201               0   
                             (87.083, 100)     (0.155, 0.254)         (0.162, 0.259)              

   0.31         31:69            99.583            0.194                  0.196               0   
                             (84.375, 100)     (0.149, 0.248)         (0.146, 0.254)              

   0.315        63:137           99.167            0.188                  0.189               0   
                            (81.25, 99.792)    (0.142, 0.243)         (0.153, 0.249)              

   0.32          8:17            98.542            0.182                  0.186               0   
                            (81.042, 99.792)   (0.136, 0.237)         (0.149, 0.243)              

   0.325        13:27            98.333            0.176                  0.181               0   
                            (79.375, 99.583)   (0.13, 0.231)          (0.142, 0.239)              

   0.33         33:67            97.292             0.17                   0.18               0   
                            (77.292, 99.583)   (0.123, 0.226)         (0.138, 0.226)              

   0.335        67:133           96.875            0.164                  0.176               0   
                            (76.25, 99.583)    (0.117, 0.22)          (0.128, 0.22)               

   0.34         17:33            95.625            0.157                  0.173               0   
                            (74.583, 98.333)   (0.11, 0.214)          (0.122, 0.221)              

   0.345        69:131           94.583            0.151                   0.16               0   
                            (70.833, 98.333)   (0.103, 0.208)         (0.116, 0.216)              

   0.35          7:13            92.917            0.144                   0.16               0   
                            (67.708, 97.292)   (0.096, 0.202)         (0.111, 0.213) 

   0.375         3:5             82.917             0.11                  0.129               0   
                            (60.208, 92.292)    (0.06, 0.17)          (0.086, 0.205)              

   0.38         19:31            80.417            0.103                  0.122               0   
                            (59.375, 90.208)   (0.052, 0.163)          (0.085, 0.2)               

   0.385        77:123           79.167            0.096                  0.121               0   
                              (56.25, 90)      (0.045, 0.157)         (0.067, 0.204)              

   0.39         39:61            76.042            0.088                  0.115               0   
                            (55.208, 89.583)   (0.037, 0.15)          (0.069, 0.205)              

   0.395        79:121           73.958            0.081                  0.103               0   
                            (52.917, 88.333)   (0.029, 0.143)         (0.056, 0.191)              

    0.4          2:3             70.208            0.073                  0.105               0   
                            (51.875, 87.292)   (0.021, 0.135)         (0.044, 0.199)              
--------------------------------------------------------------------------------------------------

仅仅作为展示,中间删除了很大一部分,太长了。

  • 「多模型比较」
full_md <- decision_curve(status ~ age + meno + size + grade + nodes + pgr + er + hormon, data = train_data,
    thresholds = seq(00.4, by = 0.005), bootstraps = 10)

plot_decision_curve( list(bs_md, full_md),
                    curve.names = c("Baseline model""Full model"),
                    col = c("blue""red"),
                    confidence.intervals = FALSE,  #remove confidence intervals
                    cost.benefit.axis = FALSE#remove cost benefit axis
                    legend.position = "topright"

从图中可以看出,全模型的效果是比基础模型的效果是要更优的。

4.2 模型性能比较

devtools::install_github("yikeshu0611/ggDCA")
library(ggDCA)

lrm1 <- lrm(status ~ age + meno + size, data = train_data)

lrm2 <- lrm(status ~ age + meno + size + grade, data = train_data)

lrm3 <- lrm(status ~ age + meno + size + grade + nodes + pgr, data = train_data)

dca_md <- dca(lrm, lrm2, lrm3, model.names = c("base""base + size""base + size + node +pgr"))
ggplot(dca_md)

五、DCA曲线解读

  • X轴:X轴通常代表决策曲线中的阈值,即预测概率或预测分数的截断点。X轴的取值范围是预先设定的,例如在您的代码示例中,从0到0.4之间,间隔为0.005。
  • Y轴:Y轴代表DCA曲线的净效益(net benefit)。净效益是通过计算“真阳性数目减去假阳性数目”的结果,再乘以一个权重因子(称为网络好处比,net benefit ratio)得到的。通常,Y轴的值越高,表示模型具有更好的净效益。
  • 基准线:DCA曲线上的基准线(reference line)表示在没有进行任何预测的情况下(即将所有患者都作为阳性或阴性),所获得的默认策略的净效益。曲线位于基准线之上的区域表示模型的预测策略优于默认策略。
  • 不同模型或策略的曲线:如果您进行了多个模型或策略的比较,DCA曲线可以同时展示它们的结果。通过比较不同曲线之间的高低,可以了解到每个模型在不同阈值下的净效益优劣。
  • 最优阈值选择:DCA曲线上的最高点对应的阈值是最优的选择,因为在该点时模型能够获得最大的净效益。
  • 曲线相对位置:如果一个模型的曲线明显高于其他模型的曲线或基准线,意味着该模型在大多数阈值范围内能够获得更好的净效益。
  • 阈值选择的影响:可以观察不同阈值选择对净效益的影响。例如,在低阈值下,可能会增加假阳性率,而在高阈值下,可能会增加漏诊率。选择合适的阈值需要基于任务需求和成本效益的考虑。

参考文献:

[1] Collins, F. S., & Varmus, H. (2015). A new initiative on precision medicine. New England Journal of Medicine, 372(9), 793-795.

[2] Hamburg, M. A., & Collins, F. S. (2010). The path to personalized medicine. New England Journal of Medicine, 363(4), 301-304.

[3] Vickers, A. J., & Elkin, E. B. (2006). Decision curve analysis: A novel method for evaluating prediction models. Medical decision making, 26(6), 565-574.

[4] van Klaveren, D., Steyerberg, E. W., & Koffijberg, H. (2012). Determining the utility for clinical prediction models: a discussion. BMC medical informatics and decision making, 12(1), 1-5.

[5] Rajkomar, A., Dean, J., & Kohane, I. (2019). Machine learning in medicine. New England Journal of Medicine, 380(14), 1347-1358.

[6] Tagliaferri, L., Petrillo, A., & Tagliaferri, F. (2020). AI and machine learning applied to cancer prevention and detection: Challenges and perspectives. Frontiers in oncology, 10, 576581.

*「未经许可,不得以任何方式复制或抄袭本篇文章之部分或全部内容。版权所有,侵权必究。」

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MACD进阶版指标公式,提前一天判断MACD金叉

MACD是一种常用的技术分析指标&#xff0c;用于判断价格的趋势和动能&#xff0c;其原理是基于两条指数移动平均线的比较和对价格的平滑处理&#xff0c;MACD金叉是指MACD指标中的快线DIF从下方向上穿过慢线DEA。快线、慢线都是根据收盘价计算出来的&#xff0c;如果想提前一天…

STM32基础知识点总结

一、基础知识点 1、课程体系介绍 单片机概述arm体系结构STM32开发环境搭建 STM32-GPIO编程-点亮世界的那盏灯 STM32-USART串口应用SPI液晶屏 STM32-中断系统 STM32-时钟系统 STM32-ADC DMA 温湿度传感器-DHT11 2.如何学习单片机课程 多听理论、多理解、有问题及时提问 自己多…

论文阅读:基于深度学习的大尺度遥感图像建筑物分割研究

一、该网络中采用了上下文信息捕获模块。通过扩大感受野&#xff0c;在保留细节信息的同时&#xff0c;在中心部分进行多尺度特征的融合&#xff0c;缓解了传统算法中细节信息丢失的问题&#xff1b;通过自适应地融合局部语义特征&#xff0c;该网络在空间特征和通道特征之间建…

时间序列预测 | Matlab基于粒子群算法(PSO)优化径向基神经网络(PSO-RBF)的时间序列预测

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 时间序列预测| Matlab基于粒子群算法(PSO)优化径向基神经网络(PSO-RBF)的时间序列预测 评价指标包括:MAE、MBE和R2等,代码质量极高,方便学习和替换数据。要求2018版本及以上。 部分源码 %% 清空环境变量 warni…

2023年开放式蓝牙耳机选购指南!多款热门开放式蓝牙耳机品牌盘点

前言 大家好&#xff0c;作为专注耳机研究多年的发烧级爱好者&#xff0c;毫不夸张地说我为耳机花的钱比买衣服还多&#xff0c;很多人都在问我开放式耳机到底有没有必要买&#xff1f;答案毫无疑问是有必要&#xff01;开放式耳机佩戴舒适又安全的特质让它在耳机届风靡&#…

zabbix server is not running错误解决方法

1.错误&#xff1a;zabbix server is not running 打开zabbix server的时候&#xff0c;底部飘着一行黄色的警告字 2.解决方法 (1)关闭selinux (2)查看日志文件 #tail -f /var/log/zabbix/zabbix_server.log 发现内存溢出了 __zbx_mem_realloc(): out of memory 那…

vitepress使用

vitepress使用 初始化项目 pnpm init pnpm add vitepress vue 创建一个docs文件夹 在docs下新建index.js文件 # Hello VitePress在package.json中增加打包以及运行的指令 "scripts": {"docs:dev": "vitepress dev docs", // 本地运行调试&qu…

springboot高校党务系统

开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.3.9

实力认可丨通付盾上榜《嘶吼2023网络安全产业图谱》31项细分领域

7月10日&#xff0c;嘶吼安全产业研究院联合国家网络安全产业园区&#xff08;通州园&#xff09;正式发布《嘶吼2023网络安全产业图谱》。通付盾入围本次图谱的基础技术与通用能力、网络与通信安全、安全服务、应用与产业安全、数据安全、开发与应用安全六大类别&#xff0c;3…

day32-Oracle+servlet

0目录 Oraclejdbcjspservlet 1.准备物料 1.1 创建Maven工程&#xff0c;导入依赖 方法1&#xff1a;在maven本地仓库repo中放入下载好的jar包 方法2&#xff1a;换版本&#xff0c;引入依赖 <dependency> <groupId>com.oracle.database.jdbc</groupId>…

x3550M5服务器,2008r2系统,关机后再开机,提示需要系统修复

问题现象&#xff1a; x3550M5服务器&#xff0c;2008r2系统&#xff0c;关机后再开机&#xff0c;提示需要修复&#xff0c;选择语言&#xff0c;点击下一步&#xff0c;选择操作系统一栏是空白的 &#xff08;加载前的图忘记拍&#xff09; 问题分析&#xff1a; 根据网上…

关于c/c++中的isdigit()函数(判断一个字符是不是数字字符)

1&#xff1a;做用&#xff1a;判断一个字符是不是数字字符&#xff08;即&#xff1a;相当于&#xff1a;s[i]>0&&s[i]<9&#xff09; 2&#xff1a;使用方式 char cA; string s"123fgv"; if(isdigit(c)); if(isdigit(s[i]))//返回bool类型 3&…

服务端⾼并发分布式结构演进之路

1.前置概念 应⽤&#xff08;Application&#xff09;/系统&#xff08;System&#xff09; 为了完成一整套服务的一个程序或相互配合的程序群 模块&#xff08;Module&#xff09;/组件&#xff08;Component&#xff09; 当应⽤较复杂时&#xff0c;为了分离职责&#xf…

我爱学QT-制作一个最简单的QT界面

1.qt基础 qt的移植性非常强&#xff0c;一套代码不用我们改太多&#xff0c;直接通用所有平台。不久的将来&#xff0c;qt会被用到MCU上&#xff0c;学习QT还是非常有意义的。 2.做一个简单的QT界面 首先新建工程 注意这个不一样 工程文件分析&#xff1a; #--------------…

day32-存储过程、存储函数、触发器

0目录 Oracle 存储过程、存储函数、触发器 1. 1.1 序列 &#xff08;1&#xff09;语法 创建序列&#xff1a;create sequence 序列名; 启动序列&#xff1a;select 序列名.nextval from dual;&#xff08;每次执行会1&#xff09; 使用序列插入数据&#xff1a;insert…

echarts饼图设置颜色的两种方式

1. 直接写在color数组中 option {color:[#fac858,#e0504b,#e6e9ee],series: {type: pie,radius: [40%, 70%],data: [{ value: 1048, name: Search Engine, },{ value: 735, name: Direct},{ value: 580, name: Email },]} };2. 在series.data.itemStyle.color中 option {se…

Android 14 的 8 个重要新特性深度解析

Android 14 的 8 个重要新特性深度解析 每年一次的Android升级从不缺席。今年的版本名为倒置蛋糕&#xff08;Upside Down Cake&#xff09;&#xff0c;简称U&#xff0c;对外的版本号是Android 14。 通常来说&#xff0c;升级任务可以从两个角度来考虑&#xff1a;ROM角度和…

【thinkPHP】数据库查询

最近在做一个小程序项目&#xff0c;后端使用php&#xff0c;php的优点是快速开发&#xff0c;简单&#xff0c;对服务器资源使用少&#xff08;没什么钱买服务器&#xff09;&#xff0c;相对于java那种动不动就2g起步的内存。 说明&#xff1a;在使用Db时需要引入Db的facade…

ORB-SLAM2学习笔记1之Ubuntu20.04+ROS-noetic安装ORB-SLAM2

文章目录 0 引言1 安装依赖1.1 opencv安装1.2 Eigen3安装1.3 Pangolin安装1.4 其他 2 编译安装ORB-SLAM22.1 build.sh2.2 build_ros.sh 0 引言 ORB-SLAM2是一种用于单目、双目和RGB-D相机的视觉SLAM&#xff08;同时定位与地图构建&#xff09;系统。它由萨拉戈萨大学和伦敦帝…