前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据分享|逻辑回归、随机森林、SVM支持向量机预测心脏病风险数据和模型诊断可视化

数据分享|逻辑回归、随机森林、SVM支持向量机预测心脏病风险数据和模型诊断可视化

作者头像
拓端
发布2023-08-31 15:47:35
2040
发布2023-08-31 15:47:35
举报
文章被收录于专栏:拓端tecdat拓端tecdat

原文链接:http://tecdat.cn/?p=24973

世界卫生组织估计全世界每年有 1200 万人死于心脏病。在美国和其他发达国家,一半的死亡是由于心血管疾病点击文末“阅读原文”获取完整代码数据)。

简介

心血管疾病的早期预后可以帮助决定改变高危患者的生活方式,从而减少并发症。本研究旨在查明心脏病最相关/风险因素,并使用机器学习预测总体风险。

相关视频

数据准备

来源

该数据集查看文末了解数据获取方式来自对居民正在进行的心血管研究。分类目标是预测患者未来是否有 10 年患冠心病 (CHD) 的风险。数据集提供了患者的信息。它包括超过 4,000 条记录和 15 个属性。

变量

每个属性都是一个潜在的风险因素。有人口、行为和医疗风险因素。

人口统计: • 性别:男性或女性(标量) • 年龄:患者年龄;(连续 - 尽管记录的年龄已被截断为整数,但年龄的概念是连续的) 行为 • 当前吸烟者:患者是否是当前吸烟者(标量) • 每天吸烟数:此人一天内平均吸烟的香烟数量。(可以认为是连续的,因为一个人可以拥有任意数量的香烟,甚至半支香烟。) • BP Meds:患者是否服用降压药(标量) •中风:患者之前是否有中风(标量) • Hyp:患者是否患有高血压(标量) • 糖尿病:患者是否患有糖尿病(标量) • Tot Chol:总胆固醇水平(连续) • Sys BP:收缩压(连续) • Dia BP:舒张压(连续) • BMI:体重指数(连续) • 心率:心率(连续 - 在医学研究中,心率等变量虽然实际上是离散的,但由于存在大量可能值而被认为是连续的。) • 葡萄糖:葡萄糖水平(连续) 预测变量(目标) • 10 年患冠心病 CHD 的风险(二元:“1”表示“是”,“0”表示“否”)

心脏病预测

代码语言:javascript
复制
# 获取数据
rdaa <- read.csv(路径)
代码语言:javascript
复制
# 这边可以考虑增加变量收缩压与舒张压之差、描述收缩压、舒张压与高血压等级的变量

# 看数据结构
str(ata)
代码语言:javascript
复制
# 考虑增加变量bplevel
raw_data <- sqldf

# 对变量类别进行区分

ra_da <- map
str(ra_da )

数据预处理

查看和处理缺失值

代码语言:javascript
复制
# 这里我们使用mice包进行缺失值处理
aggr
代码语言:javascript
复制
matplot

01

02

03

04

由上图可以看出,除了glucose变量,其它变量的缺失比例都低于5%,而glucose变量缺失率超过了10%。对此的处理策略是保留glucose变量的缺失值,直接删除其它变量的缺失值。现在处理glucose的缺失值,

代码语言:javascript
复制
# 处理glucose列
lee_a <- subset & !is.na & !is.na & !is.na & !is.na & !is.na
# 查看glce与其它变量的线性相关性确定mice的填充策略
gcog = glm(lcse ~ .)
smry(glseg)

填充,排除不重要的变量。至于为什么不选diaBP,主要是后面的相关性分析中,这两个变量会造成多重共线性。

代码语言:javascript
复制
mice%in%  m=5,  "pmm", mai = 50, sd=2333, pint= FALSE)
#查看填充结果
smr(mc_od)
代码语言:javascript
复制
# 查看原始数据和插补后的数据分布情况
epot(mi_md)
代码语言:javascript
复制
sipt(mcod, pch=12)
代码语言:javascript
复制
# 填充数据
mi_t <- complete
fir_aa$loe <- miout$guose
sum(is.na(flda))

删除重复行

代码语言:javascript
复制
# 查看有无重复行并删除重复行
sum(duplicated
代码语言:javascript
复制
comd_ata <- comdta\[!duplicated(), \]

查看离群点

代码语言:javascript
复制
#查看异常值
gplot(coedta)+geom_boxplot(ae(ftr(1),age))
代码语言:javascript
复制
ggplot(copd\_dta)+geom\_boxplot(aes(factor(1cigDy))
代码语言:javascript
复制
ggplot(coea)+geom_boxplot(aes(factor(1),ttl))
代码语言:javascript
复制
ggplot(colt\_ta)+geom\_boxplot(aes(factor(1),syBP))
代码语言:javascript
复制
ggplot(comeaa)+geom_boxplot(aes(factor(1),daP))
代码语言:javascript
复制
ggplot()+gem_boxplot(aes(factor(1),BMI))
代码语言:javascript
复制
# 查看cigsPerDay
cigs\_sub <- comled\_dta
# 查看totChol,删除异常点
# 查看sysBP, 删除异常点
# 查看BMI

totChol: 总胆固醇水平大于240mg/dl已属于非常高,故删去水平值为600mg/dl的记录。sysBP: 去掉收缩压为295mg/dl的记录

代码语言:javascript
复制
# 删除各变量离群点
competedata
代码语言:javascript
复制
# 分类型变量列联分析
ggplot+geom_boxplot
代码语言:javascript
复制
ggplot+geom_boxplot(aes,totChol,fill=TenYerCHD))
代码语言:javascript
复制
cometddata %>% fitr %>% 
ggplot

由图像知,glucose和hearRate变量有不显着的风险

代码语言:javascript
复制
table1=table
chisq.test
代码语言:javascript
复制
table1
代码语言:javascript
复制
table2=table
chisq.test
代码语言:javascript
复制
table3=table
chisq.test
代码语言:javascript
复制
chisq.test
代码语言:javascript
复制
ggpairs

diaBP和sysBP有多重共线性的问题。

currentSmoker变量可能不显着,下面进入模型部分。

模型

代码语言:javascript
复制
# 划分数据集

split = sample.split

train = subset

逻辑回归

代码语言:javascript
复制
# 逻辑回归模型 - 使用所有变量
fultaog = glm
summary(fulog)
代码语言:javascript
复制
fldaog = glm
summary(fuatLg)
代码语言:javascript
复制
prdts = predict
glm_le <- table
代码语言:javascript
复制
ACCU

随机森林

代码语言:javascript
复制
rfoel <- randomForest
# 获得重要性
imprace

相关视频:Boosting原理与R语言提升回归树BRT预测短鳍鳗分布

代码语言:javascript
复制
# 选择重要的因素
rfmdel <- randomForest
# 误差
plot
代码语言:javascript
复制
# 获取重要性
ggplot +
   geom_bar
   geom_text

这里有患病风险的误差不降反升,需要探究其中原因

代码语言:javascript
复制
# 绘制分类图像
pred<-predict
pdou_1<-predict  #输出概率
table <- table
sum(diag/sum #预测准确率
代码语言:javascript
复制
plot(margin

SVM支持向量机

代码语言:javascript
复制
# 先进行模型调优
tud <- tune.svm
summary(tud )
代码语言:javascript
复制
# 使用turning函数得到最佳参数设置支持向量机
mel.nd <- svm
cost=tuned$
summary(modted)
代码语言:javascript
复制
# 调用predict函数基于刚配置好的SVM模型进行类标号的预测:
sm.ne.ed <- predict
sv.tuedtble <- table
sm.ue.tbe
代码语言:javascript
复制
acy.s.vm <- sum(diag)/sum

模型诊断

根据上面三个模型的结果,可以看出预测结果的类别数量分布非常不均衡

代码语言:javascript
复制
sum
代码语言:javascript
复制
sum(TeYaHD == 0)

针对这一现象,需要采取方法平衡数据集。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-05-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 拓端数据部落 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 原文链接:http://tecdat.cn/?p=24973
  • 简介
  • 数据准备
    • 来源
      • 变量
      • 心脏病预测
      • 数据预处理
      • 删除重复行
      • 查看离群点
      • 模型
        • 逻辑回归
        • 随机森林
        • SVM支持向量机
        • 模型诊断
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档