Library:

> # install.packages("knitr")
> # install.packages("rmarkdown")
> # install.packages("prettydoc")
> # install.packages("equatiomatic")

1 PENDAHULUAN

1.1 Latar Belakang Kasus

Perkembangan dunia yang semakin modern tidak hanya memberikan makna positif bagi kehidupan manusia, tetapi selalu diikuti dengan kemunculan dampak negatif. Saat membutuhkan tempat tinggal baru, manusia akan mencari tempat kosong yang mau tidak mau akan menggusur ekosistem di tempat tersebut, menyebabkan keanekaragaman flora fauna hilang dan akan menimbulkan polusi bagi lingkungan. Penyakit kardiovaskular menjadi salah satu akibat negatif dari komplikasi ulah manusia dalam merusak lingkungan. Penyakit kardiovaskular adalah sekelompok penyakit jantung dan pembuluh darah yang meliputi: penyakit jantung koroner (coronary heart disease), penyakit serebrovaskular (cerebro-vascular disease), penyakit arteri perifer (peripheral arterial disease), penyakit jantung rematik (rheumatic heart disease), penyakit jantung bawaan (congenital heart disease), trombosis vena dalam (deep vein thrombosis) dan emboli pulmonal (pulmonary embolism) (Juslim & Herawati, 2018). Penyakit kardiovaskular disebabkan perilaku hidup yang tidak sehat seperti jarang berolahraga, makan makanan siap saji yang mengandung banyak gula, banyak terpapar polusi (udara,air,tanah), tidak menjaga pola tidur, dan lain sebagainya.

1.2 Data

Data yang digunakan adalah data yang berasal dari website Mendeley Data (https://data.mendeley.com/datasets/dzz48mvjht/1). Data penyakit kardiovaskular ini diambil dari salah satu rumah sakit di India. Total sampel mencapai 1000 subjek dengan 14 aspek penelitian yang dapat menjadi indikator penyebab seseorang mengidap penyakit kardiovaskular atau tidak.

> library(openxlsx)
> datareglog<-read.xlsx('C:/Users/LENOVO/Downloads/Cardiovascular_Disease_Dataset.xlsx')
> library(rmarkdown)
> paged_table(as.data.frame(datareglog))

1.3 Latar Belakang Metode

Regresi logistik terdiri dari tiga jenis, yaitu regresi logistik biner, regresi logistik ordinal, dan regresi logistik multinomial. Pada regresi logistik biner, variabel respon bersifat biner dan variabel prediktor kontinu (Putri, Mariani, & Sunarmi, 2021). Sifat biner pada variabel respon bermaksud hanya memiliki dua kemungkinan nilai, contohnya “ya” atau “tidak”. Bentuk lain yang kerap ditemui dalam penulisan variabel respon adalah “0” yang mewakili suatu nilai misalnya sakit dan “1” yang mewakili suatu nilai lain misalnya sehat.

1.4 Tinjauan Pustaka Metode

Fungsi peluang untuk setiap pengamatan variabel respon sebagai berikut : \[ f(y)=\pi^y(1-\pi)^{1-y} ; y=0,1 \] Bentuk regresi logistik dengan variabel prediktor sampai ke-i sebagai berikut : \[ \pi(x)=\frac{exp(\beta_{0}+\beta_{1}x_{1}+....+\beta_{i}x_{i})}{1+exp(\beta_{0}+\beta_{1}x_{1}+....+\beta_{i}x_{i})} \] Menurut Putri, Mariani, dan Sunarmi (2021) bentuk regresi di atas perlu ditransformasi menggunakan transformasi logit untuk mendapatkan persamaan yang linier. Bentuk transformasinya sebagai berikut : \[ logit(\pi(x))=ln(\frac{\pi(x)}{1-\pi(x)})=\beta_{0}+\beta_{1}x_{1}+...+\beta_{i}x_{i} \]

1.5 Tujuan Analisis

Analisis regresi logistik biner ini memiliki tujuan untuk mengetahui hubungan antara variabel prediktor dan variabel dependen dengan dua kategori yang mewakili suatu nilai karakteristik tertentu

2 SOURCE CODE

2.1 Library

> library(knitr)
> library(rmarkdown)
> library(tinytex)
> library(generalhoslem)
> library(pscl)
> library(readxl)
> library(car)
> library(openxlsx)

2.1.1 Fungsi dari Setiap Library :

  • library(knitr) : menguhubungkan bahasa pemrograman R dengan LaTex.
  • library(rmarkdown) : digunakan untuk memformat Syntax yang telah dibuat dan dijadikan dalam bentuk html, pdf, dan dokumen microsoft word.
  • library(tinytex) : memungkinkan dokumen markdown dijadikan format pdf.
  • library(generalhoslem): uji kebaikan model.
  • library(pscl) : digunakan untuk membentuk model regresi logistik.
  • library(readxl) : digunakan untuk membaca data file excel.
  • library(car) : berisi fungsi-fungsi yang berguna dalam perhitungan analisis regresi.
  • library(openxlsx) : digunakan untuk membaca, menulis, dan edit data dalam bentuk file xlsx.

2.2 Source Code

2.2.1 Import Data

> datareglog<-read.xlsx('C:/Users/LENOVO/Downloads/Cardiovascular_Disease_Dataset.xlsx')
> str(datareglog)
'data.frame':   1000 obs. of  14 variables:
 $ patientid        : num  103368 119250 119372 132514 146211 ...
 $ age              : num  53 40 49 43 31 24 79 52 62 61 ...
 $ gender           : num  1 1 1 1 1 1 1 1 1 0 ...
 $ chestpain        : num  2 0 2 0 1 1 2 0 0 0 ...
 $ restingBP        : num  171 94 133 138 199 173 130 127 121 190 ...
 $ serumcholestrol  : num  0 229 142 295 0 0 240 345 357 181 ...
 $ fastingbloodsugar: num  0 0 0 1 0 0 0 0 0 0 ...
 $ restingrelectro  : num  1 1 0 1 2 0 2 0 1 1 ...
 $ maxheartrate     : num  147 115 202 153 136 161 157 192 138 150 ...
 $ exerciseangia    : num  0 0 1 0 0 0 0 1 0 0 ...
 $ oldpeak          : chr  "5.3" "3.7" "5" "3.2" ...
 $ slope            : num  3 1 1 2 3 3 2 1 0 2 ...
 $ noofmajorvessels : num  3 1 0 2 2 2 1 0 0 0 ...
 $ target           : num  1 0 0 1 1 1 1 0 0 1 ...

2.2.2 Data Frame

> y=as.factor(datareglog$target)
> x1=datareglog$age
> x2=datareglog$restingBP
> x3=as.factor(datareglog$fastingbloodsugar)
> x4=datareglog$maxheartrate
> datapenyakit<-data.frame(y,x1,x2,x3,x4)
> str(datapenyakit)
'data.frame':   1000 obs. of  5 variables:
 $ y : Factor w/ 2 levels "0","1": 2 1 1 2 2 2 2 1 1 2 ...
 $ x1: num  53 40 49 43 31 24 79 52 62 61 ...
 $ x2: num  171 94 133 138 199 173 130 127 121 190 ...
 $ x3: Factor w/ 2 levels "0","1": 1 1 1 2 1 1 1 1 1 1 ...
 $ x4: num  147 115 202 153 136 161 157 192 138 150 ...

Data frame yang dibentuk memiliki variabel respon (y) diwakili oleh kolom target, dan dipilih 4 variabel prediktor (x) dari 13 variabel prediktor yang ada. Kolom yang menjadi x1, x2, x3, dan x4 secara berturut-turut adalah umur, tekanan darah, hasil tes gula darah, dan detak jantung maksimal.

2.2.3 Analisis Regresi Logistik

Untuk menghasilkan nilai koefisien dari seluruh variabel, galat, nilai p-value, sekaligus menguji apakah masing-masing variabel prediktor berpengaruh signifikan atau tidak terhadap variabel respon.

> reglog<-glm(y~x1+x2+x3+x4, family=binomial, data=datapenyakit)

2.2.4 Asumsi Multikolinearitas

Untuk mengetahui adanya indikasi korelasi antar variabel prediktor

> vif_values<-car::vif(reglog)

2.2.5 Uji Signifikansi Model

Pengujian regresi logistik secara simultan untuk mengetahui signifikansi model secara keseluruhan

> pR2(reglog)
fitting null model for pseudo-r2
         llh      llhNull           G2     McFadden         r2ML         r2CU 
-502.2656066 -680.2920002  356.0527872    0.2616911    0.2995644    0.4029170 
> qchisq(0.95,3)
[1] 7.814728

2.2.6 Uji Parsial

> reglog<-glm(y~x1+x2+x3+x4, family=binomial, data=datapenyakit)
> summary(reglog)

Call:
glm(formula = y ~ x1 + x2 + x3 + x4, family = binomial, data = datapenyakit)

Coefficients:
             Estimate Std. Error z value Pr(>|z|)    
(Intercept) -7.932993   0.643528 -12.327  < 2e-16 ***
x1           0.002805   0.004380   0.641    0.522    
x2           0.038575   0.002994  12.885  < 2e-16 ***
x31          1.370857   0.188828   7.260 3.88e-13 ***
x4           0.013945   0.002327   5.993 2.05e-09 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 1360.6  on 999  degrees of freedom
Residual deviance: 1004.5  on 995  degrees of freedom
AIC: 1014.5

Number of Fisher Scoring iterations: 4

2.2.7 Odds Ratio

Untuk mengetahui rasio probabilitas sukes terhadap gagal

> beta<-(coef(reglog))
> OR_beta<-exp(beta)
> rasio<-cbind(beta,OR_beta)

2.2.8 Uji Klasifikasi

Untuk mengetahui proporsi sampel yang memenuhi kedua kategori variabel respon

> predik=fitted(reglog)
> datapenyakit$predik=predik
> klasifikasi=table(datapenyakit$y, datapenyakit$predik>0.5)

2.2.9 Uji Kelayakan Model

Untuk mengetahui kelayakan suatu model yang telah terbentuk

> UKM<-logitgof(datapenyakit$y, fitted(reglog))

3 HASIL DAN PEMBAHASAN

3.1 Analisis Regresi Logistik Biner

> reglog<-glm(y~x1+x2+x3+x4, family=binomial, data=datapenyakit)
> summary(reglog)

Call:
glm(formula = y ~ x1 + x2 + x3 + x4, family = binomial, data = datapenyakit)

Coefficients:
             Estimate Std. Error z value Pr(>|z|)    
(Intercept) -7.932993   0.643528 -12.327  < 2e-16 ***
x1           0.002805   0.004380   0.641    0.522    
x2           0.038575   0.002994  12.885  < 2e-16 ***
x31          1.370857   0.188828   7.260 3.88e-13 ***
x4           0.013945   0.002327   5.993 2.05e-09 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 1360.6  on 999  degrees of freedom
Residual deviance: 1004.5  on 995  degrees of freedom
AIC: 1014.5

Number of Fisher Scoring iterations: 4

3.2 Hipotesis

\[ H0 = \beta_{1} = \beta_{2} = \beta_{3} = \beta_{4} = 0\\ H1 = minimal \hspace{0.2cm} ada \hspace{0.2cm} satu \hspace{0.2cm}\beta_{i} \neq 0\\ i = 1,2,3,4 \]

3.3 Model

Berdasarkan output yang dihasilkan dari analisis regresi logistik biner, didapatkan model regresi seperti berikut :

\[ y = -7.932993\ + 0.002805x_{1}\ + 0.038575x_{2}\ + 1.370857x_{31}\ + 0.013945x_{4} \]

  • y = mengidap penyakit kardiovaskular (referensi kategori : 1(ya))
  • x1 = umur (tahun)
  • x2 = tekanan darah (mmHG)
  • x31 = tes gula darah (referensi kategori : 1 (ya))(>120 mg/dl)
  • x4 = detak jantung maksimal (puncak)

Model Regresi Logistik yang terbentuk sebagai berikut :

\[ \pi(x)=\frac{exp(-7.932993+0.002805x_{1}+0.038575x_{2}+ 1.370857 x_{31}+0.013945x_{4})}{1+exp(-7.932993+0.002805x_{1}+0.038575x_{2}+ 1.370857 x_{31}+0.013945x_{4})} \]

Transformasi Logit yang terbentuk sebagai berikut :

\[ logit(\pi(x))=ln(\frac{\pi(x)}{1-\pi(x)})=-7.932993+0.002805x_{1}+0.038575x_{2}+ 1.370857 x_{31}+0.013945x_{4} \]

3.3.1 Pembahasan

Model regresi di atas dapat diinterpretasikan sebagai berikut :

\[ b_{1} = 0.002805\ \text {berarti setiap kenaikan umur sebanyak 1 tahun, peluang seseorang mengidap penyakit kardiovaskular}\\ \text{akan naik sebesar 0.002805 dengan asumsi variabel prediktor lainnya konstan}\\ b_{2} = 0.038575\ \text{berarti setiap kenaikan tekanan darah sebesar 1 mmHG, peluang seseorang mengidap penyakit kardioovaskular}\\ \text{akan naik sebesar 0.038575 dengan asumsi variabel prediktor lainnya konstan}\\ b_{3} = 1.370857\ \text{berarti setiap sampel dengan kategori tes gula darah (1) atau memiliki kadar gula darah di atas 120 mg/dl,}\\ \text {peluang seseorang mengidap penyakit kardiovaskular akan naik sebesar 1.370857 dengan asumsi variabel}\\ \text{prediktor lainnya konstan}\\ b_{4} = 0.013945\ \text{berarti setiap kenaikan detak jantung maksimal sebesar 1, peluang seseorang mengidap penyakit kardiovaskular}\\ \text{akan naik sebesar 0.013945 dengan asumsi variabel prediktor lainnya konstan} \]

3.4 Pengujian Asumsi dan Pembahasan

3.4.1 Asumsi Multikolinearitas

> vif_values<-car::vif(reglog)
> vif_values
      x1       x2       x3       x4 
1.003883 1.020429 1.005247 1.014643 

3.4.1.1 Pembahasan

Semua nilai VIF < 10, maka asumsi multikolinearitas terpenuhi. Disimpulkan bahwa tidak ada korelasi antar variabel prediktor.

3.4.2 Uji Signifikansi Model

> pR2(reglog)
fitting null model for pseudo-r2
         llh      llhNull           G2     McFadden         r2ML         r2CU 
-502.2656066 -680.2920002  356.0527872    0.2616911    0.2995644    0.4029170 
> qchisq(0.95,3)
[1] 7.814728

3.4.2.1 Pembahasan

\[ H0 = \beta_{1} = \beta_{2} = \beta_{3} = \beta_{4} = 0\\ H1 = minimal \hspace{0.2cm} ada \hspace{0.2cm} satu \hspace{0.2cm}\beta_{i} \neq 0\\ i = 1,2,3,4 \]

\[ \text{Diperoleh output seperti berikut :}\\ G = 356.0527872\\ X^{2}_{0.05, 3} = 7.814728 \]

Karena nilai G lebih besar dari nilai chi-square maka tolak HO. Jadi dengan taraf nyata 0.05 dapat disimpulkan bahwa semua variabel prediktor yang terdiri dari umur, tekanan darah, hasil tes gula darah, dan detak jantung maksimal, berpengaruh signifikan secara simultan terhadap peluang seseorang mengidap penyakit kardiovaskular.

3.4.3 Uji Parsial

> reglog<-glm(y~x1+x2+x3+x4, family=binomial, data=datapenyakit)
> summary(reglog)

Call:
glm(formula = y ~ x1 + x2 + x3 + x4, family = binomial, data = datapenyakit)

Coefficients:
             Estimate Std. Error z value Pr(>|z|)    
(Intercept) -7.932993   0.643528 -12.327  < 2e-16 ***
x1           0.002805   0.004380   0.641    0.522    
x2           0.038575   0.002994  12.885  < 2e-16 ***
x31          1.370857   0.188828   7.260 3.88e-13 ***
x4           0.013945   0.002327   5.993 2.05e-09 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 1360.6  on 999  degrees of freedom
Residual deviance: 1004.5  on 995  degrees of freedom
AIC: 1014.5

Number of Fisher Scoring iterations: 4

3.4.3.1 Pembahasan

\[ H0 = \beta_{i} = 0\\ H1 =\beta_{i} \neq 0\\ i = 1,2,3,4 \]

\[ \text{Diperoleh output p-value seperti berikut :}\\ x_{1} = 0.522\\ x_{2} = <2e-16\\ x_{31}= 3.88e-13\\ x_{4} = 2.05e-09\\ \alpha = 0.05 \]

Dapat dilihat bahwa x2,x3,x4 semuanya memilliki p-value kurang dari nilai taraf nyata 0.05, sedangkan x1 memiliki p-value lebih dari nilai taraf nyata 0.05. Jadi dapat disimpulkan bahwa variabel tekanan darah, hasil tes gula darah, dan detak jantung maksimal secara parsial berpengaruh signifikan terhadap peluang seseorang mengidap penyakit kardiovaskular. Di sisi lain variabel prediktor umur secara parsial tidak berpengaruh signifikan terhadap peluang seseorang mengidap penyakit kardiovaskular.

3.4.4 Odds Ratio

> beta<-(coef(reglog))
> OR_beta<-exp(beta)
> rasio<-cbind(beta,OR_beta)
> paged_table(as.data.frame(rasio))

3.4.4.1 Pembahasan

  • x1 = 1.002809205 -> Seseorang yang memiliki umur lebih tua memiliki peluang mengidap penyakit kardiovaskular sekitar 1.0028 kali dibandingkan dengan seseorang yang memiliki umur lebih muda, dengan asumsi variabel prediktor lainnya konstan.
  • x2 = 1.039328782 -> Setiap peningkatan dalam tekanan darah (mmHG) akan meningkatkan peluang seseorang mengidap penyakit kardiovaskular sekitar 1.039 kali, dengan asumsi variabel prediktor lainnya konstan.
  • x31 = 3.938726157 -> Seseorang yang memiliki kadar gula darah lebih dari 120 mg/dl memiliki peluang mengidap penyakit kardiovaskular 3.9387 kali, dengan asumsi variabel prediktor lainnya konstan.
  • x41 = 1.014042918 -> Setiap peningkatan dalam detak jantung maksimal akan meningkatkan peluang seseorang mengidap penyakit kardiovaskular 1.014 kali, dengan asumsi variabel prediktor lainnya konstan.

3.4.5 Klasifikasi

> predik=fitted(reglog)
> datapenyakit$predik=predik
> klasifikasi=table(datapenyakit$y, datapenyakit$predik>0.5)
> klasifikasi
   
    FALSE TRUE
  0   301  119
  1   102  478

3.4.5.1 Pembahasan

Hasil prediksi menunjukkan bahwa berdasarkan data uji, dari 1000 observasi terdapat 403 sampel pasien tidak menderita penyakit kardiovaskular. Model berhasil memprediksi dengan tepat sebanyak 301 pasien, sedangkan 102 sisanya diprediksi mengidap penyakit kardiovaskular. Serta terdapat 597 sampel pasien menderita penyakit kardiovaskular dan model berhasil memprediksi dengan tepat sebanyak 478 pasien sedangkan 119 pasien lainnya diprediksi tidak mengidap penyakit kardiovaskular. Sehingga keakuratan model dalam memprediksi adalah 62.97%.

3.4.6 Uji Kelayakan Model

> UKM<-logitgof(datapenyakit$y, fitted(reglog))
> UKM

    Hosmer and Lemeshow test (binary model)

data:  datapenyakit$y, fitted(reglog)
X-squared = 26.81, df = 8, p-value = 0.0007623

3.4.6.1 Pembahasan

\[ H0 = \text{Model Layak}\\ H1 =\text{Model Tidak Layak} \]

\[ \text{Diperoleh output p-value seperti berikut :}\\ p-value = 0.0007623\\ \alpha = 0.05 \]

Karena p-value kurang dari nilai taraf nyata 0.05 maka dapat diputuskan tolah H0, jadi dapat disimpulkan bahwa model yang terbentuk adalah model yang tidak layak.

4 PENUTUP

4.1 Kesimpulan

Kesimpulan yang didapat dari hasil analisis regresi logistik biner ini adalah model yang terbentuk bukanlah model yang layak untuk menjabarkan hubungan antara variabel respon dengan variabel prediktor. Hal ini dipengaruhi oleh salah satu variabel prediktor yaitu X1 (umur) yang secara parsial tidak berpengaruh signifikan terhadap peluang seseorang mengidap penyakit kardiovaskular.

4.2 Saran

Sebaiknya ketika terjadi indikasi munculnya variabel prediktor yang secara parsial tidak signifikan terhadap variabel responnya, maka dengan segera dilakukan perubahan variabel prediktor yang digunakan atau mengambil ulang data sampel yang benar-benar mewakili nilai suatu populasi.

4.3 Daftar Pustaka

Bhattacharyya, D. & Doppala, B. P., 2021. Cardiovascular_Disease_Dataset. [Online] Available at: https://data.mendeley.com/datasets/dzz48mvjht/1 [Accessed 03 06 2024].

Juslim, R. R. & Herawati, F., 2018. Penyakit Kardiovaskular. In: Seri Pengobatan Rasional. Yogyakarta: Graha Ilmu, pp. 1-14.

Putri, D. L. W., Mariani, S. & S., 2021. Peningkatan Ketepatan Klasifikasi Model Regresi Logistik Biner dengan Metode. Indonesian Journal of Mathematics and Natural Sciences, 44(2), pp. 61-72.