前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >DeepSurv:一种基于深度神经网络的 Cox 比例风险模型方法

DeepSurv:一种基于深度神经网络的 Cox 比例风险模型方法

作者头像
DoubleHelix
发布2024-05-31 20:09:48
2821
发布2024-05-31 20:09:48
举报
文章被收录于专栏:生物信息云生物信息云
DeepSurv,一种 Cox 比例风险深度神经网络和最先进的生存方法,用于模拟患者协变量与治疗效果之间的相互作用。

该文章表示:在模拟和真实的生存数据上进行了大量的实验训练 DeepSurv。证明 DeepSurv 的表现与其他最先进的生存模型一样好,甚至更好,并验证 DeepSurv 成功地模拟了患者协变量与其失败风险之间日益复杂的关系。然后,展示了 DeepSurv 如何模拟患者特征与不同治疗方案有效性之间的关系,以展示如何使用 DeepSurv 提供个性化治疗建议。最后,在真实的临床研究中训练 DeepSurv,以证明它的个性化治疗建议将如何增加一组患者的生存时间。

代码语言:javascript
复制
# install.packages("survivalmodels")
library(survivalmodels)
library(survival)
library(sampling) # install.packages("sampling")

加载案例数据:

代码语言:javascript
复制
# dataSet
load("G:/Course/Bioinformatics/Regression/data/data.Rdata")

数据样式部分截图如下,红框中为样本信息,包括生存数据等,其他列为基因:

代码语言:javascript
复制
table(dataSet$vitalStat)

由于基因太多,我们这里读入一个基因集。

代码语言:javascript
复制
genes <- readLines("G:/Course/Bioinformatics/Regression/data/geneset.txt")
genes[1:5]

保留生存时间、生存状态以及基因标签列:

代码语言:javascript
复制
congs <- intersect(genes,colnames(dataSet))
filt.dataSet <- dataSet[,c("vitalStat","surTime",congs)]
filt.dataSet$surTime <- filt.dataSet$surTime/365

划分测试集(0.2)和训练集(0.8):

代码语言:javascript
复制
set.seed(123)
# 每层抽取80%的数据
train_id <- strata(filt.dataSet, "vitalStat", size = rev(round(table(lung$status) * 0.8)))$ID_unit
# 训练数据
trainData <- filt.dataSet[train_id, ]
# 测试数据
testData <- filt.dataSet[-train_id, ]

构建模型:

代码语言:javascript
复制
fit <- deepsurv(Surv(surTime, vitalStat) ~ ., 
                data = trainData, frac = 0.3, 
                activation = "relu",
                num_nodes = c(4L, 8L, 4L, 2L), 
                dropout = 0.1, 
                early_stopping = TRUE, 
                epochs = 100L,
                batch_size = 32L)

模型验证:

预测predict()参数中type有三种选择:"survival", "risk", "all", 可以获得预测生存矩阵和相对风险:

代码语言:javascript
复制
pred <- predict(fit, testData, type = "survival")
str(pred)

在生存分析中,cindex()(一致性指数,Concordance Index)或concordance()函数用于评估预测模型(如Cox比例风险模型)的预测性能。这个指标衡量了模型预测的风险(或生存时间)与真实观察到的生存时间之间的一致性程度。一致性指数(C-index)的值域在0到1之间,其中:0.5 表示模型的预测性能与随机猜测一样好(即没有预测能力);1.0 表示模型的预测完全准确。在实际应用中,很难找到完全一致的预测模型,既往研究认为,C-index在0.50-0.70为较低准确度;在0.71-0.90之间为中等准确度;而高于0.90则为高准确度。survivalmodels包含了一致性分析的函数cindex(),跟survival包里面的survival::concordance()使用非常相似。

代码语言:javascript
复制
p <- predict(fit, type = "risk", newdata = testData)
cindex(risk = p, truth = testData[, "surTime"])
# [1] 0.5264058

生存分析:

代码语言:javascript
复制
library(survminer)
testData$risk = p
group = ifelse(testData$risk > mean(testData$risk), "High", "Low")
f <- survfit(Surv(testData$surTime, testData$vitalStat) ~ group)
f
ggsurvplot(f, data = testData, surv.median.line = "hv", legend.title = "Risk Group",
           legend.labs = c("Low Risk", "High Risk"), pval = TRUE, ggtheme = theme_bw())
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-05-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 MedBioInfoCloud 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档