Objective

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

Install Package

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)

Data Reading

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”)

Data Pre-Processing

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