天天看點

拓端tecdat|R語言邏輯回歸、随機森林、SVM支援向量機預測Framingham心髒病風險和模型診斷可視化

簡介

世界衛生組織估計全世界每年有 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.  str(ata)
拓端tecdat|R語言邏輯回歸、随機森林、SVM支援向量機預測Framingham心髒病風險和模型診斷可視化
  1.  # 考慮增加變量bplevel
  2.  raw_data <- sqldf
  3.  # 對變量類别進行區分
  4.  ra_da <- map
  5.  str(ra_da )
拓端tecdat|R語言邏輯回歸、随機森林、SVM支援向量機預測Framingham心髒病風險和模型診斷可視化

資料預處理

檢視和處理缺失值

  1.  # 這裡我們使用mice包進行缺失值處理
  2.  aggr
拓端tecdat|R語言邏輯回歸、随機森林、SVM支援向量機預測Framingham心髒病風險和模型診斷可視化
matplot      
拓端tecdat|R語言邏輯回歸、随機森林、SVM支援向量機預測Framingham心髒病風險和模型診斷可視化

由上圖可以看出,除了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心髒病風險和模型診斷可視化
拓端tecdat|R語言邏輯回歸、随機森林、SVM支援向量機預測Framingham心髒病風險和模型診斷可視化

填充,排除不重要的變量。至于為什麼不選diaBP,主要是後面的相關性分析中,這兩個變量會造成多重共線性。

  1.  mice%in% m=5, "pmm", mai = 50, sd=2333, pint= FALSE)
  2.  #檢視填充結果
  3.  smr(mc_od)
拓端tecdat|R語言邏輯回歸、随機森林、SVM支援向量機預測Framingham心髒病風險和模型診斷可視化
  1.  # 檢視原始資料和插補後的資料分布情況
  2.  epot(mi_md)
拓端tecdat|R語言邏輯回歸、随機森林、SVM支援向量機預測Framingham心髒病風險和模型診斷可視化
sipt(mcod, pch=12)      
拓端tecdat|R語言邏輯回歸、随機森林、SVM支援向量機預測Framingham心髒病風險和模型診斷可視化
  1.  # 填充資料
  2.  mi_t <- complete
  3.  fir_aa$loe <- miout$guose
  4.  sum(is.na(flda))
拓端tecdat|R語言邏輯回歸、随機森林、SVM支援向量機預測Framingham心髒病風險和模型診斷可視化

删除重複行

  1.  # 檢視有無重複行并删除重複行
  2.  sum(duplicated
拓端tecdat|R語言邏輯回歸、随機森林、SVM支援向量機預測Framingham心髒病風險和模型診斷可視化
comd_ata <- comdta[!duplicated(), ]      

檢視離群點

  1.  #檢視異常值
  2.  gplot(coedta)+geom_boxplot(ae(ftr(1),age))
拓端tecdat|R語言邏輯回歸、随機森林、SVM支援向量機預測Framingham心髒病風險和模型診斷可視化
ggplot(copd_dta)+geom_boxplot(aes(factor(1cigDy))      
拓端tecdat|R語言邏輯回歸、随機森林、SVM支援向量機預測Framingham心髒病風險和模型診斷可視化
ggplot(coea)+geom_boxplot(aes(factor(1),ttl))      
拓端tecdat|R語言邏輯回歸、随機森林、SVM支援向量機預測Framingham心髒病風險和模型診斷可視化
ggplot(colt_ta)+geom_boxplot(aes(factor(1),syBP))      
拓端tecdat|R語言邏輯回歸、随機森林、SVM支援向量機預測Framingham心髒病風險和模型診斷可視化
ggplot(comeaa)+geom_boxplot(aes(factor(1),daP))      
拓端tecdat|R語言邏輯回歸、随機森林、SVM支援向量機預測Framingham心髒病風險和模型診斷可視化
ggplot()+gem_boxplot(aes(factor(1),BMI))      
拓端tecdat|R語言邏輯回歸、随機森林、SVM支援向量機預測Framingham心髒病風險和模型診斷可視化
拓端tecdat|R語言邏輯回歸、随機森林、SVM支援向量機預測Framingham心髒病風險和模型診斷可視化
拓端tecdat|R語言邏輯回歸、随機森林、SVM支援向量機預測Framingham心髒病風險和模型診斷可視化
  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心髒病風險和模型診斷可視化
ggplot+geom_boxplot(aes,totChol,fill=TenYerCHD))      
拓端tecdat|R語言邏輯回歸、随機森林、SVM支援向量機預測Framingham心髒病風險和模型診斷可視化
  1.  cometddata %>% fitr %>%
  2.  ggplot
拓端tecdat|R語言邏輯回歸、随機森林、SVM支援向量機預測Framingham心髒病風險和模型診斷可視化
拓端tecdat|R語言邏輯回歸、随機森林、SVM支援向量機預測Framingham心髒病風險和模型診斷可視化
拓端tecdat|R語言邏輯回歸、随機森林、SVM支援向量機預測Framingham心髒病風險和模型診斷可視化
拓端tecdat|R語言邏輯回歸、随機森林、SVM支援向量機預測Framingham心髒病風險和模型診斷可視化
拓端tecdat|R語言邏輯回歸、随機森林、SVM支援向量機預測Framingham心髒病風險和模型診斷可視化

由圖像知,glucose和hearRate變量有不顯着的風險

  1.  table1=table
  2.  chisq.test
拓端tecdat|R語言邏輯回歸、随機森林、SVM支援向量機預測Framingham心髒病風險和模型診斷可視化
table1      
拓端tecdat|R語言邏輯回歸、随機森林、SVM支援向量機預測Framingham心髒病風險和模型診斷可視化
  1.  table2=table
  2.  chisq.test
拓端tecdat|R語言邏輯回歸、随機森林、SVM支援向量機預測Framingham心髒病風險和模型診斷可視化
  1.  table3=table
  2.  chisq.test
拓端tecdat|R語言邏輯回歸、随機森林、SVM支援向量機預測Framingham心髒病風險和模型診斷可視化
chisq.test      
拓端tecdat|R語言邏輯回歸、随機森林、SVM支援向量機預測Framingham心髒病風險和模型診斷可視化
拓端tecdat|R語言邏輯回歸、随機森林、SVM支援向量機預測Framingham心髒病風險和模型診斷可視化
拓端tecdat|R語言邏輯回歸、随機森林、SVM支援向量機預測Framingham心髒病風險和模型診斷可視化
拓端tecdat|R語言邏輯回歸、随機森林、SVM支援向量機預測Framingham心髒病風險和模型診斷可視化
拓端tecdat|R語言邏輯回歸、随機森林、SVM支援向量機預測Framingham心髒病風險和模型診斷可視化
ggpairs      
拓端tecdat|R語言邏輯回歸、随機森林、SVM支援向量機預測Framingham心髒病風險和模型診斷可視化

diaBP和sysBP有多重共線性的問題。 

currentSmoker變量可能不顯着,下面進入模型部分。

模型

  1.  # 劃分資料集
  2.  split = sample.split
  3.  train = subset

邏輯回歸

  1.  # 邏輯回歸模型 - 使用所有變量
  2.  fultaog = glm
  3.  summary(fulog)
拓端tecdat|R語言邏輯回歸、随機森林、SVM支援向量機預測Framingham心髒病風險和模型診斷可視化
拓端tecdat|R語言邏輯回歸、随機森林、SVM支援向量機預測Framingham心髒病風險和模型診斷可視化
  1.  fldaog = glm
  2.  summary(fuatLg)
拓端tecdat|R語言邏輯回歸、随機森林、SVM支援向量機預測Framingham心髒病風險和模型診斷可視化
  1.  prdts = predict
  2.  glm_le <- table
ACCU      
拓端tecdat|R語言邏輯回歸、随機森林、SVM支援向量機預測Framingham心髒病風險和模型診斷可視化

随機森林

  1.  rfoel <- randomForest
  2.  # 獲得重要性
  3.  imprace
拓端tecdat|R語言邏輯回歸、随機森林、SVM支援向量機預測Framingham心髒病風險和模型診斷可視化
  1.  # 選擇重要的因素
  2.  rfmdel <- randomForest
  3.  # 誤差
  4.  plot
拓端tecdat|R語言邏輯回歸、随機森林、SVM支援向量機預測Framingham心髒病風險和模型診斷可視化
  1.  # 擷取重要性
  2.  ggplot +
  3.  geom_bar
  4.  geom_text
拓端tecdat|R語言邏輯回歸、随機森林、SVM支援向量機預測Framingham心髒病風險和模型診斷可視化

這裡有患病風險的誤差不降反升,需要探究其中原因

  1.  # 繪制分類圖像
  2.  pred<-predict
  3.  pdou_1<-predict #輸出機率
  4.  table <- table
  5.  sum(diag/sum #預測準确率
拓端tecdat|R語言邏輯回歸、随機森林、SVM支援向量機預測Framingham心髒病風險和模型診斷可視化
plot(margin      
拓端tecdat|R語言邏輯回歸、随機森林、SVM支援向量機預測Framingham心髒病風險和模型診斷可視化

SVM支援向量機

  1.  # 先進行模型調優
  2.  tud <- tune.svm
  3.  summary(tud )
拓端tecdat|R語言邏輯回歸、随機森林、SVM支援向量機預測Framingham心髒病風險和模型診斷可視化
拓端tecdat|R語言邏輯回歸、随機森林、SVM支援向量機預測Framingham心髒病風險和模型診斷可視化
拓端tecdat|R語言邏輯回歸、随機森林、SVM支援向量機預測Framingham心髒病風險和模型診斷可視化
拓端tecdat|R語言邏輯回歸、随機森林、SVM支援向量機預測Framingham心髒病風險和模型診斷可視化
  1.  # 使用turning函數得到最佳參數設定支援向量機
  2.  mel.nd <- svm
  3.  cost=tuned$
  4.  summary(modted)
拓端tecdat|R語言邏輯回歸、随機森林、SVM支援向量機預測Framingham心髒病風險和模型診斷可視化
  1.  # 調用predict函數基于剛配置好的SVM模型進行類标号的預測:
  2.  sm.ne.ed <- predict
  3.  sv.tuedtble <- table
  4.  sm.ue.tbe
拓端tecdat|R語言邏輯回歸、随機森林、SVM支援向量機預測Framingham心髒病風險和模型診斷可視化
acy.s.vm <- sum(diag)/sum      
拓端tecdat|R語言邏輯回歸、随機森林、SVM支援向量機預測Framingham心髒病風險和模型診斷可視化

模型診斷

根據上面三個模型的結果,可以看出預測結果的類别數量分布非常不均衡

sum      
拓端tecdat|R語言邏輯回歸、随機森林、SVM支援向量機預測Framingham心髒病風險和模型診斷可視化
sum(TeYaHD == 0)      
拓端tecdat|R語言邏輯回歸、随機森林、SVM支援向量機預測Framingham心髒病風險和模型診斷可視化