前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R语言决策树、随机森林、逻辑回归临床决策分析NIPPV疗效和交叉验证

R语言决策树、随机森林、逻辑回归临床决策分析NIPPV疗效和交叉验证

原创
作者头像
拓端
发布2023-05-05 22:37:06
2640
发布2023-05-05 22:37:06
举报
文章被收录于专栏:拓端tecdat拓端tecdat

全文链接:http://tecdat.cn/?p=32295

原文出处:拓端数据部落公众号

临床决策(clinical?decision?making)是医务人员在临床实践过程中,根据国内外医学科研的最新进展,不断提出新方案,与传统方案进行比较后,取其最优者付诸实施,从而提高疾病诊治水平的过程。

在临床医疗实践中,许多事件的发生是随机的,对个体患者来说治疗措施的疗效、远期预后常常是不确定的和不可准确预测的,究竟何种选择最好很难简单做出决定。

本文帮助客户进行决策分析NIPPV疗效数据,在充分评价不同方案的风险及利益之后推荐一个最佳的方案,最大限度地保障患者权益,减少临床实践及卫生决策失误。

决策树分析步骤

决策树分析法是通过决策树图形展示临床重要事件的可能发展过程及结局,比较各种备选方案的预期结果从而进行择优决策的方法。决策树分析法通常有6个步骤。

明确决策问题,确定备选方案

对欲解决的问题有清楚的界定,应列出所有可能的备选方案。在决策树上决策的选择应用决策结来代表,通常用方框表示,每个备选方案用从方框引出的臂表示,表示最终决策结果的决策结总是放在决策树的最左端。

用树形图展示决策事件决策

树的画法是从左至右,可能发生的最终结局总是放在决策树最右端,用小三角形表示,称为结局结。每一种结局都是一系列机会事件按时间顺序自然发展的结果,在决策树上这种事件,用圆圈符号表示,称为机会结。每一个机会事件的直接结局用与圆圈联结的臂表示,不同机会结从左至右的顺序是事件发生的时相关系的反映。一个机会结可以有多个直接结局,从每个机会结引出的结局必须是独立、互不包容的状态。

标明各种事件可能出现的概率

每一种事件出现的可能性用概率表示,一般应从质量可靠的文献中查找并结合专家的临床经验及本单位情况进行推测。从每一个事件发生的各种后续事件的可能性服从概率论的加法定律,即每一个机会结发出的直接结局的各臂概率之和必须为1.0。

对最终结局赋值

可用效用值为最终结局赋值,效用值是对患者健康状态偏好程度的测量,通常应用0~1的数字表示,最好的健康状态为1,死亡为0。有时可以用寿命年、质量调整寿命年表示。

计算每一种备选方案的期望值

计算备选方案期望值的方法是从“树尖”开始向“树根”的方向(从右向左)进行计算,效用值与其发生概率的乘积即是期望效用值,每个机会结的期望效用值为该机会结所有可能事件的期望效用值之总和。在决策树中如果有次级决策结时,与机会结期望效用值的计算方法不同,只能选择可提供最大期望效用值的决策臂,而忽略其他臂。最后,选择期望值最高的备选方案为决策方案。

对结论进行敏感性分析

由于临床实践中的事件发生概率值及健康状态的效用值等都可能在一定范围内变动,需要进行敏感性分析。敏感性分析要回答的问题是:当概率及结局效用值等在一个合理的范围内变动时,决策分析的结论方向会改变吗?敏感性分析的目的是测试决策分析结论的稳定性。

NIPPV疗效数据

image.png
image.png

剔除缺失数据

代码语言:javascript
复制
datanew=**na.omit**(datanew)

建立决策树:疗效

代码语言:javascript
复制
datanew.train1=datanew.train[train2,]  
datanew.train2=datanew.train[-train2,]

剪枝

代码语言:javascript
复制
CARTmodel1 =?**rpart**( (疗效) ~.
image.png
image.png
代码语言:javascript
复制
**printcp**(CARTmodel1)
image.png
image.png

不剪枝

image.png
image.png

输出决策树cp值

image.png
image.png

根据cp值对决策树进行剪枝

代码语言:javascript
复制
able[**which.min**(CARTmodel$c
**prune**(CARTmodel, cp=?C
image.png
image.png
image.png
image.png

对数据进行预测

image.png
image.png

得到训练集混淆矩阵准确度和MSE

代码语言:javascript
复制
#########################################准确度  
**sum**(**diag**(tab))/**sum**(tab)

## [1] 0.7755102

###############################################MSE##############  
  
MSE=function(y,pred)**sqrt**(**mean**(**as.numeric**(y)-**as.numeric**(pred))^2)  
  
**MSE**(tree.pred,datanew.test$疗效)

## [1] 0.06122449

用predict的算下错率

image.png
image.png

预测分类号

image.png
image.png

输出结果到excel

代码语言:javascript
复制
**brules.table**(CARTmodel2)[,**c**("Subrule","Variable","Value")]
image.png
image.png

变量重要程度

image.png
image.png

随机森林

image.png
image.png
图片1.png
图片1.png

变量重要程度

代码语言:javascript
复制
**importance**(rf)
image.png
image.png
代码语言:javascript
复制
**plot**(d,center=TRUE,leaflab=
image.png
image.png

混淆矩阵

代码语言:javascript
复制
###########################################准确率  
**sum**(**diag**(tab))/**sum**(tab)

## [1] 0.8163265

*# [1] 0.7755102*  
  
###############################################MSE##############  
**MSE**(**predict**(rf,datanew.test),datanew.test$疗效)

## [1] 0.02040816

预测分类号

image.png
image.png
image.png
image.png

逻辑回归模型

代码语言:javascript
复制
M2 <-?**glm**(formula =?疗效 ~?.,fami

迭代回归之前的回归模型参数

image.png
image.png

迭代回归后的模型参数

image.png
image.png

逻辑回归预测

image.png
image.png
代码语言:javascript
复制
#########################################准确度  
**sum**(**diag**(tab))/**sum**(tab)

## [1] 0.7755102

##############################################预测分类号  
pred

## ??2 ??3 ??9 ?13 ?14 ?15 ?17 ?22 ?23 ?26 ?29 ?30 ?32 ?35 ?38 ?39 ?42 ?44  
## ??1 ??1 ??1 ??1 ??1 ??1 ??1 ??1 ??1 ??2 ??1 ??1 ??2 ??2 ??1 ??1 ??1 ??2  
## ?52 ?53 ?56 ?57 ?60 ?61 ?63 ?64 ?66 ?68 ?69 ?79 ?83 ?87 ?88 ?92 ?94 ?99  
## ??1 ??2 ??1 ??1 ??1 ??2 ??1 ??1 ??2 ??1 ??1 ??2 ??1 ??2 ??2 ??1 ??2 ??1  
## 102 105 106 108 109 112 113 118 123 134 139 140 143  
## ??2 ??2 ??2 ??2 ??2 ??2 ??1 ??1 ??1 ??2 ??2 ??2 ??1

交叉验证

决策树交叉验证

代码语言:javascript
复制
cv.model=**cv.tree**(cpus.ltr, , prune.tree,K =10)  
best.size <-?cv.model$size[**which**(cv.model$dev==**min**(cv.model$dev))] *# wh*
image.png
image.png

十折交叉验证

代码语言:javascript
复制
k=10  
for(kk in 1:k){  
??index=**sample**(1:**dim**(data)[1],**floor**(**dim**(data)[1]*(1/k)),replace=F) *#筛选样本*  
??test=**as.data.frame**(data[index,]) *#训练集*
  
  
  *#正确率*  
precisek/k

## [1] 0.7285714

随机森林交叉验证

代码语言:javascript
复制
**rfcv**(**na.omit**(datanew.train), **na.omit**(datanew.train)$疗效, cv.fold=10)
image.png
image.png

十折交叉验证

代码语言:javascript
复制
*#正确率*  
precisek/k

## [1] 0.8424495

逻辑回归交叉验证

代码语言:javascript
复制
(cv.err <-?**cv**
image.png
image.png
代码语言:javascript
复制
summary(cv.err)
image.png
image.png

十折交叉验证

代码语言:javascript
复制
*#正确率*  
precisek/k

## [1] 0.6416667

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 全文链接:http://tecdat.cn/?p=32295
  • 原文出处:拓端数据部落公众号
  • NIPPV疗效数据
    • 剔除缺失数据
    • 建立决策树:疗效
    • 剪枝
    • 不剪枝
      • 输出决策树cp值
        • 根据cp值对决策树进行剪枝
          • 对数据进行预测
          • 得到训练集混淆矩阵准确度和MSE
            • 用predict的算下错率
            • 预测分类号
            • 输出结果到excel
            • 变量重要程度
            • 随机森林
            • 变量重要程度
            • 混淆矩阵
            • 预测分类号
            • 逻辑回归模型
            • 迭代回归之前的回归模型参数
            • 迭代回归后的模型参数
            • 逻辑回归预测
            • 交叉验证
            • 决策树交叉验证
            • 十折交叉验证
            • 随机森林交叉验证
            • 十折交叉验证
            • 逻辑回归交叉验证
            • 十折交叉验证
            相关产品与服务
            数据万象
            数据万象(Cloud Infinite,CI)是依托腾讯云对象存储的数据处理平台,涵盖图片处理、内容审核、媒体处理、AI 识别、文档预览等功能,为客户提供一站式的专业数据处理解决方案,满足您多种业务场景的需求。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
            http://www.vxiaotou.com