R语言ICU患者死亡率预测实战

【图书推荐】《R语言医学数据分析实践》-CSDN博客

《R语言医学数据分析实践 李丹 宋立桓 蔡伟祺 清华大学出版社9787302673484》【摘要 书评 试读】- 京东图书 (jd.com)

预测ICU患者死亡率对比较药物的疗效、比较护理的有效性、比较手术的有效性有重要意义,利用机器学习来构建预测模型,辅助临床预测有着重要的意义。

6.10.1  数据集背景

本数据集来自医学公开数据库MIMIC III ICU中的数据,有4000患者。纳入的指标除了RecordID住院号,年龄age,性别Gender,身高baseWeight ,体重ICU类别baseICUType,SAPS评分,SOFA评分,住院时间 Length_of_stay , Surivial生存天数,院内死亡In.hospital_death。

其他指标处理,根据临床的相关性选择纳入的指标,这些纳入的指标在机器学习中的术语叫特征feature。比如根据临床经验,格拉斯哥昏迷评分“GCS”的最低值min及中位数mean可能预测死亡。其它指标也按照“GCS”同样处理,最后纳入的指标有94项,如图6-19所示。当然某项临床指标是否纳入,如何纳入,没有明确答案,靠临床经验和业务知识。

图6-19

6.10.2  数据预处理

原始数据中的某些指标在某些患者中没有观测值,发现很多缺失值,数据表中以“NA”表示。读入数据,查看每一列数据概况,R代码如下所示:

#数据文件icumortality.csv的路径根据实际情况修改sur<-read.csv("c:/icu_demo/icumortality.csv", header = T, sep = ",")summary(sur)

查看每一列数据概况,summary函数会输出每一列数据平均值、最大值、最小值以及缺失情况,如图6-20所示,由于结果输出太长,这里截图并不完整。

图6-20

比如患者的性别Gender 值是0或1,有些患者值为-1,明显是推断错误,可以改为1。有些患者的height身高值小于100,weight体重小于10,也是推断不可能,可以赋值NA。计算患者的体重指数BMI,计算完再删除身高和体重两列。患者minTemp,meanTemp体温小于33°,PH值minPH 小于6或maxPH大于8,也是不可能,可以都赋值“NA”。

如图6-21所示,medianTroponinI缺失值达3795个(90%以上),可以删除,暂时不用的RecordID,SAPS.I、SOFA、length_of_stay、survival可以删除。

图6-21

MechVent指标是机械通气,0表示无,1表示有,如图6-22所示,发现部分患者MechVent值为“NA”,推断没有机械通气,可以赋值为0。

图6-22

血压有有创血压和无创血压两种,可以先找出有创血压DiasABP,SysABP 、MAP的缺失值,用此患者的的无创血压(带NI的变量)替换,然后删除无创血压的数据。

以上是利用经验判断缺失值是什么,此外可以使用mice程序包进行插补。mice即是基于多重填补法构造的,基本思想是对于一个具有缺失值的变量,用其他变量的数据对这个变量进行拟合,再用拟合的预测值对这个变量的缺失值进行填补。

数据清洗R代码如下:

#数据清洗
sur$baseGender[sur$baseGender<0] <- 1
sur$baseHeight[which(sur$baseHeight < 100)] <- NA
sur$baseHeight[which(sur$baseHeight > 210)] <- NA
sur$baseWeight[which(sur$baseWeight < 10)] <- NA
sur$BMI <- (sur$baseWeight/sur$baseHeight)/sur$baseHeight * 10000
sur[,"baseWeight"] <- NULL
sur[,"baseHeight"] <- NULL
sur[,"medianTroponinI"] <- NULLsub=which(is.na(sur$meanDiasABP))
sur$meanDiasABP[sub] <- sur$meanNIDiasABP[sub]
sur$minDiasABP[sub] <- sur$minNIDiasABP[sub]
sur$maxDiasABP[sub] <- sur$maxNIDiasABP[sub]
sur[,"meanNIDiasABP"] <- NULL
sur[,"minNIDiasABP"] <- NULL
sur[,"maxNIDiasABP"] <- NULL
sub=which(is.na(sur$meanMAP))
sur$meanMAP[sub] <- sur$meanNIMAP[sub]
sur$minMAP[sub] <- sur$minNIMAP[sub]
sur$maxMAP[sub] <- sur$maxNIMAP[sub]
sur[,"meanNIMAP"] <- NULL
sur[,"minNIMAP"] <- NULL
sur[,"maxNIMAP"] <- NULL
sub=which(is.na(sur$meanSysABP))
sur$meanSysABP[sub] <- sur$meanNISysABP[sub]
sur$minSysABP[sub] <- sur$minNISysABP[sub]
sur$maxSysABP[sub] <- sur$maxNISysABP[sub]
sur[,"meanNISysABP"] <- NULL
sur[,"minNISysABP"] <- NULL
sur[,"maxNISysABP"] <- NULLsur$minTemp[sur$minTemp < 33] <- NA
sur$meanTemp[sur$meanTemp < 33] <- NAsur$minpH[sur$minpH>8] <- NA
sur$minpH[sur$minpH<6] <- NA
sur$meanpH[sur$meanpH>8] <- NA
sur$maxpH[sur$maxpH>8] <- NAsur$meanMechVent[is.na(sur$meanMechVent)] <- 0sur[,"RecordID"] <- NULL
sur[,"SAPS.I"] <- NULL
sur[,"SOFA"] <- NULL
sur[,"Length_of_stay"] <- NULL
sur[,"Survival"] <- NULL

对于缺失值插补,可以利用mice程序包进行插补:

library(mice)
sur_clean <- mice(sur, m=5, seed=123456)
completedData <- complete(sur_clean,1)

6.10.3  模型建立

首先我们先用大家熟悉的Logistic回归分析模型,载入glmnet包,这个R包包括广义线性回归方程所有功能,R代码如图6-23所示:

图6-23

R代码运行,结果如图6-24所示。

图6-24

因为我们最后要比较各个机器学习模型的表现,需要新建一个表格用来存储模型的AUC,新建一个表格final,新表格只有一列label,是真实的死亡情况,新表格增加一列lasso,存储lasso模型的预测值,R代码如下所示:

label<-completedData$In.hospital_death
final <- as.data.frame(label)
final$Lasso <- completedData$test_pred

我们接着看支持向量机SVM ,给定一组训练样本集,样本数据集是二维的,分散在平面上,需要找到一条直线将数据集分割开。可以分开的直线有很多,我们要找到其中泛化能力最好,鲁棒性最强的直线。这是在平面上的点,如果是在三维空间中,则需要找到一个平面;如果是超过三维以上的维数,则需要找到一个超平面。

SVM的三个重要参数是kernel参数、C参数cost和gamma参数来调节模型的表现:

(1)C参数:C参数(Cost)它是控制着模型的惩罚力度,即决定了模型在训练时对误差和复杂度之间的折衷关系。通常情况下,C值越大,模型的复杂度越高,预测准确度也相应提高。但是,如果C值过大,可能会导致模型出现过拟合的情况,因此需要在实际应用中进行试探和调整。

(2)gamma参数:gamma参数决定了样本点对于模型的影响程度,即越接近样本点的数据在模型中的权重也越大。通常情况下,gamma值越小,对于远离样本点的数据的影响也就越小,而对于靠近样本点的数据的影响则更加强烈。但是,如果gamma值过小,可能会导致模型出现欠拟合的情况,因此需要进行合理的选择。

(3)kernel参数:Kernel指的是支持向量机的类型,它可能是线性还是非线性,首先选择线性的kernel作为基准。核函数是支持向量机回归算法的核心,不同的核函数适用于不同的数据集。常见的核函数有线性核函数、多项式核函数和径向基核函数等。在选择核函数时需要考虑数据集的特点和所需的预测准确度。

C参数即Cost是违反约束时的成本函数,gamma是除线性SVM外其余所有SVM都使用的一个参数,它的选择与直线或平面的非线性程度相关,gamma选择越大,其非线性程度越大。

使用支持向量机模型R代码如图6-25所示。

代码运行,结果如图6-26所示。

图6-26

在final数据表中存储SVM模型的AUC

final$SVM <- completedData$test_pred

随机森林Radom Forest算法介绍:简单的说,随机森林就是用随机的方式建立一个森林,森林里面有很多的决策树,并且每棵树之间是没有关联的。得到一个森林后,当有一个新的样本输入,森林中的每一棵决策树会分别进行一下判断,进行类别归类(针对分类算法),最后比较一下被判定哪一类最多,就预测该样本为哪一类。在随机森林方法中,创建了大量的决策树。每个观察结果都被送入每个决策树。 每个观察结果最常用作最终输出。对所有决策树进行新的观察,并对每个分类模型进行多数投票。

随机森林Radom Forest的模型R代码,如图6-27所示:

运行结果,如图6-27所示

图6-27

同样,在final数据表中存储randomforest模型的AUC:

final$randomforest <- completedData$test_pred

6.10.4  模型评估

利用基于plotROC包和ggplot2软件包可以将模型得到的AUC都展示在同一张ROC曲线图中,这样比较直观比较。如果提示出现“Error in library(plotROC) : 不存在叫‘plotROC’这个名字的程辑包”,可以通过 “install.packages("plotROC", dependencies = TRUE)”命令安装plotROC包。

R代码如下所示:

library(plotROC)
library(ggplot2)
longtest <- melt_roc(final, "label", c("Lasso", "randomforest"))
cbPalette <- c("#FF0000", "#FFCC00")
cbPalette <- c("#FF0000", "#FFCC00")
ggplot(longtest, aes(d = D, m = M, color = name)) +scale_colour_manual(values=cbPalette) + geom_roc(size = 1.75, n.cuts = 0, labels = FALSE) + style_roc() + theme(axis.text.x= element_text(size = 22), axis.title.x= element_text(size = 22), axis.text.y= element_text(size = 22), axis.title.y= element_text(size = 22), legend.text = element_text(size = 22))

运行结果,如图6-28所示。可以看出随机森林的AUC最大。

图6-28

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/diannao/86541.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode240-搜索二维矩阵

leetcode 240 思路 1. 矩阵特性 首先&#xff0c;利用矩阵的特性是解题的关键&#xff1a; 每行的元素递增每列的元素递增 这意味着&#xff0c;如果我们在矩阵中从右上角或左下角开始搜索&#xff0c;可以有效缩小搜索范围 2. 从右上角开始搜索 将搜索的起点定位在矩阵…

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…

【web应用】若依框架:若依框架中的页面跳转简介

文章目录 ⭐前言1. 后端控制器跳转2. 前端路由跳转3. 菜单配置跳转4. 权限控制跳转5. 常见跳转路径 ⭐一、主目录页面跳转⭐二、菜单目录跳转⭐总结 标题详情作者JosieBook头衔CSDN博客专家资格、阿里云社区专家博主、软件设计工程师博客内容开源、框架、软件工程、全栈&#x…

MS9292+MS9332 HD/DVI转VGA转换器+HD环出带音频

MS9292MS9332是一款HD/DVI转VGA转换器HD环出带音频的视频转换方案。支持HD/DVI输入&#xff0c;VGA输出和HD环出&#xff0c;HD/DVI输入最高支持1920120060Hz&#xff0c;VGA输出最高支持1920120060Hz&#xff0c;HD环出最高支持4K30Hz。该方案已实现量产&#xff0c;并提供完善…

C++初阶-list的模拟实现(难度较高)

1.list&#xff08;容器&#xff0c;不是类&#xff09;模拟实现基本结构 这个实现是和源码的实现不同的&#xff0c;不要进行强制类型转换了&#xff0c;很麻烦。我们把定义放在.h文件中&#xff0c;在.cpp中放测试代码。 注&#xff1a;这个基本结构之后会改变&#xff0c;…

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…

【iOS】cell的复用以及自定义cell

【iOS】cell的复用以及自定义cell 文章目录 【iOS】cell的复用以及自定义cell前言cell的复用手动&#xff08;非注册&#xff09;自动&#xff08;注册&#xff09; 自定义cell 前言 cell的复用及自定义cell是UITableView或UICollectionView的一个重要优化机制,当用户滚动视图…

深度学习之模型压缩三驾马车:基于ResNet18的模型剪枝实战(2)

前言 《深度学习之模型压缩三驾马车&#xff1a;基于ResNet18的模型剪枝实战&#xff08;1&#xff09;》里面我只是提到了对conv1层进行剪枝&#xff0c;只是为了验证这个剪枝的整个过程&#xff0c;但是后面也有提到&#xff1a;仅裁剪 conv1层的影响极大&#xff0c;原因如…

传输层协议:UDP

目录 1、概念 2、报文结构 3、核心特性 3.1 无连接 3.2 不可靠交付 3.3 面向数据报 3.4 轻量级&高效 3.5 支持广播和组播 4、典型应用场景 5、优缺点分析 6、与TCP的区别 1、概念 UDP&#xff08;User Datagram Protocol&#xff0c;用户数据报协议&#xff09…

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…

【汇编逆向系列】七、函数调用包含多个参数之浮点型- XMM0-3寄存器

目录 1. 汇编代码 1.1 debug编译 1.2 release编译 2. 汇编分析 2.1 浮点参数传递规则 2.2 栈帧rsp的变化时序 2.3 参数的访问逻辑 2.4 返回值XMM0寄存器 3. 汇编转化 3.1 Debug编译 3.2 Release 编译 3.3 C语言转化 1. 汇编代码 上一节介绍了整型的函数传参&#x…

华为云Flexus+DeepSeek征文 | 从零到一:用Flexus云服务打造低延迟联网搜索Agent

作者简介 我是摘星&#xff0c;一名专注于云计算和AI技术的开发者。本次通过华为云MaaS平台体验DeepSeek系列模型&#xff0c;将实际使用经验分享给大家&#xff0c;希望能帮助开发者快速掌握华为云AI服务的核心能力。 目录 作者简介 前言 1. 项目背景与技术选型 1.1 项目…

【多智能体】受木偶戏启发实现多智能体协作编排

&#x1f60a;你好&#xff0c;我是小航&#xff0c;一个正在变秃、变强的文艺倾年。 &#x1f514;本专栏《人工智能》旨在记录最新的科研前沿&#xff0c;包括大模型、具身智能、智能体等相关领域&#xff0c;期待与你一同探索、学习、进步&#xff0c;一起卷起来叭&#xff…

Java八股文——Spring篇

文章目录 Java八股文专栏其它文章Java八股文——Spring篇SpringSpring的IoC和AOPSpring IoC实现机制Spring AOP实现机制 动态代理JDK ProxyCGLIBByteBuddy Spring框架中的单例Bean是线程安全的吗&#xff1f;什么是AOP&#xff0c;你们项目中有没有使用到AOPSpring中的事务是如…

NineData数据库DevOps功能全面支持百度智能云向量数据库 VectorDB,助力企业 AI 应用高效落地

NineData 的数据库 DevOps 解决方案已完成对百度智能云向量数据库 VectorDB 的全链路适配&#xff0c;成为国内首批提供 VectorDB 原生操作能力的服务商。此次合作聚焦 AI 开发核心场景&#xff0c;通过标准化 SQL 工作台与细粒度权限管控两大能力&#xff0c;助力企业安全高效…

开源技术驱动下的上市公司财务主数据管理实践

开源技术驱动下的上市公司财务主数据管理实践 —— 以人造板制造业为例 引言&#xff1a;财务主数据的战略价值与行业挑战 在资本市场监管日益严格与企业数字化转型的双重驱动下&#xff0c;财务主数据已成为上市公司财务治理的核心基础设施。对于人造板制造业而言&#xff0…

借助它,普转也能获得空转信息?

在生命科学研究领域&#xff0c;转录组技术是探索基因表达奥秘的有力工具&#xff0c;在疾病机制探索、生物发育进程解析等诸多方面取得了显著进展。然而&#xff0c;随着研究的深入&#xff0c;研究人员发现普通转录组只能提供整体样本中的基因表达水平信息&#xff0c;却无法…

synchronized 学习

学习源&#xff1a; https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖&#xff0c;也要考虑性能问题&#xff08;场景&#xff09; 2.常见面试问题&#xff1a; sync出…

Java事务回滚详解

一、什么是事务回滚&#xff1f; 事务回滚指的是&#xff1a;当执行过程中发生异常时&#xff0c;之前对数据库所做的更改全部撤销&#xff0c;数据库状态恢复到事务开始前的状态。这是数据库“原子性”原则的体现。 二、Spring 中的 Transactional 默认行为 在 Spring 中&am…