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

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

一、引言



在当今医学领域中,精准医学作为一种以个体差异为基础的医疗模式逐渐受到重视和应用[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(0, 0.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)              
--------------------------------------------------------------------------------------------------


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

640.png


  • 「多模型比较」
full_md <- decision_curve(status ~ age + meno + size + grade + nodes + pgr + er + hormon, data = train_data,
    thresholds = seq(0, 0.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")

640.png


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


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"), new.data = test_data)
ggplot(dca_md)

640.png


五、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.


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


目录
相关文章
|
1月前
|
机器学习/深度学习 人工智能 搜索推荐
探索人工智能在现代医疗中的革新应用
本文深入探讨了人工智能(AI)技术在医疗领域的最新进展,重点分析了AI如何通过提高诊断准确性、个性化治疗方案的制定以及优化患者管理流程来革新现代医疗。文章还讨论了AI技术面临的挑战和未来发展趋势,为读者提供了一个全面了解AI在医疗领域应用的视角。
74 11
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
人工智能在医疗诊断中的应用与前景####
本文深入探讨了人工智能(AI)技术在医疗诊断领域的应用现状、面临的挑战及未来发展趋势。通过分析AI如何辅助医生进行疾病诊断,提高诊断效率和准确性,以及其在个性化医疗中的潜力,文章揭示了AI技术对医疗行业变革的推动作用。同时,也指出了数据隐私、算法偏见等伦理问题,并展望了AI与人类医生协同工作的前景。 ####
98 0
|
6天前
|
机器学习/深度学习 人工智能 运维
人工智能在事件管理中的应用
人工智能在事件管理中的应用
48 20
|
10天前
|
机器学习/深度学习 数据采集 人工智能
人工智能在农业中的应用:智慧农业的未来
人工智能在农业中的应用:智慧农业的未来
39 11
|
30天前
|
人工智能 缓存 异构计算
云原生AI加速生成式人工智能应用的部署构建
本文探讨了云原生技术背景下,尤其是Kubernetes和容器技术的发展,对模型推理服务带来的挑战与优化策略。文中详细介绍了Knative的弹性扩展机制,包括HPA和CronHPA,以及针对传统弹性扩展“滞后”问题提出的AHPA(高级弹性预测)。此外,文章重点介绍了Fluid项目,它通过分布式缓存优化了模型加载的I/O操作,显著缩短了推理服务的冷启动时间,特别是在处理大规模并发请求时表现出色。通过实际案例,展示了Fluid在vLLM和Qwen模型推理中的应用效果,证明了其在提高模型推理效率和响应速度方面的优势。
云原生AI加速生成式人工智能应用的部署构建
|
25天前
|
数据采集 人工智能 移动开发
盘点人工智能在医疗诊断领域的应用
人工智能在医疗诊断领域的应用广泛,包括医学影像诊断、疾病预测与风险评估、病理诊断、药物研发、医疗机器人、远程医疗诊断和智能辅助诊断系统等。这些应用提高了诊断的准确性和效率,改善了患者的治疗效果和生活质量。然而,数据质量和安全性、AI系统的透明度等问题仍需关注和解决。
201 10
|
1月前
|
机器学习/深度学习 人工智能 算法
探索人工智能在医疗诊断中的应用
本文深入探讨了人工智能(AI)技术在医疗诊断领域的革新性应用,通过分析AI如何助力提高诊断准确性、效率以及个性化治疗方案的制定,揭示了AI技术为现代医学带来的巨大潜力和挑战。文章还展望了AI在未来医疗中的发展趋势,强调了跨学科合作的重要性。 ###
99 9
|
1月前
|
机器学习/深度学习 数据采集 人工智能
深度探索:人工智能在医疗影像诊断中的应用与挑战####
本文旨在深入剖析人工智能(AI)技术在医疗影像诊断领域的最新进展、核心优势、面临的挑战及未来发展趋势。通过综合分析当前AI算法在提高诊断准确性、效率及可解释性方面的贡献,结合具体案例,揭示其在临床实践中的实际价值与潜在局限。文章还展望了AI如何与其他先进技术融合,以推动医疗影像学迈向更高层次的智能化时代。 ####
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
探索未来编程:Python在人工智能领域的深度应用与前景###
本文将深入探讨Python语言在人工智能(AI)领域的广泛应用,从基础原理到前沿实践,揭示其如何成为推动AI技术创新的关键力量。通过分析Python的简洁性、灵活性以及丰富的库支持,展现其在机器学习、深度学习、自然语言处理等子领域的卓越贡献,并展望Python在未来AI发展中的核心地位与潜在变革。 ###
|
1月前
|
机器学习/深度学习 数据采集 人工智能
探索人工智能在医疗诊断中的应用与挑战
随着人工智能技术的飞速发展,其在医疗领域的应用日益广泛,尤其是在疾病诊断方面展现出巨大的潜力。本文将深入探讨AI技术在医疗诊断中的应用现状、面临的挑战以及未来的发展趋势,旨在为相关领域的研究者和从业者提供参考和启示。
58 2