Package logregNR

Implementasi manual regresi logistik menggunakan algoritma Newton-Raphson untuk pembelajaran mendalam tentang klasifikasi biner


Pengenalan Regresi Logistik

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)})\]


Dokumentasi Package logregNR

1. nr_logistic() Estimasi Regresi Logistik via Newton-Raphson

Fungsi 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 model
  • tol : Toleransi konvergensi (default: 1e-8)
  • max_iter : Batas maksimum iterasi (default: 25)
  • verbose : Jika TRUE, menampilkan log-likelihood setiap iterasi

Output:

Sebuah objek kelas "nr_logistic" yang berisi:

  • coefficients : Koefisien hasil estimasi
  • fitted.values : Peluang prediksi dari model
  • loglik : Nilai log-likelihood akhir
  • iterations : Jumlah iterasi yang dilakukan
  • converged : Apakah algoritma berhasil konvergen
  • vcov : Varians-koefisien (untuk pengujian z)
  • formula : Formula model
  • call : Panggilan fungsi

Contoh Penggunaan:

data(mtcars)
model <- nr_logistic(vs ~ wt + mpg, data = mtcars)

2. summary()dan print() Ringkasan Model

Fungsi 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:

  • Tabel koefisien dengan nilai estimasi, standar error, nilai z, dan p-value
  • Log-likelihood model
  • AIC model
  • Informasi jumlah iterasi dan status konvergensi

3. predict() Prediksi Probabilitas dan Kelas

Fungsi predict() digunakan untuk melakukan prediksi pada data baru menggunakan model yang telah ditraining dengan nr_logistic().

Argumen

  • object : Objek nr_logistic hasil training
  • newdata : Data frame baru yang memuat variabel prediktor
  • type : 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")

4. evaluate_model() Evaluasi Performa Model Klasifikasi

Fungsi evaluate_model() digunakan untuk mengukur performa klasifikasi dari hasil prediksi model regresi logistik. Fungsi ini menghitung metrik penting seperti:

  • Akurasi
  • Presisi
  • Recall (Sensitivity)
  • Spesifisitas
  • Confusion Matrix

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 benar
  • precision : Kemampuan mendeteksi 1 yang benar
  • recall : Kemampuan menangkap semua 1
  • specificity : Kemampuan mengenali 0 dengan benar
  • confusion_matrix : Matriks 2x2 klasifikasi

5. plot_roc() Visualisasi ROC Curve

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

Studi Kasus

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.


Pembahasan Studi Kasus

Hasil Studi Kasus

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.


Gunawan, Muhamad Ichsan, Dedy Sugiarto, and Is Mardianto. 2020. “Peningkatan Kinerja Akurasi Prediksi Penyakit Diabetes Mellitus Menggunakan Metode Grid Seacrh Pada Algoritma Logistic Regression.” JEPIN (Jurnal Edukasi Dan Penelitian Informatika) 6 (3): 280–84.