一、引言
乳腺癌作为全球女性中最常见的癌症之一,其早期诊断和治疗对于提高患者生存率至关重要。随着医学技术和数据分析方法的不断发展,乳腺癌患者的生存分析逐渐成为研究的热点。通过生存分析,我们可以更好地理解疾病进展、预测患者预后,并制定个性化的治疗方案。然而,传统的生存分析方法,如Cox比例风险模型和Kaplan-Meier曲线,尽管在过去几十年中发挥了重要作用,但也存在一定的局限性。这些方法通常依赖于线性假设,无法充分捕捉复杂的非线性关系。此外,它们对高维数据的处理能力有限,难以充分利用现代医学研究中常见的大规模、多维度数据。为了克服这些局限性,近年来,深度学习技术在生存分析领域显示出巨大的潜力。特别是DeepSurv模型,它结合了深度神经网络的强大功能和传统Cox模型的优势,通过学习数据中的复杂模式,提供了更为准确和灵活的生存预测。在乳腺癌生存分析中,DeepSurv不仅能够处理大规模临床数据,还能更好地捕捉患者特征与生存时间之间的非线性关系,从而提供更加精确的预后评估。
本文将详细探讨乳腺癌生存分析从传统方法到现代深度学习方法的发展历程,分析各方法的优缺点,并通过实例验证其应用效果。通过这种方法的对比研究,我们希望为未来乳腺癌生存分析提供新的思路和方向。
二、传统方法的应用与局限
在乳腺癌生存分析中,传统的统计方法一直扮演着重要角色。这些方法不仅为我们提供了基本的生存率预测模型,还帮助我们理解了多种因素对患者生存时间的影响。然而,随着数据复杂性和量级的增加,这些传统方法也暴露出了一些局限性。
2.1 Cox比例风险模型及其应用
Cox比例风险模型(Cox Proportional Hazards Model)是一种广泛应用于生存分析的回归模型。它通过估计风险比(Hazard Ratio),分析不同变量(如年龄、肿瘤大小、治疗方式等)对生存时间的影响。该模型具有以下特点和应用:
-
线性回归基础:Cox模型基于线性回归,但它不要求具体的生存时间分布假设,只需假设变量与生存时间的对数关系是线性的。 -
变量选择:可以纳入多个协变量,通过偏相关分析确定每个变量对生存时间的独立贡献。 -
临床应用:常用于评估治疗效果、筛选预后因子,以及制定个性化治疗方案。
尽管Cox模型在临床研究中被广泛使用,但其主要局限性在于假设变量与生存时间之间的关系是线性的,这在处理复杂的非线性关系时显得不足。
2.2 KM曲线分析的优势与局限
Kaplan-Meier曲线(Kaplan-Meier Survival Curve)是一种非参数统计方法,用于估计随时间推移的生存概率。其主要应用和特点如下:
-
生存概率估计:通过绘制生存曲线,可以直观地展示各时间点的生存概率。 -
组间比较:可以通过Log-rank检验对不同组别(如不同治疗方案、患者特征)的生存曲线进行比较。 -
无分布假设:无需假设生存时间的分布形式,因此在小样本和不完全数据(如截尾数据)下表现良好。
然而,Kaplan-Meier方法也存在一些局限性,例如无法处理多维协变量,不能直接提供各协变量对生存影响的精确估计。此外,它在应对高维数据和非线性关系方面能力有限。
2.3 传统方法的挑战与问题
虽然Cox比例风险模型和Kaplan-Meier曲线在乳腺癌生存分析中有广泛应用,但面对现代医学研究中复杂、多维的数据集,它们面临以下挑战和问题:
-
高维数据处理:传统方法在处理大量协变量时效率低下,容易导致模型过拟合或欠拟合。 -
非线性关系捕捉:线性假设限制了模型对复杂非线性关系的捕捉能力,影响了预测的准确性。 -
数据依赖性:对数据完整性和质量要求较高,对于缺失值和噪声数据敏感,可能影响结果的可靠性。 -
模型扩展性:难以扩展到包含多种数据类型(如基因数据、影像数据等)的综合分析。
这些挑战促使研究人员探寻新的方法,以期在更大程度上提高乳腺癌生存分析的准确性和实用性。这也为现代深度学习方法,如DeepSurv的引入创造了条件。
三、DeepSurv简介
随着数据科学和计算能力的飞速发展,深度学习方法在各个领域得到了广泛应用。在医疗健康领域,深度学习同样展示了其强大的潜力,特别是在生存分析方面。DeepSurv模型作为一种基于深度学习的方法,通过引入神经网络结构,为生存分析提供了新的解决方案。
3.1 DeepSurv模型的介绍和原理
DeepSurv是一种利用深度神经网络进行生存分析的模型,它可以被视为一种非线性的Cox比例风险模型。其核心思想是用神经网络来替代传统Cox模型中的线性部分,从而更好地捕捉复杂的非线性关系。DeepSurv的主要特点和原理包括:
-
模型结构:DeepSurv使用多层神经网络来建模协变量与风险函数之间的关系。输入层接受患者的各种特征数据(如年龄、肿瘤大小、治疗方式等),经过若干隐藏层处理后,输出一个风险得分。 -
损失函数:DeepSurv的训练目标是最大化部分似然函数(Partial Likelihood Function),这与Cox模型的目标一致,但它通过神经网络实现更灵活的映射。 -
非线性特征捕捉:得益于神经网络的非线性激活函数,DeepSurv能够捕捉到数据中复杂的非线性关系,提高了模型的表达能力和预测准确性。
3.2 深度学习在医学生存分析中的优势
深度学习方法在医学生存分析中展现出许多优势,使其成为当前研究的热点。具体优势包括:
-
处理高维数据:深度学习能够有效处理高维数据集,包括基因组数据、影像数据等,这些数据在传统统计方法中往往难以应对。 -
非线性建模:通过使用非线性激活函数,深度学习模型可以捕捉到复杂的非线性关系,提高了预测的精确度。 -
自动特征提取:相比于传统方法需要手工选择和提取特征,深度学习可以自动学习和提取重要特征,减少了人为干预和错误可能。 -
扩展性和通用性:深度学习模型可以方便地扩展和适应不同类型的数据和任务,具有很强的通用性。
3.3 DeepSurv的应用场景
DeepSurv模型在乳腺癌生存分析中有着广泛的应用场景,其灵活性和强大的预测能力使其在多个方面得到了应用:
-
个性化治疗决策:通过分析患者的多维特征数据,DeepSurv可以预测个体化的生存概率,从而帮助医生制定更加精准的治疗方案。 -
预后评估:DeepSurv能够根据患者的特征数据进行生存期预测,评估不同治疗方案的预后效果,为临床决策提供支持。 -
风险因素识别:通过对模型进行解释及重要性分析,DeepSurv可以识别出影响患者生存时间的重要因素,这对于了解疾病机制和发现新的生物标志物具有重要意义。 -
多模态数据融合:DeepSurv可以整合包括临床数据、基因数据和医学影像在内的多种数据类型,提供更加全面和精准的生存分析结果。
在这些应用中,DeepSurv不仅提高了乳腺癌生存分析的准确性,还为个性化医疗和精准医学的发展提供了新的工具和方法。
四、实例演示
-
数据集准备
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)]
# 划分训练集和测试集
set.seed(123)
train_indices <- sample(x = 1:nrow(data), size = 0.7 * nrow(data), replace = FALSE)
test_indices <- sample(setdiff(1:nrow(data), train_indices), size = 0.3 * nrow(data), replace = FALSE)
train_data <- data[train_indices, ]
test_data <- data[test_indices, ]
-
Cox回归
library(rms)
library(forestplot)
library(ggplot2)
library(survminer)
gbsg$status <- as.factor(gbsg$status)
surv_obj <- Surv(time = gbsg$rfstime, event = gbsg$status)
cox_model <- coxph(surv_obj ~ age + meno + size + grade + nodes + pgr + er + hormon, data = gbsg)
# 输出模型摘要
summary(cox_model)
# Schoenfeld 残差图
cox.zph <- cox.zph(cox_model)
plot(cox.zph)
# 风险比(危险比)森林图
ggforest(cox_model,fontsize = 1)
结果展示:
> summary(cox_model)
Call:
coxph(formula = surv_obj ~ age + meno + size + grade + nodes +
pgr + er + hormon, data = gbsg)
n= 686, number of events= 299
coef exp(coef) se(coef) z Pr(>|z|)
age -0.0093924 0.9906516 0.0092733 -1.013 0.311136
meno 0.2672772 1.3064025 0.1833366 1.458 0.144882
size 0.0077164 1.0077463 0.0039497 1.954 0.050739 .
grade 0.2802894 1.3235128 0.1060553 2.643 0.008221 **
nodes 0.0498939 1.0511596 0.0074094 6.734 1.65e-11 ***
pgr -0.0022378 0.9977647 0.0005758 -3.887 0.000102 ***
er 0.0001674 1.0001674 0.0004477 0.374 0.708431
hormon -0.3372029 0.7137640 0.1289618 -2.615 0.008929 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
exp(coef) exp(-coef) lower .95 upper .95
age 0.9907 1.0094 0.9728 1.0088
meno 1.3064 0.7655 0.9121 1.8713
size 1.0077 0.9923 1.0000 1.0156
grade 1.3235 0.7556 1.0751 1.6293
nodes 1.0512 0.9513 1.0360 1.0665
pgr 0.9978 1.0022 0.9966 0.9989
er 1.0002 0.9998 0.9993 1.0010
hormon 0.7138 1.4010 0.5543 0.9190
Concordance= 0.688 (se = 0.015 )
Likelihood ratio test= 101.9 on 8 df, p=<2e-16
Wald test = 115.3 on 8 df, p=<2e-16
Score (logrank) test = 120.1 on 8 df, p=<2e-16
-
KM曲线
f <- survfit(Surv(gbsg$rfstime, gbsg$status) ~ gbsg$hormon)
ggsurvplot(f,
data = gbsg,
surv.median.line = "hv",
#legend.title = "Risk Group",
#legend.labs = c("Low Risk", "High Risk"),
pval = TRUE,
ggtheme = theme_bw()
)
-
DeepSurv
我的R环境是4.3.1
;Python版本是3.7.8
,然后pycox是0.21
,numba是0.56.4
,torch版本是1.13.1
.直接调用survivalmodels的install_pycox(pip = TRUE, install_torch = FALSE)
很容易报错,所以我选择的是直接在python的命令台上安装的,安装代码如下:
pip install pycox -i https://pypi.tuna.tsinghua.edu.cn/simple/
pip install numba -i https://pypi.tuna.tsinghua.edu.cn/simple/
pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple/
在python环境安装好后,切换到R,构建模型:
install.packages("survivalmodels")
library(survivalmodels)
library(reticulate)
# python环境所在地址,载入python环境
use_python("E:/work/image/Scripts/python.exe", required = TRUE)
#构建模型
fit <- deepsurv(Surv(rfstime, status) ~ ., # 生存函数
data = train_data, # 数据集
frac = 0.2, # 验证集的比例
num_nodes = c(10,10,10), # 隐藏层及节点数
dropout = 0.1, # 丢弃比例
epochs = 50 # 迭代次数
)
summary(fit)
展示:
> summary(fit)
DeepSurv Neural Network
Call:
deepsurv(formula = Surv(rfstime, status) ~ ., data = train_data, frac = 0.2, num_nodes = c(10, 10, 10), dropout = 0.1, epochs = 50)
Response:
Surv(time, status)
Features:
{age, meno, size, grade, nodes, pgr, er, hormon}
模型预测,预测类型包括"survival", "risk"和"all":
# 预测survival
predict_survival <- predict(fit, newdata = test_data,type = "survival")
# 预测risk
pred_risk <- predict(fit, newdata = test_data, type = "risk")
# 预测all
pred_all <- predict(fit, newdata = test_data, type = "all")
# 计算c-index
pred_risk
cindex(risk = pred_risk, truth = test_data[, "rfstime"])
结果展示:
> pred_risk
0 1 2 3 4 5 6 7
80.12736 327.17328 189.39695 134.55141 67.94922 274.02600 51.44136 108.24392
8 9 10 11 12 13 14 15
114.18961 574.10202 221.68230 462.79823 130.68237 131.21035 211.55929 398.72837
16 17 18 19 20 21 22 23
147.25787 111.91293 400.09115 137.37606 53.55314 153.31386 106.42626 211.10138
24 25 26 27 28 29 30 31
82.74198 306.75164 44.72644 101.65856 159.00379 136.19707 149.21874 169.81787
32 33 34 35 36 37 38 39
197.22143 144.11227 59.11857 308.49735 146.42685 101.17418 337.71257 486.46840
40 41 42 43 44 45 46 47
129.26178 72.52315 409.10793 278.68016 155.67095 56.83786 284.10788 97.28708
48 49 50 51 52 53 54 55
198.47229 285.18211 138.73939 124.16116 53.57482 133.26099 107.10976 278.34643
56 57 58 59 60 61 62 63
90.72356 130.08133 210.53352 128.66593 47.34550 105.87534 101.40301 109.83489
64 65 66 67 68 69 70 71
346.61130 145.05662 97.98250 117.22922 126.94511 98.01944 162.01521 162.03262
72 73 74 75 76 77 78 79
145.67819 251.87218 141.14477 383.28518 172.89826 57.96955 138.09030 54.73976
80 81 82 83 84 85 86 87
96.59379 147.26509 139.73348 128.59405 67.47137 133.07111 317.15832 86.45016
88 89 90 91 92 93 94 95
129.83943 152.08206 270.72811 303.48258 150.29952 169.06237 148.69828 43.46272
96 97 98 99 100 101 102 103
64.17921 127.12986 280.16405 160.24267 148.19581 151.83081 154.07808 60.79155
104 105 106 107 108 109 110 111
183.88459 237.96573 96.31389 100.42688 133.25614 104.01997 187.76998 300.76916
112 113 114 115 116 117 118 119
100.45509 108.22447 205.61734 254.49152 74.32411 160.13690 155.30184 136.66622
120 121 122 123 124 125 126 127
222.51139 299.46922 89.11486 155.67773 238.05134 53.53340 63.48115 120.82007
128 129 130 131 132 133 134 135
142.17557 158.03411 125.77776 231.60429 129.22552 31.37500 293.94934 117.36460
136 137 138 139 140 141 142 143
187.37866 170.05713 87.99622 178.99964 120.88055 279.94733 155.80732 300.77463
144 145 146 147 148 149 150 151
53.01152 134.35913 265.30663 41.13955 60.59557 151.61541 306.75251 98.87177
152 153 154 155 156 157 158 159
115.26952 179.99319 57.73859 152.25170 128.66639 257.59329 278.66759 50.23968
160 161 162 163 164 165 166 167
129.63275 345.23194 317.84273 150.14964 103.94026 169.72435 335.38401 92.99068
168 169 170 171 172 173 174 175
101.14991 242.36740 141.83460 175.07276 125.70793 147.20586 121.24276 145.70031
176 177 178 179 180 181 182 183
127.75253 93.41605 111.58675 161.60848 283.54243 177.18073 199.09026 105.09877
184 185 186 187 188 189 190 191
144.15396 222.20554 153.66556 232.83480 179.76305 160.92410 70.33592 376.13669
192 193 194 195 196 197 198 199
152.74814 364.42211 317.46268 119.04612 90.04021 356.26450 56.01602 323.29105
200 201 202 203 204
126.80601 117.82606 157.53607 215.44190 364.23803
> cindex(risk = pred_risk, truth = test_data[, "rfstime"])
[1] 0.5910918
五、总结
5.1 深度学习的潜在作用
深度学习作为人工智能的一个重要分支,具有强大的数据处理和模式识别能力。随着医疗数据的不断积累和计算能力的提升,深度学习在乳腺癌生存分析中的潜在作用日益显著。
-
高精度预测:深度学习算法可以处理复杂的多维数据,提取出传统统计方法难以捕捉的特征,从而提高生存预测的准确性。 -
个性化治疗方案:通过分析大量患者数据,深度学习模型可以帮助制定更加个性化的治疗方案,提高患者的生存率和生活质量。 -
自动化分析:深度学习技术可以实现乳腺癌生存分析的自动化处理,减少人工干预,提升效率,并降低人为误差。
5.2 传统方法与深度学习方法的结合
尽管深度学习在处理大数据和复杂模式方面具有显著优势,但将其与传统统计方法结合,可能会带来更为全面和可靠的分析结果。
-
互补优势:传统方法如Cox比例风险模型在解释性和理论基础上有独特的优势,而深度学习擅长处理非线性关系和大数据。两者结合可以弥补各自的不足,实现优势互补。 -
混合模型:开发混合模型,将深度学习算法的非线性建模能力与传统统计方法的解释能力结合,能够提供更为精准且可解释的生存分析结果。 -
验证与优化:使用传统方法对深度学习模型进行验证和优化,可以增强模型的可信度和临床应用价值。
5.3 对乳腺癌生存分析未来发展的展望
随着科技的不断进步和多学科的交叉融合,乳腺癌生存分析将在多个方面迎来新的发展机遇。
-
数据融合与共享:未来,通过整合多源数据,如基因组学、影像学、临床记录等,构建更为全面的数据集,有望显著提升生存分析的准确性。 -
实时监测与预测:借助物联网和可穿戴设备,实时监测患者的健康状况,结合深度学习模型进行动态预测和及时干预,将成为可能。 -
多学科协作:生物信息学、数据科学、医学等领域的紧密合作,将推动更为创新和高效的解决方案,为乳腺癌生存分析和治疗提供有力支持。 -
伦理与隐私保护:随着数据使用和分析技术的普及,加强数据隐私保护和伦理规范,确保患者信息安全和合法合规,是未来发展的重要方向。
深度学习方法在乳腺癌生存分析中展现出巨大的潜力,通过与传统方法的结合,可以实现更为精准和个性化的预测和治疗方案。未来,随着数据融合、多学科协作以及技术的不断进步,乳腺癌生存分析将迎来更加广阔的发展前景,为患者提供更好的治疗和护理服务。这一领域的持续创新和发展,不仅有助于提高乳腺癌患者的生存率和生活质量,也将推动整个医学和健康领域的进步。