首页 > 其他分享 >拓端tecdat|R语言逻辑回归、随机森林、SVM支持向量机预测Framingham心脏病风险和模型诊断可视化

拓端tecdat|R语言逻辑回归、随机森林、SVM支持向量机预测Framingham心脏病风险和模型诊断可视化

时间:2022-11-09 13:39:07浏览次数:49  
标签:SVM 变量 查看 ggplot tecdat geom 拓端 boxplot glucose

简介

世界卫生组织估计全世界每年有 1200 万人死于心脏病。在美国和其他发达国家,一半的死亡是由于心血管疾病。心血管疾病的早期预后可以帮助决定改变高危患者的生活方式,从而减少并发症。本研究旨在查明心脏病最相关/风险因素,并使用机器学习预测总体风险。
 

数据准备 

来源

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

变量

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

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

心脏病预测

  1.  # 获取数据
  2.  rdaa <- read.csv(路径)
  3.  # 这边可以考虑增加变量收缩压与舒张压之差、描述收缩压、舒张压与高血压等级的变量
  4.   
  5.  # 看数据结构
  6.  str(ata)

拓端tecdat|R语言逻辑回归、随机森林、SVM支持向量机预测Framingham心脏病风险和模型诊断可视化_标量

  1.  # 考虑增加变量bplevel
  2.  raw_data <- sqldf
  3.   
  4.  # 对变量类别进行区分
  5.   
  6.  ra_da <- map
  7.  str(ra_da )

拓端tecdat|R语言逻辑回归、随机森林、SVM支持向量机预测Framingham心脏病风险和模型诊断可视化_标量_02

数据预处理

查看和处理缺失值

  1.  # 这里我们使用mice包进行缺失值处理
  2.  aggr

拓端tecdat|R语言逻辑回归、随机森林、SVM支持向量机预测Framingham心脏病风险和模型诊断可视化_r语言_03

matplot

拓端tecdat|R语言逻辑回归、随机森林、SVM支持向量机预测Framingham心脏病风险和模型诊断可视化_标量_04

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

  1.  # 处理glucose列
  2.  lee_a <- subset & !is.na & !is.na & !is.na & !is.na & !is.na
  3.  # 查看glce与其它变量的线性相关性确定mice的填充策略
  4.  gcog = glm(lcse ~ .)
  5.  smry(glseg)

拓端tecdat|R语言逻辑回归、随机森林、SVM支持向量机预测Framingham心脏病风险和模型诊断可视化_标量_05

 

拓端tecdat|R语言逻辑回归、随机森林、SVM支持向量机预测Framingham心脏病风险和模型诊断可视化_r语言_06

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

  1.  mice%in% m=5, "pmm", mai = 50, sd=2333, pint= FALSE)
  2.  #查看填充结果
  3.  smr(mc_od)

拓端tecdat|R语言逻辑回归、随机森林、SVM支持向量机预测Framingham心脏病风险和模型诊断可视化_r语言_07

  1.  # 查看原始数据和插补后的数据分布情况
  2.  epot(mi_md)

拓端tecdat|R语言逻辑回归、随机森林、SVM支持向量机预测Framingham心脏病风险和模型诊断可视化_数据_08

sipt(mcod, pch=12)

拓端tecdat|R语言逻辑回归、随机森林、SVM支持向量机预测Framingham心脏病风险和模型诊断可视化_r语言_09

  1.  # 填充数据
  2.  mi_t <- complete
  3.  fir_aa$loe <- miout$guose
  4.  sum(is.na(flda))

拓端tecdat|R语言逻辑回归、随机森林、SVM支持向量机预测Framingham心脏病风险和模型诊断可视化_r语言_10

删除重复行

  1.  # 查看有无重复行并删除重复行
  2.  sum(duplicated

拓端tecdat|R语言逻辑回归、随机森林、SVM支持向量机预测Framingham心脏病风险和模型诊断可视化_数据_11

comd_ata <- comdta[!duplicated(), ]

查看离群点

  1.  #查看异常值
  2.  gplot(coedta)+geom_boxplot(ae(ftr(1),age))

拓端tecdat|R语言逻辑回归、随机森林、SVM支持向量机预测Framingham心脏病风险和模型诊断可视化_r语言_12

ggplot(copd_dta)+geom_boxplot(aes(factor(1cigDy))

拓端tecdat|R语言逻辑回归、随机森林、SVM支持向量机预测Framingham心脏病风险和模型诊断可视化_r语言_13

ggplot(coea)+geom_boxplot(aes(factor(1),ttl))

拓端tecdat|R语言逻辑回归、随机森林、SVM支持向量机预测Framingham心脏病风险和模型诊断可视化_标量_14

ggplot(colt_ta)+geom_boxplot(aes(factor(1),syBP))

拓端tecdat|R语言逻辑回归、随机森林、SVM支持向量机预测Framingham心脏病风险和模型诊断可视化_r语言_15

ggplot(comeaa)+geom_boxplot(aes(factor(1),daP))

拓端tecdat|R语言逻辑回归、随机森林、SVM支持向量机预测Framingham心脏病风险和模型诊断可视化_r语言_16

ggplot()+gem_boxplot(aes(factor(1),BMI))

拓端tecdat|R语言逻辑回归、随机森林、SVM支持向量机预测Framingham心脏病风险和模型诊断可视化_r语言_17

拓端tecdat|R语言逻辑回归、随机森林、SVM支持向量机预测Framingham心脏病风险和模型诊断可视化_数据_18

拓端tecdat|R语言逻辑回归、随机森林、SVM支持向量机预测Framingham心脏病风险和模型诊断可视化_r语言_19

  1.  # 查看cigsPerDay
  2.  cigs_sub <- comled_dta
  3.  # 查看totChol,删除异常点
  4.  # 查看sysBP, 删除异常点
  5.  # 查看BMI

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

  1.  # 删除各变量离群点
  2.  competedata
  3.  # 分类型变量列联分析
  4.  ggplot+geom_boxplot

拓端tecdat|R语言逻辑回归、随机森林、SVM支持向量机预测Framingham心脏病风险和模型诊断可视化_标量_20

ggplot+geom_boxplot(aes,totChol,fill=TenYerCHD))

拓端tecdat|R语言逻辑回归、随机森林、SVM支持向量机预测Framingham心脏病风险和模型诊断可视化_数据_21

  1.  cometddata %>% fitr %>%
  2.  ggplot

拓端tecdat|R语言逻辑回归、随机森林、SVM支持向量机预测Framingham心脏病风险和模型诊断可视化_数据_22

拓端tecdat|R语言逻辑回归、随机森林、SVM支持向量机预测Framingham心脏病风险和模型诊断可视化_数据_23

拓端tecdat|R语言逻辑回归、随机森林、SVM支持向量机预测Framingham心脏病风险和模型诊断可视化_数据_24

拓端tecdat|R语言逻辑回归、随机森林、SVM支持向量机预测Framingham心脏病风险和模型诊断可视化_数据_25

拓端tecdat|R语言逻辑回归、随机森林、SVM支持向量机预测Framingham心脏病风险和模型诊断可视化_标量_26

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

  1.  table1=table
  2.  chisq.test

拓端tecdat|R语言逻辑回归、随机森林、SVM支持向量机预测Framingham心脏病风险和模型诊断可视化_数据_27

table1

拓端tecdat|R语言逻辑回归、随机森林、SVM支持向量机预测Framingham心脏病风险和模型诊断可视化_数据_28

  1.  table2=table
  2.  chisq.test

拓端tecdat|R语言逻辑回归、随机森林、SVM支持向量机预测Framingham心脏病风险和模型诊断可视化_r语言_29

  1.  table3=table
  2.  chisq.test

拓端tecdat|R语言逻辑回归、随机森林、SVM支持向量机预测Framingham心脏病风险和模型诊断可视化_r语言_30

chisq.test

拓端tecdat|R语言逻辑回归、随机森林、SVM支持向量机预测Framingham心脏病风险和模型诊断可视化_r语言_31

拓端tecdat|R语言逻辑回归、随机森林、SVM支持向量机预测Framingham心脏病风险和模型诊断可视化_标量_32

拓端tecdat|R语言逻辑回归、随机森林、SVM支持向量机预测Framingham心脏病风险和模型诊断可视化_标量_33

拓端tecdat|R语言逻辑回归、随机森林、SVM支持向量机预测Framingham心脏病风险和模型诊断可视化_数据_34

拓端tecdat|R语言逻辑回归、随机森林、SVM支持向量机预测Framingham心脏病风险和模型诊断可视化_标量_35

ggpairs

拓端tecdat|R语言逻辑回归、随机森林、SVM支持向量机预测Framingham心脏病风险和模型诊断可视化_r语言_36

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

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

模型

  1.  # 划分数据集
  2.   
  3.  split = sample.split
  4.   
  5.  train = subset

逻辑回归

  1.  # 逻辑回归模型 - 使用所有变量
  2.  fultaog = glm
  3.  summary(fulog)

拓端tecdat|R语言逻辑回归、随机森林、SVM支持向量机预测Framingham心脏病风险和模型诊断可视化_数据_37

 

拓端tecdat|R语言逻辑回归、随机森林、SVM支持向量机预测Framingham心脏病风险和模型诊断可视化_数据_38

  1.  fldaog = glm
  2.  summary(fuatLg)

拓端tecdat|R语言逻辑回归、随机森林、SVM支持向量机预测Framingham心脏病风险和模型诊断可视化_数据_39

  1.  prdts = predict
  2.  glm_le <- table
ACCU

拓端tecdat|R语言逻辑回归、随机森林、SVM支持向量机预测Framingham心脏病风险和模型诊断可视化_标量_40

随机森林

  1.  rfoel <- randomForest
  2.  # 获得重要性
  3.  imprace

拓端tecdat|R语言逻辑回归、随机森林、SVM支持向量机预测Framingham心脏病风险和模型诊断可视化_r语言_41

  1.  # 选择重要的因素
  2.  rfmdel <- randomForest
  3.  # 误差
  4.  plot

拓端tecdat|R语言逻辑回归、随机森林、SVM支持向量机预测Framingham心脏病风险和模型诊断可视化_r语言_42

  1.   
  2.  # 获取重要性
  3.  ggplot +
  4.  geom_bar
  5.  geom_text

拓端tecdat|R语言逻辑回归、随机森林、SVM支持向量机预测Framingham心脏病风险和模型诊断可视化_数据_43

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

  1.  # 绘制分类图像
  2.  pred<-predict
  3.  pdou_1<-predict #输出概率
  4.  table <- table
  5.  sum(diag/sum #预测准确率

拓端tecdat|R语言逻辑回归、随机森林、SVM支持向量机预测Framingham心脏病风险和模型诊断可视化_数据_44

plot(margin

拓端tecdat|R语言逻辑回归、随机森林、SVM支持向量机预测Framingham心脏病风险和模型诊断可视化_标量_45

SVM支持向量机

  1.  # 先进行模型调优
  2.  tud <- tune.svm
  3.  summary(tud )

拓端tecdat|R语言逻辑回归、随机森林、SVM支持向量机预测Framingham心脏病风险和模型诊断可视化_r语言_46

拓端tecdat|R语言逻辑回归、随机森林、SVM支持向量机预测Framingham心脏病风险和模型诊断可视化_标量_47

拓端tecdat|R语言逻辑回归、随机森林、SVM支持向量机预测Framingham心脏病风险和模型诊断可视化_r语言_48

拓端tecdat|R语言逻辑回归、随机森林、SVM支持向量机预测Framingham心脏病风险和模型诊断可视化_标量_49

  1.  # 使用turning函数得到最佳参数设置支持向量机
  2.  mel.nd <- svm
  3.  cost=tuned$
  4.  summary(modted)

拓端tecdat|R语言逻辑回归、随机森林、SVM支持向量机预测Framingham心脏病风险和模型诊断可视化_标量_50

  1.  # 调用predict函数基于刚配置好的SVM模型进行类标号的预测:
  2.  sm.ne.ed <- predict
  3.  sv.tuedtble <- table
  4.  sm.ue.tbe

拓端tecdat|R语言逻辑回归、随机森林、SVM支持向量机预测Framingham心脏病风险和模型诊断可视化_r语言_51

acy.s.vm <- sum(diag)/sum

拓端tecdat|R语言逻辑回归、随机森林、SVM支持向量机预测Framingham心脏病风险和模型诊断可视化_r语言_52

模型诊断

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

sum

拓端tecdat|R语言逻辑回归、随机森林、SVM支持向量机预测Framingham心脏病风险和模型诊断可视化_r语言_53

sum(TeYaHD == 0)

拓端tecdat|R语言逻辑回归、随机森林、SVM支持向量机预测Framingham心脏病风险和模型诊断可视化_标量_54

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


拓端tecdat|R语言逻辑回归、随机森林、SVM支持向量机预测Framingham心脏病风险和模型诊断可视化_r语言_55

标签:SVM,变量,查看,ggplot,tecdat,geom,拓端,boxplot,glucose
From: https://blog.51cto.com/u_14293657/5835928

相关文章