MachineLearning 36. 机器学习之基于神经网络的Cox比例风险模型 (Deepsurv)

a45b60b9bc3c09ebb18119e790db3825.png



简      介

背景

医疗从业者使用生存模型来探索和理解患者协变量(如临床和遗传特征)与各种治疗方案有效性之间的关系。标准的生存模型,如线性Cox比例风险模型,需要广泛的特征工程或先前的医学知识来模拟个体水平上的治疗相互作用。虽然非线性生存方法,如神经网络和生存森林,可以固有地模拟这些高级交互术语,但它们尚未被证明是有效的治疗推荐系统。

方法

我们引入 DeepSurv,一种 Cox 比例风险深度神经网络和最先进的生存方法,用于模拟患者协变量与治疗效果之间的相互作用,从而提供个性化治疗建议。

结果

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

结论

DeepSurv 的预测和建模能力将使医学研究人员能够使用深度神经网络作为探索、理解和预测患者特征对失败风险影响的工具。

948e73020af0d7b8bc6d0f02870e747e.png

软件包安装

survivalmodels包使用reticulate从Python实现模型。为了使用这些模型,必须按照reticulate::py_install安装所需的Python包。Survivalmodels包含一个辅助函数,用于安装所需的pycox函数(如果还需要,则使用pytorch)。在运行此包中的任何模型之前,如果您尚未安装pycox,请运行。

install_pycox(pip = TRUE, install_torch = FALSE)

然后再次安装survivalmodels:

remotes::install_github("RaphaelS1/survivalmodels")
install.packages("survivalmodels")

数据读取

library(survival)
library(sampling)
dim(lung)
## [1] 228  10
lung = na.omit(lung)
table(lung$status)
## 
##   1   2 
##  47 120
set.seed(123)
# 每层抽取70%的数据
train_id <- strata(lung, "status", size = rev(round(table(lung$status) * 0.7)))$ID_unit
# 训练数据
trainData <- lung[train_id, ]
# 测试数据
testData <- lung[-train_id, ]

实例操作

构建模型

library(survivalmodels)
set.seed(123)
fit <- deepsurv(Surv(time, status) ~ ., 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", 可以获得预测生存矩阵和相对风险:

pred <- predict(fit, testData, type = "survival")
str(pred)
##  num [1:50, 1:76] 0.988 0.988 0.988 0.988 0.988 ...
##  - attr(*, "dimnames")=List of 2
##   ..$ : chr [1:50] "0 " "1 " "2 " "3 " ...
##   ..$ : chr [1:76] "11" "15" "26" "53" ...

一致性

survivalmodels包含了一致性分析的函数cindex(),跟survival包里面的survival::concordance()使用非常相似。

p <- predict(fit, type = "risk", newdata = testData)
cindex(risk = p, truth = testData[, "time"])
## [1] 0.4877451

生存分析

根据风险值我们可以将患者分为高低风险组,然后绘制生存曲线:

library(survminer)
testData$risk = p
group = ifelse(testData$risk > mean(testData$risk), "High", "Low")
f <- survfit(Surv(testData$time, testData$status) ~ group)
f
## Call: survfit(formula = Surv(testData$time, testData$status) ~ group)
## 
##             n events median 0.95LCL 0.95UCL
## group=High 31     21    390     239     687
## group=Low  19     15    267     167     814
ggsurvplot(f, data = testData, surv.median.line = "hv", legend.title = "Risk Group",
    legend.labs = c("Low Risk", "High Risk"), pval = TRUE, ggtheme = theme_bw())

5ca15ea814e433b2ad9270f0037b95d2.png

绘制ROC曲线

由于我们所作的模型根时间密切相关因此我们选择timeROC,可以快速的技术出来不同时期的ROC,进一步作图:

library(timeROC)
res <- timeROC(T = testData$time, delta = testData$status, marker = testData$risk,
    cause = 1, weighting = "marginal", times = c(1 * 365, 2 * 365), ROC = TRUE, iid = TRUE)
res$AUC_1
##     t=365     t=730 
## 0.5592593 0.7400000
confint(res, level = 0.95)$CI_AUC
## NULL
plot(res, time = 1 * 365, col = "red", title = FALSE, lwd = 2)
plot(res, time = 2 * 365, add = TRUE, col = "blue", lwd = 2)
legend("bottomright", c(paste("1 Years ", round(res$AUC_1[1], 2)), paste("2 Years ",
    round(res$AUC_1[2], 2))), col = c("red", "blue", "green"), lty = 1, lwd = 2)

c1c3307696e3be99f331a97b1c8f5a9b.png

不同时间节点的AUC曲线及其置信区间

再分析不同时间节点的AUC曲线及其置信区间,由于数据量非常小,此图并不明显。

plotAUCcurve(res, conf.int = TRUE, col = "red")

950dceabf8d7019109f7eb6440527b25.png

Reference

Katzman, J. L., Shaham, U., Cloninger, A., Bates, J., Jiang, T., & Kluger, Y. (2018). DeepSurv: personalized treatment recommender system using a Cox proportional hazards deep neural network. BMC Medical Research Methodology, 18(1), 24. https://doi.org/10.1186/s12874-018-0482-1


基于机器学习构建临床预测模型

MachineLearning 1. 主成分分析(PCA)

MachineLearning 2. 因子分析(Factor Analysis)

MachineLearning 3. 聚类分析(Cluster Analysis)

MachineLearning 4. 癌症诊断方法之 K-邻近算法(KNN)

MachineLearning 5. 癌症诊断和分子分型方法之支持向量机(SVM)

MachineLearning 6. 癌症诊断机器学习之分类树(Classification Trees)

MachineLearning 7. 癌症诊断机器学习之回归树(Regression Trees)

MachineLearning 8. 癌症诊断机器学习之随机森林(Random Forest)

MachineLearning 9. 癌症诊断机器学习之梯度提升算法(Gradient Boosting)

MachineLearning 10. 癌症诊断机器学习之神经网络(Neural network)

MachineLearning 11. 机器学习之随机森林生存分析(randomForestSRC)

MachineLearning 12. 机器学习之降维方法t-SNE及可视化(Rtsne)

MachineLearning 13. 机器学习之降维方法UMAP及可视化 (umap)

MachineLearning 14. 机器学习之集成分类器(AdaBoost)

MachineLearning 15. 机器学习之集成分类器(LogitBoost)

MachineLearning 16. 机器学习之梯度提升机(GBM)

MachineLearning 17. 机器学习之围绕中心点划分算法(PAM)

MachineLearning 18. 机器学习之贝叶斯分析类器(Naive Bayes)

MachineLearning 19. 机器学习之神经网络分类器(NNET)

MachineLearning 20. 机器学习之袋装分类回归树(Bagged CART)

MachineLearning 21. 机器学习之临床医学上的生存分析(xgboost)

MachineLearning 22. 机器学习之有监督主成分分析筛选基因(SuperPC)

MachineLearning 23. 机器学习之岭回归预测基因型和表型(Ridge)

MachineLearning 24. 机器学习之似然增强Cox比例风险模型筛选变量及预后估计(CoxBoost)

MachineLearning 25. 机器学习之支持向量机应用于生存分析(survivalsvm)

MachineLearning 26. 机器学习之弹性网络算法应用于生存分析(Enet)

MachineLearning 27. 机器学习之逐步Cox回归筛选变量(StepCox)

MachineLearning 28. 机器学习之偏最小二乘回归应用于生存分析(plsRcox)

MachineLearning 29. 机器学习之嵌套交叉验证(Nested CV)

MachineLearning 30. 机器学习之特征选择森林之神(Boruta)

MachineLearning 31. 机器学习之基于RNA-seq的基因特征筛选 (GeneSelectR)

MachineLearning 32. 机器学习之支持向量机递归特征消除的特征筛选 (mSVM-RFE)

MachineLearning 33. 机器学习之时间-事件预测与神经网络和Cox回归

MachineLearning 34. 机器学习之竞争风险生存分析的深度学习方法(DeepHit)

MachineLearning 35. 机器学习之Lasso+Cox回归筛选变量 (LassoCox)

桓峰基因,铸造成功的您!

未来桓峰基因公众号将不间断的推出单细胞系列生信分析教程,

敬请期待!!

桓峰基因官网正式上线,请大家多多关注,还有很多不足之处,大家多多指正!http://www.kyohogene.com/

桓峰基因和投必得合作,文章润色优惠85折,需要文章润色的老师可以直接到网站输入领取桓峰基因专属优惠券码:KYOHOGENE,然后上传,付款时选择桓峰基因优惠券即可享受85折优惠哦!https://www.topeditsci.com/

ac8e7667c1e0cc93c6b2dffd88a82204.png

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值