Decision Curve Analysis-1-二分类模型的决策曲线绘制
  IwAQx7pW1xBE 2023年11月02日 26 0

我整理了《BAT常见机器学习算法面试题1000题》,供大家学习和参考。资源获取方式:

(1)打开v搜索:医学大数据与人工智能,并关注。

(2)在对话框中输入:E001,即可获取资源地址。

诊断和预后模型通常使用准确性指标进行评估,如曲线下面积(AUC)或Brier评分,这些指标不涉及临床结果。决策分析技术可以评估临床结果,但通常需要收集大量额外的信息,而且应用于从0到1的连续风险估计的模型很麻烦。决策曲线分析允许合并临床结果,从而解决了一个模型是否利大于弊的问题,但能够在没有过多的外部数据的情况下做到这一点。

本文将介绍如何在各种不同的设置中执行决策曲线分析,然后如何解释生成的曲线。在决策曲线分析中,将模型与两种默认策略进行比较:1)假设所有患者的检测结果均为阳性,因此对所有患者进行治疗;2)假设所有患者的检测结果均为阴性,因此不对任何人提供治疗。注意:这里的“治疗”指的是最广泛的意义,不仅包括药物、放疗或手术,还包括建议、进一步的诊断程序或更密切的监测。

有关DCA的更多信息,可以访问http://www.decisioncurveanalysis.org:您可以找到解释净收益理论和数学推导的原始文章,以及证明决策曲线分析优于其他模型评估方法的论文。下面我们将介绍如何使用R和Python对二进制和事件时间结果执行决策曲线分析。该代码适用于所有语言,但是我们只显示R函数的输出。

包的安装和加载

使用下面的脚本安装决策曲线分析需要的函数和/或加载它们以供使用。

# install dcurves to perform DCA from CRAN
install.packages("dcurves")

# install other packages used in this tutorial
install.packages(
  c("tidyverse", "survival", "gt", "broom",
    "gtsummary", "rsample", "labelled")
)

# load packages
library(dcurves)
library(tidyverse)
library(gtsummary)

二分类结局的DCA分析

演示案例

我们将使用一个包含癌症诊断信息的示例数据集。该数据集包括750名患者的信息,这些患者最近发现自己有一种基因突变,使他们患癌症的风险更高。每个病人都做过活组织检查,我们知道他们的癌症状况。据了解,有癌症家族史的老年患者隐藏癌症的可能性更高。一位临床化学家最近发现了一种标记物,她认为这种标记物可以区分癌症患者和非癌症患者。我们希望评估这种新的标记是否确实能区分癌症患者和非癌症患者。如果标记物确实可以良好预测癌症是否发生,许多患者将不需要进行痛苦的活检。

数据设置

我们将逐步介绍如何导入数据、基于多个变量构建模型,并使用这些模型获得预测的概率。第一步是导入数据。一旦导入了数据,就可以开始构建模型了。由于我们有一个二元结果(即我们的模型的结果有两个类别:癌症或无癌症),我们将使用逻辑回归模型。

# import data
df_cancer_dx <-
  readr::read_csv(
    file = "https://raw.githubusercontent.com/ddsjoberg/dca-tutorial/main/data/df_cancer_dx.csv"
  ) %>%
  # assign variable labels. these labels will be carried through in the `dca()` output
  labelled::set_variable_labels(
    patientid = "Patient ID",
    cancer = "Cancer Diagnosis",
    risk_group = "Risk Group",
    age = "Patient Age",
    famhistory = "Family History",
    marker = "Marker",
    cancerpredmarker = "Probability of Cancer Diagnosis"
  )

# summarize data
df_cancer_dx %>%
  select(-patientid) %>%
  tbl_summary(type = all_dichotomous() ~ "categorical")

Decision Curve Analysis-1-二分类模型的决策曲线绘制_统计模型

单变量决策曲线分析

首先,我们想确认癌症的家族史确实与活检结果有关。

# build logistic regression model
mod1 <- glm(cancer ~ famhistory, data = df_cancer_dx, family = binomial)

# model summary
mod1_summary <- tbl_regression(mod1, exponentiate = TRUE)
mod1_summary

Decision Curve Analysis-1-二分类模型的决策曲线绘制_统计模型_02

通过以癌症为结果的logistic回归,我们可以看到家族史与活检结果的OR比为1.80 (95% CI 1.07, 2.96;p = 0.022)。决策曲线分析可以帮助我们解决利用家族史预测活检结果的临床效用。

dca(cancer ~ famhistory, data = df_cancer_dx) %>%
  plot()

Decision Curve Analysis-1-二分类模型的决策曲线绘制_决策曲线分析_03

首先,请注意这里显示的许多阈值概率不是我们感兴趣的。例如,病人不太可能在接受活检之前要求自己至少有50%的癌症风险。让我们再次进行决策曲线分析,这次将输出限制在一个更合理的临床范围内的阈值概率。我们认为,如果一个患癌症的风险低于5%的病人选择活组织检查是没有意义的;同样,如果风险超过35%,不做活检也是不合理的。我们想看看5%到35%之间的情况。因为5%非常接近于0%,我们将显示0%到35%之间的范围。

dca(cancer ~ famhistory,
  data = df_cancer_dx,
  thresholds = seq(0, 0.35, 0.01)
) %>%
  plot()

Decision Curve Analysis-1-二分类模型的决策曲线绘制_决策曲线分析_04

现在,图表显示了一个更合理的阈值概率范围,让我们单独评估家族史的临床效用。我们在这里可以看到,尽管家族史与活检结果显著相关,但它只增加了一个小范围的阈值概率,接近13% - 20%。如果你的个人阈值概率为15%(即,如果你的癌症概率为15%或更高,你才会进行活检),那么仅凭家族史就可以有助于做出进行活检的决定。然而,如果阈值概率小于13%或大于20%,那么使用家族史来决定是否活检比分别选择活检或不活检的好处要小。

多变量决策曲线分析

  • 新模型的评价

我们想要检查一个包含家族史、年龄和生物标记物的统计模型的价值。首先,我们将建立三个变量的逻辑回归模型,其次,我们将根据该模型保存患癌症的预测概率。注意,在我们的示例数据集中,这个变量实际上已经存在,因此不需要再次创建预测的概率。

# build multivariable logistic regression model
mod2 <- glm(cancer ~ marker + age + famhistory, data = df_cancer_dx, family = binomial)

# summarize model
tbl_regression(mod2, exponentiate = TRUE)

# add predicted values from model to data set
df_cancer_dx <-
  df_cancer_dx %>%
  mutate(
    cancerpredmarker =
      broom::augment(mod2, type.predict = "response") %>%
        pull(".fitted")
  )

Decision Curve Analysis-1-二分类模型的决策曲线绘制_统计模型_05

现在我们想要比较不同的癌症检测方法:对每个人进行活检,对任何人都进行活检,根据家族史进行活检,或者根据多变量统计模型进行活检,包括生物标记物,年龄和癌症家族史。

dca(cancer ~ famhistory + cancerpredmarker,
  data = df_cancer_dx,
  thresholds = seq(0, 0.35, 0.01),
  label = list(cancerpredmarker = "Probability of Cancer Diagnosis")
) %>%
  plot(smooth = TRUE)

Decision Curve Analysis-1-二分类模型的决策曲线绘制_决策曲线分析_06

决策曲线分析的关键方面是查看哪种策略能带来最大的净收益(即“最高”线),在本例中,这与包括年龄、癌症家族史和生物标记物的模型相对应。很明显,统计模型在整个阈值概率范围内具有最高的净效益。

还有几点值得注意。首先,看这条绿线,“治疗所有人”的净收益,也就是对每个人进行活检。与y轴相交的是患病率。假设一名男子的风险阈值为14%,并询问他在“所有活检”策略下的风险。他会被告知他的风险是患病率(14%),因此无法决定是否进行活检。当病人的风险阈值与他的预测风险相同时,活检和不活检的净收益是相同的。

第二,二元变量的决策曲线(家族癌症史,棕色线)穿过“所有男性活检”线,在1 -阴性预测值。同样,这很容易解释:阴性预测值为87%,因此没有癌症家族史的患者患病的概率为13%;因此,阈值概率小于此值的患者——例如,即使风险为10%也会选择活检的患者——即使他们没有癌症家族史也应该进行活检。二元变量的净收益相当于在阳性预测值下进行活检。这是因为对于二元变量,具有该特征的患者被赋予了阳性预测值的风险。

联合检测或条件检测

医学上的许多决定都是基于联合或条件检测结果。一个典型的例子是,根据检测结果将患者分为高、低或中等风险。高危患者立即转诊接受治疗(在我们的例子中为活检);向低风险患者保证,并告知无需采取进一步行动;中等风险的患者会被送去做额外的检查,然后做出相应的治疗决定。

想象一下,在我们的例子中,有前期检查将我们的患者分为高、低和中等癌症风险,我们想要合并我们的标记。有五种临床选择:

  • 对每个患者进行活检
  • 不对患者进行活检
  • 对所有癌症高危人群进行活检;不用生物标记物
  • 测量每个患者的生物标记物,然后根据生物标记物,对癌症高风险或癌症概率超过一定水平的人进行活检(即联合方法)
  • 对高危人群进行活检;测量中等风险患者的生物标记物水平,并根据生物标记物,对癌症发生概率超过一定水平的患者进行活检(即条件法)

决策曲线分析可以结合联合检测或条件检测。所需要的只是从数据集中计算出适当的变量;然后按正常方法计算决策曲线。首先,我们将创建变量来表示我们的联合和条件方法。对于我们的例子,让我们使用0.15作为已测量其标志物并应进行活检的患者的截止概率水平。

Decision Curve Analysis-1-二分类模型的决策曲线绘制_统计模型_07

这似乎表明,对于5% - 24%的阈值概率范围,联合测试是更好的选择,因为它在该范围内具有最高的净效益。对于阈值概率小于5%的情况,治疗所有疾病的临床选择将优于任何其他选择,尽管很少有治疗阈值如此低的情况。在28%-35%之间,条件检验是稍好的选择,在这两个范围之间,联合检验和条件检验具有可比性。联合检验的明显缺点是需要为每个人测量生物标记物,这种测试可能昂贵和耗时,特别是如果生物标记物是一个成像测试。

将危害纳入模型评估

为了考虑与获得生物标记物相关的危害,我们询问了一位临床医生,他告诉我们,即使生物标记物非常准确,也很少有临床医生会为了预测一个癌症诊断而进行超过30次的测试。这可能是因为检测费用昂贵,或者需要一些侵入性的程序来获得。测量生物标记物的“危害”是30的倒数,即0.0333。

为了构建每种策略的决策曲线,我们现在将危害纳入其中。我们必须特别计算条件检验的危害,因为只有处于中等风险的患者才被测量生物标记物。然后把它纳入我们的决策曲线。将危害纳入条件检验的策略是将扫描的比例乘以扫描的危害。

Decision Curve Analysis-1-二分类模型的决策曲线绘制_统计模型_08

在这里,条件检测显然是最好的选择(高于8%的治疗阈值),事实上,一旦你考虑到测量生物标记物的危害,显然不值得为每个人测量生物标记物:仅治疗高危患者的净收益往往高于联合检测。

保存净效益值

我们可以把决策曲线的净收益保存下来,以便进一步分析或在表格中表示。我们只需要指定我们希望将其保存为的文件名。对于阈值概率的特定范围,我们只需要指定开始、停止的阈值和希望使用的增量。为了评估或显示净效益的增加,我们只需要从我们模型的净效益中减去基于治疗所有患者的模型的净效益。

让我们想象一下,我们想要查看仅使用该生物标记物来预测患者是否患有癌症的净收益,与将所有患者在阈值5%、10%、15%、35%进行活检的净收益进行比较。

对于模型本身,我们实际上需要首先指定生物标记物——与之前的任何模型不同——不是一个概率。根据我们的阈值,我们希望从0.05开始,以0.05为增量,止于0.35。由于我们对图形不感兴趣,我们还可以指定禁止显示图形。

Decision Curve Analysis-1-二分类模型的决策曲线绘制_统计模型_09

保存的表列出了我们指定的阈值概率的范围,其次是治疗所有人的净收益,没有治疗,我们指定的模型,避免干预(我们将在下面讨论),以及新创建的变量,它代表我们的模型只使用标记物的净收益的增加。
净效益有现成的临床解释。在20%的阈值概率下0.03的值可以解释为:“与不进行活检相比,基于该标记物进行活检相当于每100名患者中发现3例癌症,而不进行任何不必要的活检。”

干预措施避免量

在许多情况下,默认的临床策略是对所有患者进行干预,因此模型或标记物的目的是帮助减少不必要的干预。传统方法的净效益是根据真阳性病例与不治疗相比的净增加来计算的,与此相反,我们还可以根据与“全治疗”策略相比的假阳性病例的净减少来计算净效益。例如,在我们的癌症活检的例子中,我们可能感兴趣的是我们是否可以减少活检的数量。在保存出来的表中。为了以图形的方式查看干预措施的减少,我们只需要在命令中指定它。

Decision Curve Analysis-1-二分类模型的决策曲线绘制_决策曲线分析_10

在15%的概率阈值下,干预措施的净减少约为每100例患者33例。换句话说,在这个概率阈值下,根据标记物对患者进行活检相当于将活检率降低33%,而不遗漏任何癌症患者。


欢迎个人转发朋友圈;其他机构或自媒体如需转载,后台留言申请授权;需要完整代码,可以私信留言。

版权声明:仅用于学术分享。若有侵权,请联系后台删除或修改!

整理:炼数之道

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

IwAQx7pW1xBE