一、引言
乳腺癌是女性常见的恶性肿瘤之一,对女性的身体健康和生命安全产生了重要影响。早期诊断和风险评估可以帮助医生和患者制定更好的治疗方案,并提高治愈率和生存率。因此,乳腺癌风险评估模型的研究和应用变得越来越重要。
在乳腺癌风险评估的研究中,评估模型的多样性和鲁棒性是一个重要的问题。目前存在的评估模型往往具有不同的结构和参数设置,可能会导致预测结果的差异。为了解决这个问题,本文引入多模型DCA曲线作为评估模型多样性和鲁棒性的方法。
在本文中,我们将介绍乳腺癌风险评估模型的现状和挑战,解释多模型DCA曲线的概念和应用,并展示多模型DCA曲线作为评估乳腺癌风险评估模型多样性和鲁棒性的方法的实际效果。通过本文的阐述,我们希望为乳腺癌风险评估模型的发展和应用提供一些新的思路和方法。
二、风险评估模型现状和挑战
2.1 乳腺癌风险评估模型
目前使用的乳腺癌风险评估模型主要包括以下几种:
- Gail模型:Gail模型是最早被广泛应用的乳腺癌风险评估模型之一。它基于年龄、族群、家族史、生育历史等因素来评估个体患乳腺癌的风险。
- Tyrer-Cuzick模型:Tyrer-Cuzick模型是另一种常用的乳腺癌风险评估模型,它综合考虑了更多因素,如个体的年龄、家族史、BRCA1/BRCA2突变等遗传因素,并可以根据个体的详细信息进行个性化风险评估。
- BOADICEA模型:BOADICEA模型是一种基于家族史的乳腺癌风险评估模型,它专注于家族中存在突变的患者,并考虑了多代家族成员的信息,帮助识别高风险家族。
- IBIS模型:IBIS模型是一种用于个体化乳腺癌风险评估的工具,它综合考虑了个体的危险因素,如年龄、体重、饮食习惯等,以及乳房密度等因素。
2.2 模型的多样性和鲁棒性
- 模型多样性:不同的乳腺癌风险评估模型采用的变量和评估方法可能存在差异,导致结果的差异性。这使得选择适合特定人群或研究场景的模型变得具有挑战性。
- 数据质量和可用性:乳腺癌风险评估模型需要大量的高质量数据用于训练和验证。然而,在某些地区或种族中,数据的可用性和质量可能存在限制,这对模型的开发和应用带来了挑战。
- 预测精度和准确性:乳腺癌风险评估模型的预测精度和准确性是关键问题。虽然现有模型已经取得了一定的成功,但仍有改进的空间,特别是在提高敏感性和特异性方面。
- 个体化风险评估:针对个体进行更准确的风险评估是一个重要的挑战。现有模型大多是基于人群统计数据开发的,缺乏个体特异性,因此如何将个体信息纳入模型,实现更加准确的个体化风险评估是需要解决的问题。
三、多模型DCA曲线简介
3.1 DCA曲线的概念和意义
「DCA曲线(Decision Curve Analysis)」 是一种评估预测模型临床应用价值的可视化工具。DCA曲线基于医学决策理论,将预测模型的预测结果与实际临床决策进行比较,评估模型在不同阈值下的准确性和利益。DCA曲线的横轴表示阈值范围,纵轴表示净利益(即真阳性率减去假阳性率),曲线上的点表示该阈值下模型的净利益。
3.2 多模型DCA曲线的概念
多模型DCA曲线指的是将多个预测模型的DCA曲线绘制在同一图表中,用于比较不同模型之间的优劣和多样性。通过比较不同模型在不同阈值下的净利益,可以评估模型的多样性和鲁棒性。多模型DCA曲线的绘制需要针对不同模型分别计算其预测结果、净利益、敏感性和特异性等参数。
3.3 多模型DCA曲线应用场景和优势
「多模型DCA曲线的应用场景包括:」
- 「选择最佳模型」:当需要在多个预测模型之间选择最佳模型时,可以使用多模型DCA曲线比较它们在不同阈值下的净利益。在选择最佳模型时,应考虑模型的多样性和鲁棒性,以及实际临床应用的可行性。
- 「评估模型改进」:在改进已有预测模型或开发新的预测模型时,可以使用多模型DCA曲线比较改进前后或不同模型之间的差异。通过比较净利益的差异,可以评估模型改进的效果和优势。
- 「研究模型适用性」:在不同种族、性别、年龄或疾病状态等人群中应用预测模型时,可以使用多模型DCA曲线比较不同模型在不同人群中的适用性和准确性。
「多模型DCA曲线的优势包括:」
- 「比较直观」:多模型DCA曲线通过可视化方式直观显示了不同模型在不同阈值下的净利益,使得比较不同模型的优劣更加容易理解。
- 「综合评估」:多模型DCA曲线综合考虑了不同模型的敏感性、特异性和预测准确性等指标,使得评估结果更全面和准确。
- 「个性化评估」:多模型DCA曲线可以根据不同人群、不同阈值和不同决策目标进行个性化评估,具有较大的灵活性和适用性。
四、实例展示
- 「数据集准备」
library(survival) head(gbsg)
结果展示:
pid age meno size grade nodes pgr er hormon rfstime status 1 132 49 0 18 2 2 0 0 0 1838 0 2 1575 55 1 20 3 16 0 0 0 403 1 3 1140 56 1 40 3 3 0 0 0 1603 0 4 769 45 0 25 3 1 0 4 0 177 0 5 130 65 1 30 2 5 0 36 1 1855 0 6 1642 48 0 52 2 11 0 0 0 842 1
- 「示例数据集介绍」
> 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表示事件发生)
- 「划分训练集和测试集」
# 划分训练集和测试集 set.seed(123) data <- gbsg[,c(-1)] data$status <- as.factor(data$status)
- 「加载依赖库」
install.packages("tidymodels") install.packages("discrim") library(tidymodels) library(discrim)
- 「训练机器学习模型」
# 设置recipe rec <- recipe(status~.,data) xgb_mod <- boost_tree() %>% set_engine("xgboost") %>% set_mode("classification") dt_mod <- decision_tree() %>% set_engine("rpart") %>% set_mode("classification") logistic_mod <- logistic_reg() %>% set_engine('glm') nnet_mod <- mlp() %>% set_engine('nnet') %>% set_mode('classification') rf_mod <- rand_forest() %>% set_engine('ranger') %>% set_mode('classification') svm_mod <- svm_rbf() %>% set_engine('kernlab') %>% set_mode('classification') wf <- workflow_set(preproc=list(rec), models=list(xgb=xgb_mod, dt=dt_mod, log= logistic_mod, nnet=nnet_mod, rf=rf_mod, svm=svm_mod)) folds <- bootstraps(data,10) ctr <- control_resamples(save_pred = TRUE) wf_res <- wf %>%workflow_map("fit_resamples",resamples=folds, control=ctr)
- 「绘制单个模型的DCA曲线」
绘制的DCA曲线依次为XGBoost、decision_tree、Logistic、nnet、randomForest和SVM。
library(dcurves) p <- collect_predictions(wf_res) %>% group_by(wflow_id) %>% group_map(~dca(data=.x,status~.pred_1)) # XGBoost p[[1]] # decision_tree p[[2]]
这里只贴XGBoost和decision_tree,对应的指标是12,剩下的就是3456了,如果想看的话可以自己打印出来。
- 「绘制组合DCA曲线」
dca_data <- collect_predictions(wf_res) %>% group_by(model) %>% select(status,.pred_1) %>% tidyr::pivot_wider( names_from = model, values_from = .pred_1) %>% unnest() dca(data = dca_data,status~.) %>% as_tibble() %>% ggplot(aes(x = threshold, y = net_benefit, color = label)) + geom_line(lwd=1) + coord_cartesian(ylim = c(0, 0.3)) + scale_x_continuous( labels = scales::percent_format(accuracy = 1)) + labs(x = "Threshold Probability", y = "Net Benefit", color = "") + theme_bw()+ theme(legend.position = c(0.85,0.6))
五、总结
综上所述,多模型DCA曲线是一种评估乳腺癌风险评估模型多样性和鲁棒性的有效方法。通过比较不同模型在不同阈值下的净利益,可以评估模型的优劣和多样性,并选择最佳模型用于临床应用。同时,多模型DCA曲线还可以用于评估模型改进和研究模型适用性等方面,具有较强的实用性和广泛的应用前景。