1 Pendahuluan

Diabetes melitus merupakan penyakit kronis yang dapat menimbulkan berbagai komplikasi, salah satunya adalah retinopati diabetik, yaitu kerusakan pada retina akibat gangguan pembuluh darah kecil. Retinopati diabetik dipengaruhi oleh berbagai faktor klinis dan memiliki respon bersifat dikotomi, yaitu adanya atau tidak adanya retinopati.

Dalam analisis data kesehatan dengan respon dikotomi, regresi logistik merupakan metode yang tepat untuk memodelkan peluang terjadinya suatu kejadian berdasarkan variabel prediktor. Oleh karena itu, dalam analisis ini digunakan metode regresi logistik untuk menganalisis faktor-faktor yang memengaruhi kejadian retinopati diabetik menggunakan data Diabetic Retinopathy Debrecen yang diolah dengan bahasa pemrograman R. Analisis ini bertujuan untuk mengidentifikasi faktor-faktor yang berpengaruh terhadap kejadian retinopati diabetik berdasarkan variabel-variabel yang tersedia dalam data.

2 Deskripsi dan Sumber Data

Data yang digunakan dalam analisis ini adalah data Diabetic Retinopathy Debrecen yang diperoleh dari UCI ,achine Learning Repository. Yang berisi data hasil pemeriksaan pasien diabetes yang bertujuan untuk mengidentifikasi keberadaan retinopati diabetik pada pasien penderita diabetes melitus berdasarkan karakteristik klinis dan pengukuran tertentu. Dataset terdiri dari 20 variabel, yang meliputi 1 variabel respon dan 19 variabel prediktor. Variabel respon bersifat dikotomi dan menunjukkan status retinopati diabetik, sedangkan variabel prediktor berupa variabel numerik hasil pengukuran medis yang digunakan untuk menjelaskan peluang terjadinya retinopati diabetik.

2.1 Variabel Respon

  • Class
    Variabel ini menunjukkan status retinopati diabetik pada pasien, dengan:
    • 1 : Pasien terindikasi mengalami retinopati diabetik
    • 0 : Pasien tidak mengalami retinopati diabetik

2.2 Variabel Prediktor

Variabel prediktor merupakan hasil pengukuran dari citra retina yang digunakan sebagai peubah penjelas dalam model regresi logistik. Secara umum, variabel prediktor dalam dataset ini dapat dikelompokkan sebagai berikut:

  • Quality
    Menunjukkan kualitas citra retina yang digunakan dalam proses analisis.

  • Pre-screening Features
    Merupakan indikator awal yang digunakan untuk mendeteksi adanya kelainan pada retina.

  • Lesion-based Features
    Menggambarkan karakteristik lesi pada retina, seperti mikroaneurisma dan area abnormal lainnya.

  • Anatomical and Distance Features
    Berkaitan dengan struktur anatomi retina dan jarak antar bagian tertentu yang relevan dalam pendeteksian retinopati.

Struktur data dengan variabel respon biner dan prediktor numerik ini sesuai untuk dianalisis menggunakan metode regresi logistik.

library(readxl)
library(dplyr)

df <- read_xlsx("diabetic_retinopathy_dataset.xlsx")
str(df)
## tibble [1,151 × 20] (S3: tbl_df/tbl/data.frame)
##  $ 0    : num [1:1151] 1 1 1 1 1 1 1 1 1 1 ...
##  $ 1    : num [1:1151] 1 1 1 1 1 1 0 1 1 1 ...
##  $ 2    : num [1:1151] 22 24 62 55 44 44 29 6 22 79 ...
##  $ 3    : num [1:1151] 22 24 60 53 44 43 29 6 21 75 ...
##  $ 4    : num [1:1151] 22 22 59 53 44 41 29 6 18 73 ...
##  $ 5    : num [1:1151] 19 18 54 50 41 41 27 6 15 71 ...
##  $ 6    : num [1:1151] 18 16 47 43 39 37 25 2 13 64 ...
##  $ 7    : num [1:1151] 14 13 33 31 27 29 16 1 10 47 ...
##  $ 8    : num [1:1151] 49.9 57.7 55.8 40.5 18 ...
##  $ 9    : num [1:1151] 17.78 23.8 27.99 18.45 8.57 ...
##  $ 10   : num [1:1151] 5.27 3.33 12.69 9.12 0.41 ...
##  $ 11   : num [1:1151] 0.772 0.234 4.852 3.079 0 ...
##  $ 12   : num [1:1151] 0.0186 0.0039 1.3939 0.8403 0 ...
##  $ 13   : num [1:1151] 0.00686 0.0039 0.37325 0.27243 0 ...
##  $ 14   : num [1:1151] 0.00392 0.0039 0.04182 0.00765 0 ...
##  $ 15   : num [1:1151] 0.00392 0.0039 0.00774 0.00153 0 ...
##  $ 16   : num [1:1151] 0.487 0.521 0.531 0.483 0.476 ...
##  $ 17   : num [1:1151] 0.1 0.144 0.129 0.115 0.124 ...
##  $ 18   : num [1:1151] 1 0 0 0 0 0 0 1 0 0 ...
##  $ Class: chr [1:1151] "0" "0" "1" "0" ...
dim(df)
## [1] 1151   20
sapply(df, class)
##           0           1           2           3           4           5 
##   "numeric"   "numeric"   "numeric"   "numeric"   "numeric"   "numeric" 
##           6           7           8           9          10          11 
##   "numeric"   "numeric"   "numeric"   "numeric"   "numeric"   "numeric" 
##          12          13          14          15          16          17 
##   "numeric"   "numeric"   "numeric"   "numeric"   "numeric"   "numeric" 
##          18       Class 
##   "numeric" "character"
sum(is.na(df))
## [1] 0

Data memiliki 1151 dan 20 kolom, dengan Class sebagai variabel respon dan sisanya sebagai variabel prediktor numerik.

  • Mengubah Variabel Class menjadi factor
  df$Class <- as.factor(df$Class)
levels(df$Class) <- c("No_DR", "DR")

table(df$Class)
## 
## No_DR    DR 
##   540   611
prop.table(table(df$Class))
## 
##     No_DR        DR 
## 0.4691573 0.5308427

Distribusi kelas relatif seimbang, dengan sekitar 46.9% No_DR dan 53.1% DR, sehingga tidak terdapat masalah ketidakseimbangan kelas yang ekstrem.

3 Exploratory Data Analysis (EDA)

3.1 Distribusi Kelas

ggplot(df, aes(x = Class)) +
  geom_bar(fill = c("skyblue", "salmon")) +
  labs(title = "Distribusi Kelas: Retinopati Diabetik",
       x = "Class",
       y = "Frekuensi") +
  theme_minimal()

Interpretasi Grafik tersebut menunjukkan jumlah observasi (frekuensi) untuk masing masing kelas dalam dataset, untuk proporsinya: - No_DR : 540/1151= 46.9% -DR : 611/1151= 53.1% Proporsi kelas cukup seimbang (46.9% vs 53.1%), sehingga tidak diperlukan teknik penyeimbangan kelas dalam pemodelan.

3.2 Korelasi Antar Variabel

Analisis korelasi dilakukan untuk melihat hubungan linier antar variabel numerik serta mendeteksi potensi multikolinearitas sebelum dilakukan pemodelan regresi logistik.

names(df)[1:19] <- c(
  "quality", "pre_screening",
  "ma1", "ma2", "ma3", "ma4", "ma5", "ma6",
  "exudate1", "exudate2", "exudate3", "exudate5", "exudate6", "exudate7", "exudate8",
  "macula_dist", "optic_diam", "am_fm", "class_numeric"
)
numeric_vars <- sapply(df, is.numeric)
cor_mat <- cor(df[, numeric_vars])
# Heatmap
corrplot(cor_mat, method = "color", tl.cex = 0.6, type = "upper")

Interpretasi Heatmap korelasi menunjukkan adanya korelasi positif sangat kuat di antara fitur-fitur mikroaneurisma (ma1 hingga ma6), yang mengindikasikan adanya multikolinearitas tinggi dalam dataset. Hal ini wajar secara medis, karena jumlah mikroaneurisma cenderung muncul secara bersamaan di berbagai lokasi retina pada pasien dengan retinopati diabetik. Meskipun kondisi ini dapat memengaruhi stabilitas koefisien regresi untuk masing-masing variabel, model regresi logistik tetap menghasilkan prediksi yang andal (AUC = 0.818). Dalam konteks ini, ma1 muncul sebagai representatif yang paling signifikan dari kelompok tersebut (p < 0.001), sehingga interpretasi efek mikroaneurisma difokuskan pada variabel ini. Fitur eksudat (exudate1–exudate8) dan fitur anatomi (macula_dist, optic_diam) menunjukkan korelasi yang jauh lebih lemah, baik antar sesama maupun dengan fitur mikroaneurisma. Hal ini menunjukkan bahwa fitur-fitur tersebut memberikan informasi yang relatif independen, sehingga lebih stabil untuk interpretasi model. Selain itu, variabel pre_screening juga terbukti signifikan (p = 0.019), menunjukkan kontribusi uniknya dalam memprediksi keberadaan retinopati.

4 Metode Analisis

Metode analisis yang digunakan adalah regresi logistik biner, dengan fungsi link logit. Model dibangun menggunakan fungsi glm() dengan keluarga distribusi binomial. Data dibagi menjadi: - 70% data latih -30% data uji

set.seed(123)
train_index <- sample(1:nrow(df), size = 0.7 * nrow(df))
# Split
train_data <- df[train_index, ]
test_data  <- df[-train_index, ]
# Cek ukuran
dim(train_data)  
## [1] 805  20
dim(test_data)   
## [1] 346  20
table(train_data$Class)
## 
## No_DR    DR 
##   380   425

4.1 Pembentukan Model Regresi Logistik

Model regresi logistik dibangun dengan menggunakan seluruh variabel prediktor yang tersedia, dengan variabel respon Class yang bersifat biner (No_DR dan DR). Model ini menggunakan fungsi hubung logit, yang umum digunakan untuk memodelkan probabilitas kejadian pada data kategorik biner.

model_full <- glm(Class ~ ., 
                  data = train_data, 
                  family = binomial(link = "logit"))
summary(model_full)
## 
## Call:
## glm(formula = Class ~ ., family = binomial(link = "logit"), data = train_data)
## 
## Coefficients:
##                 Estimate Std. Error z value Pr(>|z|)    
## (Intercept)   -14.442299 615.638658  -0.023  0.98128    
## quality        14.289719 615.634910   0.023  0.98148    
## pre_screening  -0.782456   0.333930  -2.343  0.01912 *  
## ma1             0.926967   0.116667   7.945 1.94e-15 ***
## ma2            -0.396871   0.146611  -2.707  0.00679 ** 
## ma3            -0.379821   0.120632  -3.149  0.00164 ** 
## ma4            -0.149464   0.088380  -1.691  0.09081 .  
## ma5            -0.053184   0.062713  -0.848  0.39641    
## ma6             0.051106   0.033293   1.535  0.12477    
## exudate1        0.007932   0.002753   2.882  0.00396 ** 
## exudate2       -0.020251   0.011340  -1.786  0.07412 .  
## exudate3        0.014994   0.034633   0.433  0.66506    
## exudate5       -0.161044   0.124491  -1.294  0.19580    
## exudate6        0.264504   0.321451   0.823  0.41060    
## exudate7       -1.475682   1.289024  -1.145  0.25229    
## exudate8        6.278045   6.362899   0.987  0.32381    
## macula_dist    -0.384641   8.031544  -0.048  0.96180    
## optic_diam      0.036102   3.326056   0.011  0.99134    
## am_fm          -3.427451   5.306816  -0.646  0.51837    
## class_numeric  -0.142105   0.218438  -0.651  0.51534    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1113.45  on 804  degrees of freedom
## Residual deviance:  742.69  on 785  degrees of freedom
## AIC: 782.69
## 
## Number of Fisher Scoring iterations: 13

Interpretasi Hasil estimasi model menunjukkan bahwa beberapa variabel memiliki pengaruh yang signifikan terhadap probabilitas terjadinya diabetic retinopathy.

Beberapa temuan utama adalah sebagai berikut:

  • pre_screening memiliki koefisien negatif dan signifikan (p-value = 0.019), yang menunjukkan bahwa peningkatan nilai pre-screening cenderung menurunkan peluang terjadinya diabetic retinopathy.

  • Variabel ma1 memiliki koefisien positif dan sangat signifikan (p-value < 0.001), yang mengindikasikan bahwa peningkatan nilai ma1 meningkatkan peluang terjadinya diabetic retinopathy.

  • Variabel ma2 dan ma3 memiliki koefisien negatif dan signifikan, yang menunjukkan hubungan negatif terhadap kejadian diabetic retinopathy.

  • Variabel exudate1juga berpengaruh signifikan secara positif (p-value = 0.00396), yang mengindikasikan bahwa peningkatan karakteristik eksudat tertentu meningkatkan risiko diabetic retinopathy.

  • variabel lain seperti quality, macula_dist, optic_diam, dan am_fmtidak menunjukkan pengaruh yang signifikan secara statistik pada taraf signifikansi 5%. Hal ini mengindikasikan bahwa pada tahap eksplorasi awal, kontribusi variabel-variabel tersebut terhadap model belum cukup kuat.

5 Hasil dan Pembahasan

5.1 Uji Kelayakan Model

Uji kelayakan model dilakukan untuk mengevaluasi apakah model regresi logistik yang dibentuk dengan memasukkan seluruh variabel prediktor memberikan peningkatan yang signifikan dibandingkan dengan model tanpa prediktor (model nol).

cat("\n--- Uji Kelayakan Model (Goodness of Fit) ---\n")
## 
## --- Uji Kelayakan Model (Goodness of Fit) ---
null_dev <- summary(model_full)$null.deviance
resid_dev <- summary(model_full)$deviance
df_null <- summary(model_full)$df.null
df_resid <- summary(model_full)$df.residual

cat("Null Deviance   :", null_dev, " (df =", df_null, ")\n")
## Null Deviance   : 1113.45  (df = 804 )
cat("Residual Deviance:", resid_dev, " (df =", df_resid, ")\n")
## Residual Deviance: 742.6942  (df = 785 )
# Uji Chi-square
p_value_gof <- 1 - pchisq(null_dev - resid_dev, df = df_null - df_resid)
cat("P-value uji goodness-of-fit (Chi-square):", format.pval(p_value_gof, digits = 4), "\n")
## P-value uji goodness-of-fit (Chi-square): < 2.2e-16

Interpretasi Berdasarkan hasil analisis, diperoleh nilai null deviance sebesar 1113,45 dengan 804 derajat bebas, yang merepresentasikan model dasar tanpa variabel independen. Setelah seluruh variabel prediktor dimasukkan ke dalam model, nilai residual deviance menurun menjadi 742,69 dengan 785 derajat bebas. Penurunan nilai deviance ini menunjukkan adanya peningkatan kecocokan model terhadap data. Untuk menguji signifikansi penurunan deviance tersebut, dilakukan uji Chi-square (Likelihood Ratio Test) dengan statistik uji:

\(\chi^2 = 1113.45 - 742.69 = 370.76\)

Uji goodness of fit menunjukkan bahwa model signifikan secara statistik dengan \(\chi^2 = 370.76\), \(df = 19\), dan \(p < 2.2 \times 10^{-16}\), sehingga model regresi logistik layak digunakan untuk analisis lebih lanjut.

5.2 Pseudo R-Squared

pseudo_r2 <- 1 - (resid_dev / null_dev)
cat("McFadden's Pseudo R²:", round(pseudo_r2, 4), "\n")
## McFadden's Pseudo R²: 0.333

Interpretasi Nilai McFadden’s Pseudo R² sebesar 0.333 menunjukkan bahwa model mampu menjelaskan sekitar 33% variasi dalam data, yang tergolong baik untuk regresi logistik.

5.3 Evaluasi Model

library(caret)
pred_prob <- predict(model_full, newdata = test_data, type = "response")
pred_class <- ifelse(pred_prob > 0.5, "DR", "No_DR")
pred_class <- factor(pred_class, levels = c("No_DR", "DR"))



conf_mat <- confusionMatrix(pred_class, test_data$Class, positive = "DR")
print(conf_mat)
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction No_DR  DR
##      No_DR   132  61
##      DR       28 125
##                                          
##                Accuracy : 0.7428         
##                  95% CI : (0.6933, 0.788)
##     No Information Rate : 0.5376         
##     P-Value [Acc > NIR] : 3.112e-15      
##                                          
##                   Kappa : 0.49           
##                                          
##  Mcnemar's Test P-Value : 0.0006939      
##                                          
##             Sensitivity : 0.6720         
##             Specificity : 0.8250         
##          Pos Pred Value : 0.8170         
##          Neg Pred Value : 0.6839         
##              Prevalence : 0.5376         
##          Detection Rate : 0.3613         
##    Detection Prevalence : 0.4422         
##       Balanced Accuracy : 0.7485         
##                                          
##        'Positive' Class : DR             
## 
conf_mat$overall["Accuracy"]
##  Accuracy 
## 0.7427746
conf_mat$byClass["Sensitivity"]  # True Positive Rate
## Sensitivity 
##    0.672043
conf_mat$byClass["Specificity"]  # True Negative Rate
## Specificity 
##       0.825

Interpretasi Model menghasilkan: - Akurasi ≈ 74% - Sensitivitas ≈ 67% - Spesifisitas ≈ 82% Hal ini menunjukkan bahwa model cukup baik dalam mengklasifikasikan kedua kelas.

5.4 Kurva ROC dan AUC

library(pROC)
roc_obj <- roc(test_data$Class, pred_prob)
## Setting levels: control = No_DR, case = DR
## Setting direction: controls < cases
auc(roc_obj)
## Area under the curve: 0.818
# Plot ROC
plot(roc_obj, col = "blue", main = "ROC Curve - Regresi Logistik")

Interpretasi Nilai AUC sebesar 0.818 menunjukkan bahwa model memiliki kemampuan diskriminasi yang baik dalam membedakan kedua kelas.

5.5 Odds Ratio

exp(coef(model_full))
##   (Intercept)       quality pre_screening           ma1           ma2 
##  5.343048e-07  1.606742e+06  4.572814e-01  2.526834e+00  6.724209e-01 
##           ma3           ma4           ma5           ma6      exudate1 
##  6.839841e-01  8.611697e-01  9.482056e-01  1.052434e+00  1.007963e+00 
##      exudate2      exudate3      exudate5      exudate6      exudate7 
##  9.799528e-01  1.015107e+00  8.512548e-01  1.302785e+00  2.286228e-01 
##      exudate8   macula_dist    optic_diam         am_fm class_numeric 
##  5.327459e+02  6.806952e-01  1.036762e+00  3.246961e-02  8.675305e-01

Interpretasi Odds ratio digunakan untuk menginterpretasikan besarnya pengaruh masing-masing variabel prediktor terhadap peluang terjadinya retinopati diabetik. Variabel ma1 memiliki odds ratio sebesar 2.53, yang menunjukkan bahwa peningkatan satu satuan pada variabel tersebut meningkatkan peluang terjadinya retinopati diabetik sebesar 2.53 kali, dengan asumsi variabel lain konstan.

Variabel pre_screening memiliki odds ratio sebesar 0.46, yang mengindikasikan bahwa variabel ini bersifat protektif karena menurunkan peluang terjadinya retinopati diabetik. Variabel eksudat (exudate1) juga menunjukkan peningkatan odds meskipun dengan efek yang relatif kecil.

6 Kesimpulan

Berdasarkan hasil analisis regresi logistik yang telah dilakukan pada data Diabetic Retinopathy Debrecen, dapat disimpulkan bahwa metode regresi logistik biner mampu memodelkan peluang terjadinya retinopati diabetik dengan baik. Hal ini ditunjukkan oleh hasil uji kelayakan model yang signifikan secara statistik (\(\chi^2 = 370.76\), \(p < 2.2 \times 10^{-16}\)) serta nilai McFadden’s Pseudo \(R^2\) sebesar 0.333, yang mengindikasikan bahwa model mampu menjelaskan sekitar 33% variasi log-odds kejadian retinopati diabetik.

Beberapa variabel prediktor terbukti berpengaruh signifikan terhadap kejadian retinopati diabetik. Variabel ma1 (mikroaneurisma) merupakan prediktor yang paling dominan, dengan odds ratio sebesar 2.53, yang menunjukkan bahwa peningkatan jumlah mikroaneurisma secara signifikan meningkatkan peluang terjadinya retinopati diabetik. Selain itu, variabel exudate1 juga berpengaruh positif terhadap peningkatan risiko, sedangkan variabel pre_screening berperan sebagai faktor protektif yang menurunkan peluang terjadinya retinopati diabetik.

Evaluasi performa model menggunakan data uji menunjukkan bahwa model memiliki kemampuan klasifikasi yang cukup baik, dengan nilai akurasi sekitar 74%, sensitivitas sekitar 67%, dan spesifisitas sekitar 82%. Nilai AUC sebesar 0.818 menunjukkan bahwa model memiliki kemampuan diskriminasi yang baik dalam membedakan pasien dengan dan tanpa retinopati diabetik.

Meskipun demikian, hasil eksplorasi data menunjukkan adanya multikolinearitas yang tinggi antar fitur mikroaneurisma (ma1–ma6), yang dapat memengaruhi stabilitas koefisien model. Oleh karena itu, untuk penelitian selanjutnya disarankan dilakukan seleksi variabel atau regularisasi model guna meningkatkan interpretabilitas dan kestabilan parameter.

Secara keseluruhan, regresi logistik terbukti efektif sebagai metode analisis dalam studi kasus ini dan dapat digunakan sebagai pendekatan awal untuk membantu deteksi retinopati diabetik berbasis data klinis.

7 Referensi

  1. IBM. (n.d.). Apa itu Regresi Logistik? Retrieved from https://www.ibm.com/id-id/think/topics/logistic-regression

  2. Badrus, J. (n.d.). Analisis Regresi Logistik Menggunakan R. Retrieved from https://rpubs.com/Jimy-Badrus/Analisis-Regresi-Logistik

  3. Tyasnurita, R., & Pamungkas, A. Y. M. (2020). Deteksi diabetik retinopati menggunakan regresi logistik. Jurnal [ILKOM Jurnal Ilmiah ], 12(2), 130–135.

  4. UCI Machine Learning Repository. (n.d.). Diabetic Retinopathy Debrecen Data Set. https://archive.ics.uci.edu/ml/datasets/diabetic+retinopathy+debrecen