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.
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.
1 : Pasien terindikasi mengalami retinopati
diabetik0 : Pasien tidak mengalami retinopati diabetikVariabel 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.
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.
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.
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.
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
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.
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.
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.
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.
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.
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.
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.
IBM. (n.d.). Apa itu Regresi Logistik? Retrieved from https://www.ibm.com/id-id/think/topics/logistic-regression
Badrus, J. (n.d.). Analisis Regresi Logistik Menggunakan R. Retrieved from https://rpubs.com/Jimy-Badrus/Analisis-Regresi-Logistik
Tyasnurita, R., & Pamungkas, A. Y. M. (2020). Deteksi diabetik retinopati menggunakan regresi logistik. Jurnal [ILKOM Jurnal Ilmiah ], 12(2), 130–135.
UCI Machine Learning Repository. (n.d.). Diabetic Retinopathy Debrecen Data Set. https://archive.ics.uci.edu/ml/datasets/diabetic+retinopathy+debrecen