Project ini dibuat untuk melatih pemahaman terkait pembuatan machine learning model menggunakan metode Logistic Regression. Kasus yang diambil adalah memprediksi pasien penyakit jantung pada suatu rumah sakit. Diharapkan model yang dibuat dapat memprediksi pasien apakah berpotensi terkena penyakit jantung atau tidak di kemudian hari.
Logistic Regresion
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(gtools)
library(ggplot2)
library(class)
library(tidyr)
library(prettydoc)
heart <- read.csv("framingham.csv")
str(heart)
## 'data.frame': 4238 obs. of 16 variables:
## $ male : int 1 0 1 0 0 0 0 0 1 1 ...
## $ age : int 39 46 48 61 46 43 63 45 52 43 ...
## $ education : int 4 2 1 3 3 2 1 2 1 1 ...
## $ currentSmoker : int 0 0 1 1 1 0 0 1 0 1 ...
## $ cigsPerDay : int 0 0 20 30 23 0 0 20 0 30 ...
## $ BPMeds : int 0 0 0 0 0 0 0 0 0 0 ...
## $ prevalentStroke: int 0 0 0 0 0 0 0 0 0 0 ...
## $ prevalentHyp : int 0 0 0 1 0 1 0 0 1 1 ...
## $ diabetes : int 0 0 0 0 0 0 0 0 0 0 ...
## $ totChol : int 195 250 245 225 285 228 205 313 260 225 ...
## $ sysBP : num 106 121 128 150 130 ...
## $ diaBP : num 70 81 80 95 84 110 71 71 89 107 ...
## $ BMI : num 27 28.7 25.3 28.6 23.1 ...
## $ heartRate : int 80 95 75 65 85 77 60 79 76 93 ...
## $ glucose : int 77 76 70 103 85 99 85 78 79 88 ...
## $ TenYearCHD : int 0 0 0 1 0 0 1 0 0 0 ...
Demografis:
• Jenis Kelamin: laki-laki atau perempuan (Nominal)
• Usia: Usia pasien; (Kontinu - Meskipun usia yang tercatat telah dipotong menjadi bilangan bulat, konsep usia adalah kontinu)
Perilaku
• Perokok Saat Ini: apakah pasien adalah perokok saat ini (Nominal) atau tidak
• Rokok Per Hari: jumlah rata-rata batang rokok yang dihisap seseorang dalam satu hari. (dapat dianggap terus menerus karena seseorang dapat memiliki sejumlah batang rokok, bahkan setengah batang.)
Riwayat kesehatan)
• BP Meds: ada atau tidaknya pasien dalam pengobatan tekanan darah (Nominal)
• Prevalen Stroke: apakah pasien sebelumnya mengalami stroke atau tidak (Nominal)
• Prevalen Hyp : apakah pasien hipertensi atau tidak (Nominal)
• Diabetes: apakah pasien menderita diabetes atau tidak (Nominal)
Medis (saat ini)
• Tot Chol : kadar kolesterol total (Terus menerus)
• Sys BP: tekanan darah sistolik (Terus-menerus)
• Dia BP: tekanan darah diastolik (Kontinu)
• BMI: Indeks Massa Tubuh (Terus-menerus)
• Denyut Jantung: detak jantung (Kontinu - Dalam penelitian medis, variabel seperti detak jantung meskipun sebenarnya terpisah, namun dianggap kontinu karena sejumlah besar nilai yang mungkin.)
• Glukosa: kadar glukosa (Terus menerus)
Variabel prediksi (target yang diinginkan)
• 10 tahun risiko penyakit jantung koroner PJK (biner: “1”, artinya “Ya”, “0” artinya “Tidak”)
Cek Missing Value
colSums(is.na(heart))
## male age education currentSmoker cigsPerDay
## 0 0 105 0 29
## BPMeds prevalentStroke prevalentHyp diabetes totChol
## 53 0 0 0 50
## sysBP diaBP BMI heartRate glucose
## 0 0 19 1 388
## TenYearCHD
## 0
Missing Value Treatment
heart_clean <- na.omit(heart)
Sebelum melakukan pemodelan, kita perlu melihat terlebih dahulu proporsi dari target variabel yang kita miliki pada kolom target.
prop.table(table(heart_clean$TenYearCHD))
##
## 0 1
## 0.8476477 0.1523523