Implementasi manual regresi logistik menggunakan algoritma Newton-Raphson untuk pembelajaran mendalam tentang klasifikasi biner
Regresi Logistik adalah metode statistik yang digunakan untuk memodelkan hubungan antara variabel prediktor dan variabel respon yang bersifat kategorikal biner (0 atau 1). Berbeda dengan regresi linear yang memprediksi nilai kontinu, regresi logistik memprediksi probabilitas suatu kejadian terjadi.
Formula Matematika
Regresi logistik menggunakan fungsi logit untuk mentransformasi probabilitas linear:
\[ \text{logit}(p) = \ln\left(\frac{p}{1-p}\right) = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \ldots + \beta_k x_k \]
Fungsi Sigmoid
\[p = \frac{1}{1 + e^{-(\beta_0 + \beta_1 x_1 + \ldots + \beta_k x_k)}}\]
Metode Newton-Raphson
\[\beta^{(t+1)} = \beta^{(t)} + H^{-1}(\beta^{(t)}) \cdot \nabla L(\beta^{(t)})\]
logregNRnr_logistic() Estimasi Regresi Logistik via
Newton-RaphsonFungsi nr_logistic() digunakan untuk melakukan
estimasi parameter regresi logistik secara manual
menggunakan metode iteratif Newton-Raphson. Fungsi ini
ditujukan untuk data dengan respon biner (0 atau 1),
dan sangat berguna untuk memahami cara kerja algoritma estimasi model
klasifikasi secara mendalam.
Argumen:
formula : Rumus model (misalnya
y ~ x1 + x2)data : Data frame yang memuat variabel-variabel dalam
modeltol : Toleransi konvergensi (default: 1e-8)max_iter : Batas maksimum iterasi (default: 25)verbose : Jika TRUE, menampilkan
log-likelihood setiap iterasiOutput:
Sebuah objek kelas "nr_logistic" yang berisi:
coefficients : Koefisien hasil estimasifitted.values : Peluang prediksi dari modelloglik : Nilai log-likelihood akhiriterations : Jumlah iterasi yang dilakukanconverged : Apakah algoritma berhasil konvergenvcov : Varians-koefisien (untuk pengujian z)formula : Formula modelcall : Panggilan fungsiContoh Penggunaan:
data(mtcars)
model <- nr_logistic(vs ~ wt + mpg, data = mtcars)
summary()dan print() Ringkasan
ModelFungsi summary() khusus untuk objek
nr_logistic menampilkan tabel koefisien regresi,
nilai z-statistik, p-value, serta informasi log-likelihood dan
AIC. Fungsi ini memudahkan interpretasi hasil model.
Contoh Penggunaan:
summary(model)
Output:
predict() Prediksi Probabilitas dan KelasFungsi predict() digunakan untuk melakukan prediksi pada
data baru menggunakan model yang telah ditraining dengan
nr_logistic().
Argumen
object : Objek nr_logistic hasil
trainingnewdata : Data frame baru yang memuat variabel
prediktortype : Jenis keluaran, "response" untuk
peluang, "class" untuk kelas (0/1)threshold : Ambang batas klasifikasi jika menggunakan
"class"Contoh Penggunaan:
new_data <- data.frame(wt = c(2.5, 3.0), mpg = c(21, 18))
predict(model, new_data, type = "response")
predict(model, new_data, type = "class")
evaluate_model() Evaluasi Performa Model
KlasifikasiFungsi evaluate_model() digunakan untuk mengukur
performa klasifikasi dari hasil prediksi model regresi
logistik. Fungsi ini menghitung metrik penting seperti:
Argumen:
actual : Vektor label asli (0/1)predicted : Vektor hasil prediksi (0/1)Contoh Penggunaan:
actual <- mtcars$vs
pred_class <- predict(model, mtcars, type = "class")
evaluate_model(actual, pred_class)
Output:
List yang berisi:
accuracy : Proporsi prediksi yang benarprecision : Kemampuan mendeteksi 1 yang benarrecall : Kemampuan menangkap semua 1specificity : Kemampuan mengenali 0 dengan benarconfusion_matrix : Matriks 2x2 klasifikasiplot_roc() Visualisasi ROC CurveFungsi plot_roc() digunakan untuk memvisualisasikan
kurva ROC dari model klasifikasi. ROC (Receiver
Operating Characteristic) curve menunjukkan trade-off antara
sensitivity dan 1 - specificity untuk berbagai
threshold klasifikasi.
Argumen:
actual : Label aktual (0/1)prob : Probabilitas prediksi (hasil
type = "response")Contoh Penggunaan:
prob <- predict(model, mtcars, type = "response")
plot_roc(mtcars$vs, prob)
Diabetes Mellitus merupakan penyakit gangguan metabolik akibat pankreas memproduksi sedikit insulin atau tidak ada insulin sama sekali. Penderita penyakit Diabetes Mellitus pada tahun 2013 telah mencapai 382 juta. Diagnosa diabetes yang bergantung pada tenaga medis dapat mengalami kesalahan dan membutuhkan waktu yang lama, sehingga diperlukan sistem prediksi otomatis yang dapat membantu dalam deteksi dini Diabetes Mellitus. Penelitian sebelumnya oleh (Gunawan, Sugiarto, and Mardianto 2020).
| no | preg | plas | pres | skin | insu | mass | pedi | age |
|---|---|---|---|---|---|---|---|---|
| 751 | 4 | 136 | 70 | 0 | 0 | 31.2 | 1.182 | 22 |
| 752 | 1 | 121 | 78 | 39 | 74 | 39 | 0.261 | 28 |
| 753 | 3 | 108 | 62 | 24 | 0 | 26 | 0.223 | 25 |
| 754 | 0 | 181 | 88 | 44 | 510 | 43.3 | 0.222 | 26 |
| 755 | 8 | 154 | 78 | 32 | 0 | 32.4 | 0.443 | 45 |
| 756 | 1 | 128 | 88 | 39 | 110 | 36.5 | 1.057 | 37 |
| 757 | 7 | 137 | 90 | 41 | 0 | 32 | 0.391 | 39 |
| 758 | 0 | 123 | 72 | 0 | 0 | 36.3 | 0.258 | 52 |
| 759 | 1 | 106 | 76 | 0 | 0 | 37.5 | 0.197 | 26 |
| 760 | 6 | 190 | 92 | 0 | 0 | 35.5 | 0.278 | 66 |
Penyelesaian studi kasus ini dilakukan dengan menggunakan package yang telah dibuat, yang kemudian dijalankan melalui aplikasi berbasis R Shiny. Aplikasi tersebut telah dideploy dan dapat diakses melalui tautan berikut:Klik di sini.
Hasil training model regresi logistik dengan metode Newton-Raphson menunjukkan bahwa model berhasil konvergen dalam 6 iterasi dengan variabel signifikan: “pedi” (koefisien 0.945, p < 0.01), “preg” (0.123, p < 0.001), “plas” (0.035, p < 0.0001), dan “mass” (0.089, p < 0.001). Variabel “pres” menunjukkan efek negatif kecil (-0.013), sementara “skin”, “insu”, dan “age” tidak signifikan. Nilai AIC 741.44 dan log-likelihood -361.72 menunjukkan model cukup baik bagi baseline.
Hasil prediksi model menunjukkan kemampuan yang baik dalam menghasilkan probabilitas yang bervariasi untuk setiap individu. Dari sampel prediksi yang ditampilkan, rentang probabilitas cukup luas (4.1% - 90.2%). Individu dengan probabilitas 90.2% dan 79.7% dikategorikan berisiko sangat tinggi dan memerlukan perhatian medis segera. Individu dengan probabilitas 4.1% dan 4.8% dikategorikan berisiko rendah, serta individu dengan probabilitas 72% dikategorikan berisiko tinggi dan memerlukan monitoring lebih ketat. Dengan threshold 0.5, 3 dari 5 sampel dikategorikan positif diabetes dan 2 lainnya negatif diabetes. Rentang probabilitas yang lebar memungkinkan stratifikasi risiko lebih detail dibanding klasifikasi biner.
Evaluasi performa model menujukkan akurasi 78.2% yang artinya model mampu memprediksi hampir 4 dari 5 kasus dengan benar. Precision 73.9% menunjukkan false positive yang rendah. Ketika model memprediksi seseorang memiliki diabetes, prediksi benar dalam 74% kasus. Recall 58.2% artinya model hanya berhasil mendeteksi sekitar 58% kasus yang ada, hal ini berarti ada 42% kasus diabetes tidak terdeteksi. Specificity tinggi (89%) menunjukkan model sangat baik mengidentifikasi orang sehat sebagai sehat dengan tingkat false positive yang rendah. Berdasarkan confusion matrix, dari 557 orang yang sehat, model mengidentifikasi 445 orang dengan benar sebagai sehat, namun salah mengklasifikasikan 112 orang sebagai diabetes. Dari 221 orang yang sebenarnya diabetes, model mengidentifikasi 156 orang dengan benar, tapi melewatkan 55 kasus diabetes yang diklasifikasikan sehat.
ROC Curve yang dihasilkan menunjukkan performa model dalam membedakan pasien diabetes dan non-diabetes dengan AUC sebesar 0.839 yang termasuk dalam kategori sangat baik (AUC > 0.8). Bentuk kurva menunjukkan trade-off yang baik antara sensitivity dan specificity pada berbagai threshold. Bagian awal kurva yang naik menunjukkan model dapat mencapai true positive rate tinggi dengan false positive rate rendah. Ini konsisten dengan hasil evaluasi yang menunjukkan specificity tinggi (89%) dan recall (58.2%). Nilai AUC 0.839 menunjukkan jika kita memilih dua individu secara acak (satu diabetes dan satu sehat) maka model akan memberikan probabilitas lebih tinggi pada individu diabetes dalam 83.9% kasus, yang merupakan indikator merupakan indikator diskriminasi yang sangat baik untuk aplikasi medical screening.