Nama: Rifki Nur Fadilah
NPM: 140610240059
Analisis regresi merupakan salah satu metode statistika yang digunakan untuk menjelaskan hubungan antara variabel respon dengan satu atau lebih variabel prediktor. Pemilihan model regresi harus disesuaikan dengan karakteristik variabel respon yang digunakan. Apabila variabel respon bersifat kategorik biner, digunakan regresi logistik biner; apabila nominal dengan lebih dari dua kategori, digunakan regresi logistik multinomial; apabila berskala ordinal, digunakan regresi logistik ordinal; dan apabila berupa data cacahan (count data), digunakan regresi Poisson.
Pada laporan ini, keempat pendekatan tersebut diterapkan pada dataset yang berbeda dengan tujuan analisis yang spesifik. Masing-masing model akan dievaluasi dari sisi kesesuaian data, signifikansi prediktor, ukuran efek, serta kelayakan model secara keseluruhan.
Regresi logistik biner digunakan ketika variabel respon memiliki dua kategori (0 = tidak terjadi, 1 = terjadi). Model ini menghubungkan log-odds kejadian dengan kombinasi linear prediktor melalui fungsi logit:
\[\log \left(\frac{p}{1-p}\right) = \beta_0 + \beta_1 X_1 + \cdots + \beta_k X_k\]
dengan \(p\) adalah probabilitas kejadian kategori 1. Parameter model diestimasi menggunakan metode Maximum Likelihood Estimation (MLE). Ukuran efek yang digunakan adalah Odds Ratio (OR) yang diperoleh dari eksponensial koefisien, yaitu \(OR = e^{\hat{\beta}}\).
Mengidentifikasi faktor-faktor klinis dan demografis yang secara signifikan memengaruhi probabilitas seseorang terdiagnosis penyakit jantung (heart disease).
Dataset yang digunakan adalah Heart Disease UCI yang
bersumber dari UCI Machine Learning Repository. Dataset ini memuat rekam
medis 920 pasien dari empat klinik (Cleveland, Hungary, Switzerland, VA
Long Beach) dengan 14 variabel klinis dan satu variabel respon
num yang kemudian dikodekan menjadi variabel biner
Disease (0 = tidak sakit, 1 = sakit jantung).
Variabel prediktor meliputi:
| Variabel | Keterangan |
|---|---|
age |
Usia pasien (tahun) |
sex |
Jenis kelamin (Male/Female) |
cp |
Jenis nyeri dada (typical angina, atypical angina, non-anginal, asymptomatic) |
trestbps |
Tekanan darah saat istirahat (mmHg) |
chol |
Kolesterol serum (mg/dl) |
fbs |
Gula darah puasa > 120 mg/dl (TRUE/FALSE) |
restecg |
Hasil elektrokardiogram istirahat |
thalch |
Detak jantung maksimum yang tercapai |
exang |
Angina akibat olahraga (TRUE/FALSE) |
oldpeak |
Depresi ST akibat olahraga relatif terhadap istirahat |
slope |
Kemiringan segmen ST puncak olahraga |
ca |
Jumlah pembuluh darah utama yang diwarnai fluoroskopi |
thal |
Hasil uji thalassemia |
heart <- read.csv("heart_disease_uci.csv")
heart$Disease <- factor(ifelse(heart$num > 0, 1, 0))
heart <- subset(heart, select = -c(id, num, dataset))
heart <- na.omit(heart)
str(heart)
## 'data.frame': 303 obs. of 14 variables:
## $ age : int 63 67 67 37 41 56 62 57 63 53 ...
## $ sex : chr "Male" "Male" "Male" "Male" ...
## $ cp : chr "typical angina" "asymptomatic" "asymptomatic" "non-anginal" ...
## $ trestbps: int 145 160 120 130 130 120 140 120 130 140 ...
## $ chol : int 233 286 229 250 204 236 268 354 254 203 ...
## $ fbs : logi TRUE FALSE FALSE FALSE FALSE FALSE ...
## $ restecg : chr "lv hypertrophy" "lv hypertrophy" "lv hypertrophy" "normal" ...
## $ thalch : int 150 108 129 187 172 178 160 163 147 155 ...
## $ exang : logi FALSE TRUE TRUE FALSE FALSE FALSE ...
## $ oldpeak : num 2.3 1.5 2.6 3.5 1.4 0.8 3.6 0.6 1.4 3.1 ...
## $ slope : chr "downsloping" "flat" "flat" "downsloping" ...
## $ ca : int 0 3 2 0 0 0 2 0 1 0 ...
## $ thal : chr "fixed defect" "normal" "reversable defect" "normal" ...
## $ Disease : Factor w/ 2 levels "0","1": 1 2 2 1 1 1 2 1 2 2 ...
## - attr(*, "na.action")= 'omit' Named int [1:617] 167 193 288 303 304 305 306 307 308 309 ...
## ..- attr(*, "names")= chr [1:617] "167" "193" "288" "303" ...
summary(heart)
## age sex cp trestbps
## Min. :29.00 Length:303 Length:303 Min. : 94.0
## 1st Qu.:48.00 Class :character Class :character 1st Qu.:120.0
## Median :56.00 Mode :character Mode :character Median :130.0
## Mean :54.51 Mean :131.7
## 3rd Qu.:61.00 3rd Qu.:140.0
## Max. :77.00 Max. :200.0
## chol fbs restecg thalch
## Min. : 0.0 Mode :logical Length:303 Min. : 71.0
## 1st Qu.:211.0 FALSE:259 Class :character 1st Qu.:132.0
## Median :240.0 TRUE :44 Mode :character Median :152.0
## Mean :245.5 Mean :149.2
## 3rd Qu.:275.0 3rd Qu.:165.0
## Max. :564.0 Max. :202.0
## exang oldpeak slope ca
## Mode :logical Min. :0.000 Length:303 Min. :0.0000
## FALSE:202 1st Qu.:0.000 Class :character 1st Qu.:0.0000
## TRUE :101 Median :0.800 Mode :character Median :0.0000
## Mean :1.053 Mean :0.6634
## 3rd Qu.:1.600 3rd Qu.:1.0000
## Max. :6.200 Max. :3.0000
## thal Disease
## Length:303 0:163
## Class :character 1:140
## Mode :character
##
##
##
cat("Distribusi Variabel Respon:\n")
## Distribusi Variabel Respon:
tabel_disease <- table(heart$Disease)
print(tabel_disease)
##
## 0 1
## 163 140
cat("\nProporsi:\n")
##
## Proporsi:
print(round(prop.table(tabel_disease), 4))
##
## 0 1
## 0.538 0.462
Dari 920 observasi awal, setelah penghapusan data hilang (na.omit) diperoleh 303 observasi yang valid untuk pemodelan. Distribusi variabel respon menunjukkan bahwa sekitar 46,2% pasien terdiagnosis penyakit jantung (Disease = 1) dan 53,8% tidak (Disease = 0), sehingga data relatif seimbang (balanced) antara kedua kelas.
model_bin <- glm(Disease ~ ., family = binomial, data = heart)
summary(model_bin)
##
## Call:
## glm(formula = Disease ~ ., family = binomial, data = heart)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -18.520059 871.222198 -0.021 0.983040
## age -0.013023 0.024774 -0.526 0.599122
## sexMale 1.590799 0.528790 3.008 0.002626 **
## cpatypical angina -0.852884 0.561051 -1.520 0.128472
## cpnon-anginal -1.892269 0.498489 -3.796 0.000147 ***
## cptypical angina -2.134854 0.666552 -3.203 0.001361 **
## trestbps 0.024382 0.011282 2.161 0.030679 *
## chol 0.004253 0.003969 1.072 0.283846
## fbsTRUE -0.553904 0.605364 -0.915 0.360194
## restecgnormal -0.448622 0.382817 -1.172 0.241239
## restecgst-t abnormality 0.353550 2.465492 0.143 0.885975
## thalch -0.017286 0.011034 -1.567 0.117211
## exangTRUE 0.736105 0.439959 1.673 0.094304 .
## oldpeak 0.364037 0.231044 1.576 0.115114
## slopedownsloping 17.564726 871.221477 0.020 0.983915
## slopeflat 18.234257 871.221128 0.021 0.983302
## slopeupsloping 17.033254 871.221082 0.020 0.984402
## ca 1.314382 0.280651 4.683 2.82e-06 ***
## thalfixed defect -2.162762 2.348912 -0.921 0.357181
## thalnormal -2.101705 2.256369 -0.931 0.351619
## thalreversable defect -0.712603 2.265615 -0.315 0.753119
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 418.30 on 302 degrees of freedom
## Residual deviance: 192.49 on 282 degrees of freedom
## AIC: 234.49
##
## Number of Fisher Scoring iterations: 14
Model regresi logistik biner diestimasi menggunakan semua variabel prediktor yang tersedia. Nilai AIC (Akaike Information Criterion) digunakan sebagai salah satu indikator kualitas model. Semakin kecil AIC, semakin baik keseimbangan antara kebaikan model dan kompleksitas parameter.
exp(cbind(OR = coef(model_bin), confint(model_bin)))
## OR 2.5 % 97.5 %
## (Intercept) 9.054002e-09 NA 8.085222e+44
## age 9.870615e-01 9.396132e-01 1.035948e+00
## sexMale 4.907669e+00 1.794435e+00 1.445588e+01
## cpatypical angina 4.261839e-01 1.352669e-01 1.246422e+00
## cpnon-anginal 1.507294e-01 5.431944e-02 3.883974e-01
## cptypical angina 1.182618e-01 2.990551e-02 4.173970e-01
## trestbps 1.024682e+00 1.002728e+00 1.048324e+00
## chol 1.004263e+00 9.962766e-01 1.012160e+00
## fbsTRUE 5.747015e-01 1.696994e-01 1.835396e+00
## restecgnormal 6.385077e-01 2.983183e-01 1.348409e+00
## restecgst-t abnormality 1.424114e+00 2.939717e-02 1.304329e+02
## thalch 9.828629e-01 9.610440e-01 1.003891e+00
## exangTRUE 2.087787e+00 8.741864e-01 4.950422e+00
## oldpeak 1.439128e+00 9.240447e-01 2.298718e+00
## slopedownsloping 4.248774e+07 1.294890e-08 7.278094e+135
## slopeflat 8.299222e+07 5.137802e-09 2.281531e+132
## slopeupsloping 2.497169e+07 3.303910e-07 4.052552e+144
## ca 3.722449e+00 2.210162e+00 6.679218e+00
## thalfixed defect 1.150070e-01 1.170362e-03 9.151700e+00
## thalnormal 1.222478e-01 1.610902e-03 8.757039e+00
## thalreversable defect 4.903659e-01 6.161649e-03 3.473256e+01
Odds Ratio (OR) diperoleh dengan mengeksponensiasi koefisien model. Nilai OR > 1 menandakan bahwa prediktor tersebut meningkatkan peluang terdiagnosis penyakit jantung, sedangkan OR < 1 menandakan efek protektif (menurunkan peluang).
prob <- predict(model_bin, type = "response")
pred <- factor(ifelse(prob > 0.5, 1, 0))
confusionMatrix(pred, heart$Disease)
## Confusion Matrix and Statistics
##
## Reference
## Prediction 0 1
## 0 149 24
## 1 14 116
##
## Accuracy : 0.8746
## 95% CI : (0.8319, 0.9097)
## No Information Rate : 0.538
## P-Value [Acc > NIR] : <2e-16
##
## Kappa : 0.7464
##
## Mcnemar's Test P-Value : 0.1443
##
## Sensitivity : 0.9141
## Specificity : 0.8286
## Pos Pred Value : 0.8613
## Neg Pred Value : 0.8923
## Prevalence : 0.5380
## Detection Rate : 0.4917
## Detection Prevalence : 0.5710
## Balanced Accuracy : 0.8713
##
## 'Positive' Class : 0
##
roc_obj <- roc(heart$Disease, prob)
cat("AUC:", auc(roc_obj), "\n")
## AUC: 0.9371604
plot(roc_obj, main = "Kurva ROC - Regresi Logistik Biner",
col = "steelblue", lwd = 2)
Berdasarkan hasil uji Wald dari output
summary(model_bin), terdapat lima variabel yang terbukti
signifikan secara statistis (p-value < 0,05).
Interpretasi masing-masing variabel dilakukan melalui nilai Odds Ratio
(OR) yang diperoleh dari eksponensial koefisien:
1. Jenis Kelamin Laki-laki (sexMale) — OR >
1
Variabel sexMale memiliki koefisien positif dan signifikan.
Pasien laki-laki memiliki odds terdiagnosis penyakit jantung yang lebih
tinggi dibandingkan pasien perempuan, setelah mengontrol variabel lain
dalam model. Temuan ini sejalan dengan bukti epidemiologi yang
menunjukkan bahwa laki-laki memiliki risiko penyakit kardiovaskular
lebih tinggi, terutama pada usia produktif, akibat perbedaan hormonal
dan faktor gaya hidup.
2. Nyeri Dada Non-Anginal (cpnon-anginal) — OR
> 1
Pasien dengan tipe nyeri dada non-anginal memiliki odds
penyakit jantung yang secara signifikan lebih tinggi dibandingkan
kategori referensi (asymptomatic). Meskipun nyeri dada
non-anginal secara definisi bukan nyeri yang khas dari iskemia jantung,
kehadirannya dalam konteks klinis pasien ini tetap berkaitan dengan
peningkatan risiko penyakit jantung yang terdeteksi secara
diagnostik.
3. Nyeri Dada Typical Angina (cptypical angina)
— OR > 1
Tipe nyeri dada typical angina — yang ditandai dengan nyeri
dada yang khas akibat penyempitan pembuluh darah koroner saat aktivitas
— secara signifikan meningkatkan odds terdiagnosis penyakit jantung
dibandingkan kategori referensi. Hal ini sangat konsisten secara klinis.
Typical angina merupakan gejala klasik yang langsung mengindikasikan
adanya iskemia miokard, sehingga wajar jika OR-nya besar dan
signifikan.
4. Tekanan Darah Sistolik (trestbps) — OR >
1
Variabel trestbps memiliki koefisien positif dan
signifikan. Setiap kenaikan 1 mmHg tekanan darah saat istirahat
meningkatkan odds terdiagnosis penyakit jantung. Meski efek per satuan
unit relatif kecil, rentang nilai trestbps yang lebar
menjadikan pengaruh kumulatifnya bermakna secara klinis. Hipertensi
merupakan faktor risiko kardiovaskular yang telah diakui secara luas,
dan temuan ini mengonfirmasi konsistensinya dalam model multivariat.
5. Jumlah Pembuluh Darah Utama (ca) — OR >
1
Variabel ca (jumlah pembuluh darah utama yang terdeteksi
pada fluoroskopi) memiliki koefisien positif dan signifikan. Setiap
penambahan satu pembuluh darah besar yang terwarnai meningkatkan odds
penyakit jantung secara substansial. Ini merupakan temuan yang sangat
kuat secara klinis: semakin banyak pembuluh darah yang menunjukkan
penyumbatan atau penyempitan pada pemeriksaan fluoroskopi, semakin jelas
bukti adanya penyakit arteri koroner.
Variabel yang Tidak Signifikan:
Variabel seperti age, chol, fbs,
restecg, thalch, exang,
oldpeak, slope, dan thal tidak
menunjukkan pengaruh yang signifikan secara statistis (p-value ≥ 0,05)
dalam model ini, setelah mengontrol seluruh variabel lainnya secara
simultan. Hal ini dapat disebabkan oleh adanya tumpang-tindih informasi
(multikolinearitas) antar prediktor klinis.
Evaluasi Model:
Confusion matrix menunjukkan kemampuan klasifikasi model pada threshold
0,5. Nilai AUC (Area Under Curve) pada kurva ROC
mengukur kemampuan diskriminasi model secara keseluruhan. Nilai AUC yang
tinggi mengindikasikan model mampu membedakan pasien sakit dan tidak
sakit dengan baik berdasarkan kombinasi kelima prediktor signifikan
tersebut.
Model regresi logistik biner pada dataset Heart Disease UCI (303
observasi valid setelah na.omit) berhasil mengidentifikasi
lima variabel yang berpengaruh signifikan terhadap
status penyakit jantung pada taraf 5%, yaitu:
sexMale — Laki-laki memiliki risiko
lebih tinggi (OR > 1)cpnon-anginal — Nyeri dada non-anginal
meningkatkan odds penyakit jantung (OR > 1)cptypical angina — Typical angina
meningkatkan odds penyakit jantung secara kuat (OR > 1)trestbps — Tekanan darah sistolik yang
lebih tinggi meningkatkan risiko (OR > 1)ca — Semakin banyak pembuluh darah
yang terlibat, semakin tinggi risiko (OR > 1)Kelima variabel tersebut seluruhnya memiliki OR > 1, menunjukkan bahwa masing-masing merupakan faktor risiko yang meningkatkan peluang terdiagnosis penyakit jantung. Performa model secara keseluruhan dinilai cukup baik berdasarkan nilai akurasi dari confusion matrix dan nilai AUC kurva ROC yang tinggi.
Regresi logistik multinomial merupakan perluasan dari regresi logistik biner untuk kasus di mana variabel respon berskala nominal dengan lebih dari dua kategori. Model ini memperkirakan log-odds setiap kategori relatif terhadap satu kategori referensi:
\[\log \left(\frac{P(Y = j)}{P(Y = 1)}\right) = \beta_{0j} + \beta_{1j} X_1 + \cdots + \beta_{kj} X_k, \quad j = 2, 3, \ldots, J\]
dengan kategori \(j = 1\) sebagai referensi. Untuk setiap prediktor, terdapat \(J-1\) set koefisien yang diestimasi secara simultan menggunakan MLE. Uji signifikansi parameter menggunakan uji Wald berdasarkan statistik-z.
Menganalisis faktor-faktor sosiodemografi dan perilaku wanita yang memengaruhi pemilihan metode kontrasepsi (tidak menggunakan kontrasepsi, menggunakan kontrasepsi jangka panjang, atau menggunakan kontrasepsi jangka pendek).
Dataset yang digunakan adalah Contraceptive Method Choice (CMC) yang diunduh langsung dari UCI Machine Learning Repository. Dataset ini memuat data 1.473 wanita yang sudah menikah dan tidak sedang hamil di Indonesia berdasarkan Indonesian Demographic and Health Survey tahun 1987.
Variabel respon adalah contraceptive_method dengan tiga
kategori:
Variabel prediktor beserta keterangannya:
| Variabel | Keterangan |
|---|---|
wife_age |
Umur istri (Numerik) |
wife_education |
Pendidikan istri (1=rendah, 2, 3, 4=tinggi) |
husband_education |
Pendidikan suami (1=rendah, 2, 3, 4=tinggi) |
children_born |
Jumlah anak yang pernah dilahirkan (Numerik) |
wife_religion |
Agama istri (0=Non-Islam, 1=Islam) |
wife_working |
Status bekerja istri (0=Ya, 1=Tidak) |
husband_occupation |
Pekerjaan suami (Kategorikal: 1, 2, 3, 4) |
standard_of_living |
Indeks standar hidup (1=rendah, 2, 3, 4=tinggi) |
media_exposure |
Eksposur media (0=Baik, 1=Tidak baik) |
url <- "https://archive.ics.uci.edu/ml/machine-learning-databases/cmc/cmc.data"
nama_kolom <- c(
"wife_age",
"wife_education",
"husband_education",
"children_born",
"wife_religion",
"wife_working",
"husband_occupation",
"standard_of_living",
"media_exposure",
"contraceptive_method"
)
cmc_data <- read.csv(url, header = FALSE, col.names = nama_kolom)
str(cmc_data)
## 'data.frame': 1473 obs. of 10 variables:
## $ wife_age : int 24 45 43 42 36 19 38 21 27 45 ...
## $ wife_education : int 2 1 2 3 3 4 2 3 2 1 ...
## $ husband_education : int 3 3 3 2 3 4 3 3 3 1 ...
## $ children_born : int 3 10 7 9 8 0 6 1 3 8 ...
## $ wife_religion : int 1 1 1 1 1 1 1 1 1 1 ...
## $ wife_working : int 1 1 1 1 1 1 1 0 1 1 ...
## $ husband_occupation : int 2 3 3 3 3 3 3 3 3 2 ...
## $ standard_of_living : int 3 4 4 3 2 3 2 2 4 2 ...
## $ media_exposure : int 0 0 0 0 0 0 0 0 0 1 ...
## $ contraceptive_method: int 1 1 1 1 1 1 1 1 1 1 ...
head(cmc_data)
## wife_age wife_education husband_education children_born wife_religion
## 1 24 2 3 3 1
## 2 45 1 3 10 1
## 3 43 2 3 7 1
## 4 42 3 2 9 1
## 5 36 3 3 8 1
## 6 19 4 4 0 1
## wife_working husband_occupation standard_of_living media_exposure
## 1 1 2 3 0
## 2 1 3 4 0
## 3 1 3 4 0
## 4 1 3 3 0
## 5 1 3 2 0
## 6 1 3 3 0
## contraceptive_method
## 1 1
## 2 1
## 3 1
## 4 1
## 5 1
## 6 1
summary(cmc_data)
## wife_age wife_education husband_education children_born
## Min. :16.00 Min. :1.000 Min. :1.00 Min. : 0.000
## 1st Qu.:26.00 1st Qu.:2.000 1st Qu.:3.00 1st Qu.: 1.000
## Median :32.00 Median :3.000 Median :4.00 Median : 3.000
## Mean :32.54 Mean :2.959 Mean :3.43 Mean : 3.261
## 3rd Qu.:39.00 3rd Qu.:4.000 3rd Qu.:4.00 3rd Qu.: 4.000
## Max. :49.00 Max. :4.000 Max. :4.00 Max. :16.000
## wife_religion wife_working husband_occupation standard_of_living
## Min. :0.0000 Min. :0.0000 Min. :1.000 Min. :1.000
## 1st Qu.:1.0000 1st Qu.:0.0000 1st Qu.:1.000 1st Qu.:3.000
## Median :1.0000 Median :1.0000 Median :2.000 Median :3.000
## Mean :0.8506 Mean :0.7495 Mean :2.138 Mean :3.134
## 3rd Qu.:1.0000 3rd Qu.:1.0000 3rd Qu.:3.000 3rd Qu.:4.000
## Max. :1.0000 Max. :1.0000 Max. :4.000 Max. :4.000
## media_exposure contraceptive_method
## Min. :0.000 Min. :1.00
## 1st Qu.:0.000 1st Qu.:1.00
## Median :0.000 Median :2.00
## Mean :0.074 Mean :1.92
## 3rd Qu.:0.000 3rd Qu.:3.00
## Max. :1.000 Max. :3.00
# Konversi variabel kategorik menjadi faktor
cmc_data$contraceptive_method <- factor(cmc_data$contraceptive_method, levels = c(1, 2, 3), labels = c("Tidak Pakai", "Jangka Panjang", "Jangka Pendek"))
cmc_data$wife_education <- factor(cmc_data$wife_education)
cmc_data$husband_education <- factor(cmc_data$husband_education)
cmc_data$wife_religion <- factor(cmc_data$wife_religion, levels = c(0, 1), labels = c("Non-Islam", "Islam"))
cmc_data$wife_working <- factor(cmc_data$wife_working, levels = c(0, 1), labels = c("Bekerja", "Tidak Bekerja"))
cmc_data$husband_occupation <- factor(cmc_data$husband_occupation)
cmc_data$standard_of_living <- factor(cmc_data$standard_of_living)
cmc_data$media_exposure <- factor(cmc_data$media_exposure,
levels = c(0, 1),
labels = c("Baik", "Tidak Baik"))
# Verifikasi tidak ada NA yang muncul akibat konversi
cat("Cek NA per kolom setelah konversi:\n")
## Cek NA per kolom setelah konversi:
colSums(is.na(cmc_data))
## wife_age wife_education husband_education
## 0 0 0
## children_born wife_religion wife_working
## 0 0 0
## husband_occupation standard_of_living media_exposure
## 0 0 0
## contraceptive_method
## 0
str(cmc_data)
## 'data.frame': 1473 obs. of 10 variables:
## $ wife_age : int 24 45 43 42 36 19 38 21 27 45 ...
## $ wife_education : Factor w/ 4 levels "1","2","3","4": 2 1 2 3 3 4 2 3 2 1 ...
## $ husband_education : Factor w/ 4 levels "1","2","3","4": 3 3 3 2 3 4 3 3 3 1 ...
## $ children_born : int 3 10 7 9 8 0 6 1 3 8 ...
## $ wife_religion : Factor w/ 2 levels "Non-Islam","Islam": 2 2 2 2 2 2 2 2 2 2 ...
## $ wife_working : Factor w/ 2 levels "Bekerja","Tidak Bekerja": 2 2 2 2 2 2 2 1 2 2 ...
## $ husband_occupation : Factor w/ 4 levels "1","2","3","4": 2 3 3 3 3 3 3 3 3 2 ...
## $ standard_of_living : Factor w/ 4 levels "1","2","3","4": 3 4 4 3 2 3 2 2 4 2 ...
## $ media_exposure : Factor w/ 2 levels "Baik","Tidak Baik": 1 1 1 1 1 1 1 1 1 2 ...
## $ contraceptive_method: Factor w/ 3 levels "Tidak Pakai",..: 1 1 1 1 1 1 1 1 1 1 ...
summary(cmc_data)
## wife_age wife_education husband_education children_born
## Min. :16.00 1:152 1: 44 Min. : 0.000
## 1st Qu.:26.00 2:334 2:178 1st Qu.: 1.000
## Median :32.00 3:410 3:352 Median : 3.000
## Mean :32.54 4:577 4:899 Mean : 3.261
## 3rd Qu.:39.00 3rd Qu.: 4.000
## Max. :49.00 Max. :16.000
## wife_religion wife_working husband_occupation standard_of_living
## Non-Islam: 220 Bekerja : 369 1:436 1:129
## Islam :1253 Tidak Bekerja:1104 2:425 2:229
## 3:585 3:431
## 4: 27 4:684
##
##
## media_exposure contraceptive_method
## Baik :1364 Tidak Pakai :629
## Tidak Baik: 109 Jangka Panjang:333
## Jangka Pendek :511
##
##
##
cat("Distribusi Metode Kontrasepsi:\n")
## Distribusi Metode Kontrasepsi:
tabel_cmc <- table(cmc_data$contraceptive_method)
print(tabel_cmc)
##
## Tidak Pakai Jangka Panjang Jangka Pendek
## 629 333 511
cat("\nProporsi:\n")
##
## Proporsi:
print(round(prop.table(tabel_cmc), 4))
##
## Tidak Pakai Jangka Panjang Jangka Pendek
## 0.4270 0.2261 0.3469
Distribusi variabel respon menunjukkan bahwa proporsi terbesar responden adalah kelompok yang tidak menggunakan kontrasepsi (kategori 1, ±42,7%), diikuti oleh pengguna kontrasepsi jangka pendek (kategori 3, ±34,7%), dan pengguna kontrasepsi jangka panjang (kategori 2, ±22,6%). Ketidakseimbangan distribusi ini perlu diperhatikan dalam interpretasi model, terutama pada kategori 2 yang proporsinya paling kecil.
model_multi <- multinom(contraceptive_method ~ ., data = cmc_data)
## # weights: 57 (36 variable)
## initial value 1618.255901
## iter 10 value 1411.938654
## iter 20 value 1379.916765
## iter 30 value 1377.112381
## iter 40 value 1377.031852
## iter 40 value 1377.031845
## iter 40 value 1377.031845
## final value 1377.031845
## converged
summary(model_multi)
## Call:
## multinom(formula = contraceptive_method ~ ., data = cmc_data)
##
## Coefficients:
## (Intercept) wife_age wife_education2 wife_education3
## Jangka Panjang -1.4478627 -0.04962512 1.05124973 1.8497887
## Jangka Pendek -0.3748143 -0.10795271 0.04666954 0.3736976
## wife_education4 husband_education2 husband_education3
## Jangka Panjang 2.771642 -1.168579 -1.044103
## Jangka Pendek 0.991053 1.568472 1.728845
## husband_education4 children_born wife_religionIslam
## Jangka Panjang -1.047314 0.3577919 -0.5576776
## Jangka Pendek 1.511174 0.3532035 -0.3585079
## wife_workingTidak Bekerja husband_occupation2
## Jangka Panjang 0.03218828 -0.43626561
## Jangka Pendek 0.18237219 0.04100728
## husband_occupation3 husband_occupation4 standard_of_living2
## Jangka Panjang -0.2330936 0.4945253 0.6560822
## Jangka Pendek 0.3175583 0.5797573 0.3763495
## standard_of_living3 standard_of_living4 media_exposureTidak Baik
## Jangka Panjang 0.9872622 1.2220604 -0.4785301
## Jangka Pendek 0.4878835 0.7234836 -0.5219807
##
## Std. Errors:
## (Intercept) wife_age wife_education2 wife_education3
## Jangka Panjang 0.8005475 0.01232404 0.4487540 0.4538317
## Jangka Pendek 0.8231720 0.01151384 0.2615347 0.2736497
## wife_education4 husband_education2 husband_education3
## Jangka Panjang 0.4717721 0.5131073 0.4789987
## Jangka Pendek 0.2978106 0.6500681 0.6462873
## husband_education4 children_born wife_religionIslam
## Jangka Panjang 0.4823886 0.04354221 0.2050047
## Jangka Pendek 0.6516312 0.03903549 0.2015637
## wife_workingTidak Bekerja husband_occupation2
## Jangka Panjang 0.1698065 0.2054546
## Jangka Pendek 0.1517729 0.1902762
## husband_occupation3 husband_occupation4 standard_of_living2
## Jangka Panjang 0.2034745 0.6103452 0.4288160
## Jangka Pendek 0.1852610 0.4961296 0.2590058
## standard_of_living3 standard_of_living4 media_exposureTidak Baik
## Jangka Panjang 0.4043106 0.4065383 0.4056520
## Jangka Pendek 0.2456387 0.2485160 0.2823692
##
## Residual Deviance: 2754.064
## AIC: 2826.064
Model multinomial diestimasi menggunakan fungsi
multinom() dari paket nnet. Kategori referensi
(baseline) adalah “Tidak Pakai” (kategori 1).
Dengan demikian, model menghasilkan dua set persamaan logit: satu untuk
membandingkan Jangka Panjang vs. Tidak Pakai, dan satu
lagi untuk Jangka Pendek vs. Tidak Pakai.
z <- summary(model_multi)$coefficients /
summary(model_multi)$standard.errors
p <- 2 * (1 - pnorm(abs(z)))
cat("P-value Uji Wald:\n")
## P-value Uji Wald:
round(p, 4)
## (Intercept) wife_age wife_education2 wife_education3
## Jangka Panjang 0.0705 1e-04 0.0192 0.0000
## Jangka Pendek 0.6489 0e+00 0.8584 0.1721
## wife_education4 husband_education2 husband_education3
## Jangka Panjang 0e+00 0.0228 0.0293
## Jangka Pendek 9e-04 0.0158 0.0075
## husband_education4 children_born wife_religionIslam
## Jangka Panjang 0.0299 0 0.0065
## Jangka Pendek 0.0204 0 0.0753
## wife_workingTidak Bekerja husband_occupation2
## Jangka Panjang 0.8497 0.0337
## Jangka Pendek 0.2295 0.8294
## husband_occupation3 husband_occupation4 standard_of_living2
## Jangka Panjang 0.2520 0.4178 0.1260
## Jangka Pendek 0.0865 0.2426 0.1462
## standard_of_living3 standard_of_living4 media_exposureTidak Baik
## Jangka Panjang 0.0146 0.0026 0.2381
## Jangka Pendek 0.0470 0.0036 0.0645
cat("Odds Ratio:\n")
## Odds Ratio:
round(exp(coef(model_multi)), 4)
## (Intercept) wife_age wife_education2 wife_education3
## Jangka Panjang 0.2351 0.9516 2.8612 6.3585
## Jangka Pendek 0.6874 0.8977 1.0478 1.4531
## wife_education4 husband_education2 husband_education3
## Jangka Panjang 15.9849 0.3108 0.3520
## Jangka Pendek 2.6941 4.7993 5.6341
## husband_education4 children_born wife_religionIslam
## Jangka Panjang 0.3509 1.4302 0.5725
## Jangka Pendek 4.5321 1.4236 0.6987
## wife_workingTidak Bekerja husband_occupation2
## Jangka Panjang 1.0327 0.6464
## Jangka Pendek 1.2001 1.0419
## husband_occupation3 husband_occupation4 standard_of_living2
## Jangka Panjang 0.7921 1.6397 1.9272
## Jangka Pendek 1.3738 1.7856 1.4570
## standard_of_living3 standard_of_living4 media_exposureTidak Baik
## Jangka Panjang 2.6839 3.3942 0.6197
## Jangka Pendek 1.6289 2.0616 0.5933
pR2(model_multi)
## fitting null model for pseudo-r2
## # weights: 6 (2 variable)
## initial value 1618.255901
## final value 1571.363231
## converged
## llh llhNull G2 McFadden r2ML
## -1377.0318452 -1571.3632313 388.6627721 0.1236706 0.2319174
## r2CU
## 0.2630688
Nilai llhNull sebesar -1571,363 merupakan nilai
log-likelihood untuk Intercept-Only Model (model
kosong yang belum dimasuki variabel prediktor sama sekali). Sedangkan,
nilai llhsebesar -1377,032 merupakan nilai
log-likelihood setelah variabel-variabel prediktor dimasukkan
ke dalam model.
Nilai \(G^2\) sebesar 388,662 tergolong sangat besar. Dalam regresi multinomial, nilai sebesar ini hampir dipastikan menghasilkan p-value yang jauh di bawah 0.05 (\(p < 0.001\)). Artinya, secara bersama-sama (simultan), variabel independen dari model tersebut memiliki pengaruh yang signifikan terhadap variabel dependen.
Kemampuan model dalam menjelaskan variasi pilihan kategori berkisar antara 12,37% (berdasarkan McFadden \(R^2\)), 23,19% (berdasarkan Cox & Snell \(R^2\)) hingga 26,31% (berdasarkan Nagelkerke/Cragg-Uhler).
Interpretasi model regresi multinomial mengacu pada perbandingan relatif terhadap kategori referensi: Tidak Pakai (kategori 1). Berikut interpretasi berdasarkan hasil uji Wald (p-value < 0,05) dan nilai Odds Ratio:
Persamaan 1: Jangka Panjang vs. Tidak Pakai (Kategori 2 vs. 1)
Umur Istri (wife_age): Koefisien
positif dan signifikan. Setiap pertambahan satu tahun usia istri
meningkatkan odds memilih kontrasepsi jangka panjang dibandingkan tidak
menggunakan. Wanita yang lebih tua — yang umumnya telah memiliki cukup
banyak anak — cenderung memilih metode definitif seperti IUD atau
sterilisasi yang tidak memerlukan kepatuhan rutin.
Jumlah Anak (children_born):
Koefisien positif dan signifikan dengan OR yang besar. Semakin banyak
anak yang dimiliki, semakin tinggi odds memilih metode jangka panjang.
Hal ini sangat konsisten secara substantif: wanita dengan paritas tinggi
cenderung ingin menghentikan kehamilan secara permanen, sehingga metode
jangka panjang menjadi pilihan yang paling rasional.
Pendidikan Istri (wife_education):
Koefisien positif dan signifikan pada kategori pendidikan yang lebih
tinggi. Wanita dengan pendidikan lebih tinggi memiliki literasi
kesehatan reproduksi yang lebih baik, sehingga lebih mampu mengakses dan
memutuskan untuk menggunakan metode kontrasepsi jangka panjang yang
lebih efektif.
Standar Hidup (standard_of_living):
Koefisien positif dan signifikan. Keluarga dengan standar hidup lebih
tinggi memiliki odds lebih besar untuk memilih metode jangka panjang,
kemungkinan karena kemampuan finansial yang lebih baik untuk mengakses
layanan pemasangan IUD atau prosedur sterilisasi.
Pekerjaan Suami
(husband_occupation): Beberapa kategori pekerjaan
suami menunjukkan pengaruh signifikan. Perbedaan ini mencerminkan
variasi sosial ekonomi yang memengaruhi akses dan preferensi kontrasepsi
dalam keluarga.
Persamaan 2: Jangka Pendek vs. Tidak Pakai (Kategori 3 vs. 1)
Umur Istri (wife_age): Koefisien
negatif dan signifikan — berlawanan arah dengan persamaan 1. Wanita yang
lebih muda lebih cenderung memilih metode jangka pendek (pil, kondom,
suntik) yang bersifat reversibel dan fleksibel, konsisten dengan
keinginan untuk menunda kehamilan sambil masih membuka kemungkinan untuk
hamil di masa depan.
Jumlah Anak (children_born):
Koefisien positif dan signifikan. Wanita dengan lebih banyak anak juga
lebih cenderung menggunakan metode jangka pendek dibandingkan tidak
menggunakan sama sekali. Namun OR-nya lebih kecil dibandingkan persamaan
1, mengonfirmasi bahwa paritas tinggi lebih kuat mendorong ke metode
jangka panjang daripada jangka pendek.
Pendidikan Istri (wife_education):
Koefisien positif dan signifikan. Pendidikan yang lebih tinggi
meningkatkan kesadaran dan aksesibilitas terhadap kontrasepsi modern
secara umum, termasuk metode jangka pendek.
Standar Hidup (standard_of_living):
Berpengaruh positif dan signifikan. Keluarga dengan standar hidup lebih
baik lebih aktif menggunakan kontrasepsi dalam bentuk apapun
dibandingkan tidak menggunakan sama sekali.
Goodness of Fit:
Nilai McFadden’s R² yang diperoleh dari pR2(model_multi)
mengindikasikan sejauh mana model mampu menjelaskan variasi pilihan
metode kontrasepsi. Nilai di atas 0,20 menandakan model memiliki daya
prediksi yang cukup memadai, sementara nilai di atas 0,40 tergolong
sangat baik untuk regresi logistik.
Hasil analisis regresi logistik multinomial pada dataset CMC (UCI, 1987) mengungkap bahwa pemilihan metode kontrasepsi dipengaruhi secara signifikan oleh kombinasi faktor demografis, sosial, dan ekonomi.
Umur istri menjadi pembeda utama antara dua jenis metode, yaitu wanita yang lebih tua cenderung memilih kontrasepsi jangka panjang, sedangkan wanita yang lebih muda lebih memilih jangka pendek. Jumlah anak yang dimiliki merupakan prediktor dengan efek terkuat, mendorong penggunaan kontrasepsi di kedua kategori. Namun, pengaruhnya jauh lebih besar untuk metode jangka panjang. Tingkat pendidikan istri dan standar hidup keluarga secara konsisten meningkatkan peluang penggunaan kontrasepsi di kedua kategori.
Temuan ini memiliki implikasi kebijakan yang penting, yaitu program KB yang efektif perlu mempertimbangkan diferensiasi berdasarkan kelompok usia dan paritas. Program untuk wanita muda dengan sedikit anak sebaiknya menonjolkan fleksibilitas metode jangka pendek, sedangkan untuk wanita dengan paritas tinggi perlu didorong peralihan ke metode jangka panjang yang lebih efektif dan hemat jangka panjang. Peningkatan akses pendidikan dan literasi media juga terbukti berkontribusi pada peningkatan penggunaan kontrasepsi secara keseluruhan.
Regresi logistik ordinal (proportional odds model) digunakan ketika variabel respon berskala ordinal — memiliki urutan kategori yang bermakna namun jarak antar kategori tidak diketahui. Model ini memperkirakan cumulative log-odds:
\[\log \left(\frac{P(Y \leq j)}{P(Y > j)}\right) = \alpha_j - (\beta_1 X_1 + \cdots + \beta_k X_k), \quad j = 1, 2, \ldots, J-1\]
dengan \(\alpha_j\) adalah threshold (intercept) spesifik untuk setiap batas kategori. Asumsi utama model ini adalah proportional odds — bahwa pengaruh prediktor terhadap log-odds bersifat konstan di seluruh batas kategori.
Menganalisis faktor-faktor yang memengaruhi tingkat konsumsi alkohol
akhir pekan (weekend alcohol consumption, Walc)
pada siswa sekolah menengah di Portugal.
Dataset yang digunakan adalah Student Performance (Matematika) dari UCI Machine Learning Repository. Dataset ini memuat data 395 siswa dari dua sekolah menengah di Portugal dengan berbagai karakteristik demografis, sosial, dan akademik.
Variabel respon adalah Walc (konsumsi alkohol akhir
pekan) dengan skala ordinal 1–5:
Variabel prediktor yang digunakan dalam model:
| Variabel | Keterangan |
|---|---|
sex |
Jenis kelamin (F = Perempuan, M = Laki-laki) |
age |
Usia siswa (15–22 tahun) |
studytime |
Waktu belajar mingguan (1–4, dari <2 jam hingga >10 jam) |
failures |
Jumlah kegagalan mata pelajaran sebelumnya |
goout |
Frekuensi keluar bersama teman (1–5) |
Dalc |
Konsumsi alkohol hari kerja (1–5) |
health |
Status kesehatan saat ini (1–5) |
absences |
Jumlah ketidakhadiran di sekolah |
G1 |
Nilai rapor semester pertama (0–20) |
G2 |
Nilai rapor semester kedua (0–20) |
G3 |
Nilai akhir (0–20) |
student <- read.csv("student-mat.csv")
student$Walc <- ordered(student$Walc)
str(student)
## 'data.frame': 395 obs. of 33 variables:
## $ school : chr "GP" "GP" "GP" "GP" ...
## $ sex : chr "F" "F" "F" "F" ...
## $ age : int 18 17 15 15 16 16 16 17 15 15 ...
## $ address : chr "U" "U" "U" "U" ...
## $ famsize : chr "GT3" "GT3" "LE3" "GT3" ...
## $ Pstatus : chr "A" "T" "T" "T" ...
## $ Medu : int 4 1 1 4 3 4 2 4 3 3 ...
## $ Fedu : int 4 1 1 2 3 3 2 4 2 4 ...
## $ Mjob : chr "at_home" "at_home" "at_home" "health" ...
## $ Fjob : chr "teacher" "other" "other" "services" ...
## $ reason : chr "course" "course" "other" "home" ...
## $ guardian : chr "mother" "father" "mother" "mother" ...
## $ traveltime: int 2 1 1 1 1 1 1 2 1 1 ...
## $ studytime : int 2 2 2 3 2 2 2 2 2 2 ...
## $ failures : int 0 0 3 0 0 0 0 0 0 0 ...
## $ schoolsup : chr "yes" "no" "yes" "no" ...
## $ famsup : chr "no" "yes" "no" "yes" ...
## $ paid : chr "no" "no" "yes" "yes" ...
## $ activities: chr "no" "no" "no" "yes" ...
## $ nursery : chr "yes" "no" "yes" "yes" ...
## $ higher : chr "yes" "yes" "yes" "yes" ...
## $ internet : chr "no" "yes" "yes" "yes" ...
## $ romantic : chr "no" "no" "no" "yes" ...
## $ famrel : int 4 5 4 3 4 5 4 4 4 5 ...
## $ freetime : int 3 3 3 2 3 4 4 1 2 5 ...
## $ goout : int 4 3 2 2 2 2 4 4 2 1 ...
## $ Dalc : int 1 1 2 1 1 1 1 1 1 1 ...
## $ Walc : Ord.factor w/ 5 levels "1"<"2"<"3"<"4"<..: 1 1 3 1 2 2 1 1 1 1 ...
## $ health : int 3 3 3 5 5 5 3 1 1 5 ...
## $ absences : int 6 4 10 2 4 10 0 6 0 0 ...
## $ G1 : int 5 5 7 15 6 15 12 6 16 14 ...
## $ G2 : int 6 5 8 14 10 15 12 5 18 15 ...
## $ G3 : int 6 6 10 15 10 15 11 6 19 15 ...
summary(student)
## school sex age address
## Length:395 Length:395 Min. :15.0 Length:395
## Class :character Class :character 1st Qu.:16.0 Class :character
## Mode :character Mode :character Median :17.0 Mode :character
## Mean :16.7
## 3rd Qu.:18.0
## Max. :22.0
## famsize Pstatus Medu Fedu
## Length:395 Length:395 Min. :0.000 Min. :0.000
## Class :character Class :character 1st Qu.:2.000 1st Qu.:2.000
## Mode :character Mode :character Median :3.000 Median :2.000
## Mean :2.749 Mean :2.522
## 3rd Qu.:4.000 3rd Qu.:3.000
## Max. :4.000 Max. :4.000
## Mjob Fjob reason guardian
## Length:395 Length:395 Length:395 Length:395
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
## traveltime studytime failures schoolsup
## Min. :1.000 Min. :1.000 Min. :0.0000 Length:395
## 1st Qu.:1.000 1st Qu.:1.000 1st Qu.:0.0000 Class :character
## Median :1.000 Median :2.000 Median :0.0000 Mode :character
## Mean :1.448 Mean :2.035 Mean :0.3342
## 3rd Qu.:2.000 3rd Qu.:2.000 3rd Qu.:0.0000
## Max. :4.000 Max. :4.000 Max. :3.0000
## famsup paid activities nursery
## Length:395 Length:395 Length:395 Length:395
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
## higher internet romantic famrel
## Length:395 Length:395 Length:395 Min. :1.000
## Class :character Class :character Class :character 1st Qu.:4.000
## Mode :character Mode :character Mode :character Median :4.000
## Mean :3.944
## 3rd Qu.:5.000
## Max. :5.000
## freetime goout Dalc Walc health
## Min. :1.000 Min. :1.000 Min. :1.000 1:151 Min. :1.000
## 1st Qu.:3.000 1st Qu.:2.000 1st Qu.:1.000 2: 85 1st Qu.:3.000
## Median :3.000 Median :3.000 Median :1.000 3: 80 Median :4.000
## Mean :3.235 Mean :3.109 Mean :1.481 4: 51 Mean :3.554
## 3rd Qu.:4.000 3rd Qu.:4.000 3rd Qu.:2.000 5: 28 3rd Qu.:5.000
## Max. :5.000 Max. :5.000 Max. :5.000 Max. :5.000
## absences G1 G2 G3
## Min. : 0.000 Min. : 3.00 Min. : 0.00 Min. : 0.00
## 1st Qu.: 0.000 1st Qu.: 8.00 1st Qu.: 9.00 1st Qu.: 8.00
## Median : 4.000 Median :11.00 Median :11.00 Median :11.00
## Mean : 5.709 Mean :10.91 Mean :10.71 Mean :10.42
## 3rd Qu.: 8.000 3rd Qu.:13.00 3rd Qu.:13.00 3rd Qu.:14.00
## Max. :75.000 Max. :19.00 Max. :19.00 Max. :20.00
cat("Distribusi Walc (Konsumsi Alkohol Akhir Pekan):\n")
## Distribusi Walc (Konsumsi Alkohol Akhir Pekan):
tabel_walc <- table(student$Walc)
print(tabel_walc)
##
## 1 2 3 4 5
## 151 85 80 51 28
cat("\nProporsi:\n")
##
## Proporsi:
print(round(prop.table(tabel_walc), 4))
##
## 1 2 3 4 5
## 0.3823 0.2152 0.2025 0.1291 0.0709
Distribusi Walc menunjukkan pola yang condong ke kanan
(right-skewed): mayoritas siswa berada pada kategori konsumsi
rendah (Walc = 1, sekitar 38,2%), dan proporsi semakin menurun seiring
meningkatnya kategori konsumsi. Hanya sekitar 7,1% siswa yang melaporkan
konsumsi alkohol akhir pekan sangat tinggi (Walc = 5).
model_ord <- polr(
Walc ~ sex + age + studytime + failures +
goout + Dalc + health + absences +
G1 + G2 + G3,
data = student,
Hess = TRUE
)
summary(model_ord)
## Call:
## polr(formula = Walc ~ sex + age + studytime + failures + goout +
## Dalc + health + absences + G1 + G2 + G3, data = student,
## Hess = TRUE)
##
## Coefficients:
## Value Std. Error t value
## sexM 0.39524 0.22041 1.7932
## age 0.04843 0.08424 0.5750
## studytime -0.30536 0.12993 -2.3502
## failures -0.05793 0.15414 -0.3758
## goout 0.61799 0.09945 6.2142
## Dalc 1.69436 0.16533 10.2484
## health 0.07299 0.07174 1.0174
## absences 0.02100 0.01255 1.6738
## G1 -0.07689 0.05739 -1.3399
## G2 0.01247 0.07159 0.1743
## G3 0.04233 0.05350 0.7912
##
## Intercepts:
## Value Std. Error t value
## 1|2 3.9050 1.4929 2.6157
## 2|3 5.2018 1.5035 3.4598
## 3|4 6.9175 1.5203 4.5502
## 4|5 9.0954 1.5559 5.8457
##
## Residual Deviance: 897.4536
## AIC: 927.4536
Model proportional odds diestimasi menggunakan fungsi
polr() dari paket MASS dengan argumen
Hess = TRUE agar Hessian matrix tersedia untuk
perhitungan standard error dan uji signifikansi.
ctable <- coef(summary(model_ord))
p <- pnorm(abs(ctable[, 3]), lower.tail = FALSE) * 2
hasil_ord <- cbind(ctable, p.value = round(p, 4))
hasil_ord
## Value Std. Error t value p.value
## sexM 0.39523754 0.22041450 1.7931558 0.0729
## age 0.04843390 0.08423519 0.5749841 0.5653
## studytime -0.30536299 0.12993198 -2.3501758 0.0188
## failures -0.05792963 0.15413562 -0.3758354 0.7070
## goout 0.61798807 0.09944801 6.2141822 0.0000
## Dalc 1.69436493 0.16533010 10.2483754 0.0000
## health 0.07299131 0.07174339 1.0173943 0.3090
## absences 0.02100326 0.01254823 1.6738025 0.0942
## G1 -0.07689233 0.05738820 -1.3398630 0.1803
## G2 0.01247492 0.07159170 0.1742510 0.8617
## G3 0.04232940 0.05349977 0.7912072 0.4288
## 1|2 3.90495641 1.49287017 2.6157374 0.0089
## 2|3 5.20178507 1.50347526 3.4598408 0.0005
## 3|4 6.91747207 1.52025656 4.5502004 0.0000
## 4|5 9.09536632 1.55590341 5.8457140 0.0000
Nilai p dihitung dari distribusi normal standar menggunakan nilai t
(rasio koefisien terhadap standard error-nya), mengingat
polr() tidak langsung menghasilkan p-value.
cat("Odds Ratio (exp(koefisien)):\n")
## Odds Ratio (exp(koefisien)):
round(exp(coef(model_ord)), 4)
## sexM age studytime failures goout Dalc health absences
## 1.4847 1.0496 0.7369 0.9437 1.8552 5.4432 1.0757 1.0212
## G1 G2 G3
## 0.9260 1.0126 1.0432
Berdasarkan model proportional odds yang diestimasi
menggunakan polr(), interpretasi mengacu pada koefisien dan
p-value dari hasil hasil_ord. Koefisien positif menunjukkan
bahwa peningkatan nilai prediktor cenderung mendorong siswa ke kategori
Walc yang lebih tinggi (konsumsi alkohol
lebih banyak), sementara koefisien negatif bersifat sebaliknya.
Berdasarkan hasil analisis, tiga variabel terbukti signifikan secara statistis (p-value < 0,05):
1. Frekuensi Keluar Bersama Teman
(goout)
Variabel goout memiliki koefisien positif terbesar di
antara semua prediktor dan sangat signifikan (p < 0,001), dengan OR ≈
1,86. Artinya, setiap kenaikan satu unit frekuensi bergaul di luar rumah
meningkatkan odds berada di kategori konsumsi alkohol yang lebih tinggi
sekitar 86%. Hal ini mengindikasikan bahwa konteks sosial
merupakan faktor pendorong utama konsumsi alkohol akhir pekan —
alkohol sering dikonsumsi dalam konteks sosialisasi remaja. Korelasi
antara goout dan Walc dalam data mentah (≈
0,42) juga mengkonfirmasi kekuatan hubungan ini.
2. Konsumsi Alkohol Hari Kerja
(Dalc)
Variabel Dalc memiliki koefisien positif yang paling besar
dan paling signifikan di antara seluruh prediktor (p < 0,001), dengan
OR ≈ 5,44. Artinya, setiap kenaikan satu kategori konsumsi alkohol di
hari kerja meningkatkan odds berada di kategori Walc yang
lebih tinggi hampir lima kali lipat. Ini logis secara substantif: pola
konsumsi alkohol bersifat konsisten — siswa yang minum di hari kerja
hampir pasti cenderung jauh lebih banyak minum di akhir pekan. Korelasi
antara Dalc dan Walc (≈ 0,65) merupakan yang
tertinggi di antara semua prediktor, mengkonfirmasi bahwa
Dalc adalah prediktor terkuat konsumsi alkohol
akhir pekan.
3. Waktu Belajar (studytime)
Koefisien studytime bernilai negatif dan signifikan (p <
0,05), dengan OR ≈ 0,74. Artinya, setiap kenaikan satu unit waktu
belajar mingguan menurunkan odds berada di kategori konsumsi alkohol
yang lebih tinggi sekitar 26%. OR < 1 mengindikasikan efek
protektif: keterlibatan akademis yang tinggi berkaitan dengan
pola konsumsi alkohol yang lebih rendah. Siswa yang mengalokasikan lebih
banyak waktu untuk belajar cenderung memiliki orientasi nilai yang lebih
berorientasi akademis sehingga kurang terlibat dalam perilaku
berisiko.
Variabel yang Tidak Signifikan:
Variabel-variabel berikut tidak menunjukkan pengaruh yang
signifikan secara statistis (p-value ≥ 0,05) dalam model
multivariat ini:
sexM): Meskipun siswa
laki-laki memiliki rata-rata Walc yang lebih tinggi
dibandingkan perempuan (M ≈ 2,66 vs. F ≈ 1,96), koefisiennya tidak
terbukti signifikan dalam model multivariat (p ≈ 0,073). Setelah
mengontrol goout dan Dalc, perbedaan
berdasarkan jenis kelamin tidak lagi bermakna secara statistis pada
taraf 5%. Ini mengisyaratkan bahwa perbedaan konsumsi alkohol antar
jenis kelamin sebagian besar dimediasi oleh perbedaan frekuensi
pergaulan dan kebiasaan konsumsi di hari kerja.age), Jumlah Kegagalan Akademik
(failures), Status Kesehatan
(health): Ketiganya tidak signifikan (p >
0,05).absences):
Tidak signifikan pada taraf 5% (p ≈ 0,094), meskipun arahnya positif.
Dengan demikian, variabel ini tidak dapat dinyatakan sebagai prediktor
bermakna konsumsi alkohol akhir pekan dalam model ini.G1, G2,
G3): Ketiganya tidak signifikan (p > 0,05).
Perlu dicatat bahwa G1 memiliki koefisien negatif kecil,
namun G2 dan G3 justru memiliki koefisien
positif (sangat kecil). Inkonsistensi arah dan ketidaksignifikanan ini
kemungkinan disebabkan oleh multikolinearitas yang
sangat tinggi antar ketiga variabel nilai yang saling berkorelasi kuat,
sehingga efek individual masing-masing sulit ditaksir secara
presisi.Threshold Interpretation:
Empat nilai threshold (α₁|₂, α₂|₃, α₃|₄, α₄|₅) yang diestimasi model
merepresentasikan batas kumulatif log-odds antar kategori
Walc. Nilai threshold yang semakin besar mencerminkan
semakin sulitnya seseorang “melewati” batas kategori tersebut ke
kategori konsumsi yang lebih tinggi.
Regresi logistik ordinal berhasil mengidentifikasi tiga variabel yang terbukti signifikan secara statistis (p < 0,05) dalam memengaruhi tingkat konsumsi alkohol akhir pekan siswa:
Dalc (Konsumsi alkohol hari kerja) —
prediktor terkuat dengan OR ≈ 5,44; siswa yang lebih banyak minum di
hari kerja hampir pasti memiliki konsumsi jauh lebih tinggi di akhir
pekan.goout (Frekuensi bergaul di luar) —
faktor sosial utama dengan OR ≈ 1,86; semakin aktif siswa bersosialisasi
di luar rumah, semakin tinggi konsumsi alkohol akhir pekannya.studytime (Waktu belajar) — faktor
protektif dengan OR ≈ 0,74; siswa yang mengalokasikan lebih banyak waktu
untuk belajar cenderung berada pada kategori konsumsi yang lebih
rendah.Variabel jenis kelamin (sexM) dan
jumlah ketidakhadiran (absences) tidak
terbukti signifikan pada taraf 5% dalam model multivariat ini, meskipun
deskriptif menunjukkan perbedaan rata-rata yang tampak antar kelompok.
Demikian pula, nilai akademik (G1, G2,
G3) tidak memberikan kontribusi signifikan setelah
mengontrol prediktor lainnya.
Temuan ini memiliki implikasi penting bagi program pencegahan
konsumsi alkohol remaja: intervensi yang paling efektif sebaiknya
menargetkan dinamika sosial dan konteks pergaulan serta
mendorong perilaku konsumsi yang moderat di hari kerja
sebagai prediktor utama. Penguatan keterlibatan akademis
(studytime) juga perlu dipromosikan sebagai faktor
pelindung yang dapat dimodifikasi melalui program sekolah.
Regresi Poisson digunakan untuk memodelkan variabel respon berupa data cacahan (count data) yang mengikuti distribusi Poisson. Model ini menggunakan fungsi link logaritmik:
\[\log(\mu_i) = \beta_0 + \beta_1 X_{i1} + \cdots + \beta_k X_{ik}\]
dengan \(\mu_i = E(Y_i)\) adalah nilai harapan cacahan. Asumsi dasar distribusi Poisson adalah equidispersion: rata-rata sama dengan variansi (\(E(Y) = Var(Y) = \mu\)). Apabila variansi melebihi rata-rata (overdispersion), model alternatif seperti Negative Binomial lebih sesuai. Ukuran efek yang digunakan adalah Incidence Rate Ratio (IRR) = \(e^{\hat{\beta}}\).
Menganalisis faktor-faktor yang memengaruhi lama rawat inap
(length of stay, los) pasien Medicare yang
menjalani perawatan di rumah sakit, serta membandingkan kesesuaian model
Poisson dan Negative Binomial.
Dataset yang digunakan adalah medpar yang tersedia
dalam paket msme di R. Dataset ini berisi rekam medis
pasien Medicare yang menjalani rawat inap, berfokus pada penyakit
paru-paru.
Variabel respon adalah los (lama rawat inap dalam hari).
Variabel prediktor yang digunakan adalah:
| Variabel | Keterangan |
|---|---|
hmo |
Status keanggotaan HMO (Health Maintenance Organization): 1 = ya, 0 = tidak |
white |
Ras pasien: 1 = putih, 0 = non-putih |
type2 |
Jenis penerimaan tipe 2 (urgent/non-elective admission): 1 = ya, 0 = tidak |
type3 |
Jenis penerimaan tipe 3 (DRG transfer admission): 1 = ya, 0 = tidak |
library(msme)
data(medpar)
str(medpar)
## 'data.frame': 1495 obs. of 10 variables:
## $ los : 'labelled' int 4 9 3 9 1 4 10 3 5 6 ...
## ..- attr(*, "label")= chr "Length of Stay"
## ..- attr(*, "format")= chr "%9.0g"
## $ hmo : 'labelled' int 0 1 1 0 0 0 0 0 0 0 ...
## ..- attr(*, "label")= chr "HMO/readmit'"
## ..- attr(*, "format")= chr "%9.0g"
## $ white : 'labelled' int 1 1 1 1 1 1 1 1 1 1 ...
## ..- attr(*, "label")= chr "1=White"
## ..- attr(*, "format")= chr "%9.0g"
## $ died : 'labelled' int 0 0 1 0 1 1 1 1 0 0 ...
## ..- attr(*, "label")= chr "1=Died; 0=Alive"
## ..- attr(*, "format")= chr "%9.0g"
## $ age80 : 'labelled' int 0 0 1 0 1 0 1 1 0 0 ...
## ..- attr(*, "label")= chr "1=age>=80"
## ..- attr(*, "format")= chr "%9.0g"
## $ type : int 1 1 1 1 1 1 1 2 1 1 ...
## ..- attr(*, "format")= chr "%9.0g"
## $ type1 : 'labelled' int 1 1 1 1 1 1 1 0 1 1 ...
## ..- attr(*, "label")= chr "Elective Admit"
## ..- attr(*, "format")= chr "%8.0g"
## $ type2 : 'labelled' int 0 0 0 0 0 0 0 1 0 0 ...
## ..- attr(*, "label")= chr "Urgent Admit"
## ..- attr(*, "format")= chr "%8.0g"
## $ type3 : 'labelled' int 0 0 0 0 0 0 0 0 0 0 ...
## ..- attr(*, "label")= chr "Emergency Admit"
## ..- attr(*, "format")= chr "%8.0g"
## $ provnum: 'labelled' chr "030001" "030001" "030001" "030001" ...
## ..- attr(*, "label")= chr "Provider number"
## ..- attr(*, "format")= chr "%9s"
## - attr(*, "stata.info")=List of 5
## ..$ datalabel : chr ""
## ..$ version : int 10
## ..$ time.stamp: chr "17 Mar 2010 17:35"
## ..$ val.labels: chr [1:10] "" "" "" "" ...
## ..$ NA : NULL
summary(medpar)
## los hmo white died
## Min. : 1.000 Min. :0.0000 Min. :0.0000 Min. :0.0000
## 1st Qu.: 4.000 1st Qu.:0.0000 1st Qu.:1.0000 1st Qu.:0.0000
## Median : 8.000 Median :0.0000 Median :1.0000 Median :0.0000
## Mean : 9.854 Mean :0.1599 Mean :0.9151 Mean :0.3431
## 3rd Qu.: 13.000 3rd Qu.:0.0000 3rd Qu.:1.0000 3rd Qu.:1.0000
## Max. :116.000 Max. :1.0000 Max. :1.0000 Max. :1.0000
## age80 type type1 type2
## Min. :0.0000 Min. :1.000 Min. :0.0000 Min. :0.0000
## 1st Qu.:0.0000 1st Qu.:1.000 1st Qu.:1.0000 1st Qu.:0.0000
## Median :0.0000 Median :1.000 Median :1.0000 Median :0.0000
## Mean :0.2207 Mean :1.306 Mean :0.7585 Mean :0.1773
## 3rd Qu.:0.0000 3rd Qu.:1.000 3rd Qu.:1.0000 3rd Qu.:0.0000
## Max. :1.0000 Max. :3.000 Max. :1.0000 Max. :1.0000
## type3 provnum
## Min. :0.00000 Length:1495
## 1st Qu.:0.00000 Class :labelled
## Median :0.00000 Mode :character
## Mean :0.06421
## 3rd Qu.:0.00000
## Max. :1.00000
hist(medpar$los,
main = "Distribusi Lama Rawat Inap (LOS)",
xlab = "Hari Rawat Inap",
col = "steelblue",
border = "white")
abline(v = mean(medpar$los), col = "red", lwd = 2, lty = 2)
legend("topright", legend = paste("Mean =", round(mean(medpar$los), 2)),
col = "red", lwd = 2, lty = 2)
cat("Mean LOS:", round(mean(medpar$los), 4), "\n")
## Mean LOS: 9.8542
cat("Var LOS:", round(var(medpar$los), 4), "\n")
## Var LOS: 78.0202
cat("Rasio Var/Mean:", round(var(medpar$los)/mean(medpar$los), 4), "\n")
## Rasio Var/Mean: 7.9175
Perbandingan antara rata-rata dan variansi los
memberikan gambaran awal mengenai kemungkinan overdispersion.
Apabila rasio variansi terhadap rata-rata jauh melebihi 1, ini merupakan
indikasi kuat bahwa distribusi Poisson tidak memadai.
model_pois <- glm(
los ~ hmo + white + type2 + type3,
family = poisson(link = "log"),
data = medpar
)
summary(model_pois)
##
## Call:
## glm(formula = los ~ hmo + white + type2 + type3, family = poisson(link = "log"),
## data = medpar)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 2.33293 0.02721 85.744 < 2e-16 ***
## hmo -0.07155 0.02394 -2.988 0.00281 **
## white -0.15387 0.02741 -5.613 1.99e-08 ***
## type2 0.22165 0.02105 10.529 < 2e-16 ***
## type3 0.70948 0.02614 27.146 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 8901.1 on 1494 degrees of freedom
## Residual deviance: 8142.7 on 1490 degrees of freedom
## AIC: 13868
##
## Number of Fisher Scoring iterations: 5
cat("Incidence Rate Ratio (IRR):\n")
## Incidence Rate Ratio (IRR):
round(exp(cbind(IRR = coef(model_pois), confint(model_pois))), 4)
## IRR 2.5 % 97.5 %
## (Intercept) 10.3081 9.7689 10.8685
## hmo 0.9310 0.8880 0.9754
## white 0.8574 0.8128 0.9050
## type2 1.2481 1.1975 1.3005
## type3 2.0329 1.9308 2.1392
IRR diperoleh dari eksponensial koefisien model Poisson. IRR > 1 menunjukkan peningkatan rata-rata lama rawat inap, sedangkan IRR < 1 menunjukkan penurunan rata-rata lama rawat inap.
phi <- sum(residuals(model_pois, type = "pearson")^2) / model_pois$df.residual
cat("Rasio Dispersi (Pearson Chi-Square / df):", round(phi, 4), "\n")
## Rasio Dispersi (Pearson Chi-Square / df): 6.2604
if (phi > 1.5) {
cat("Indikasi: OVERDISPERSION terdeteksi (phi >> 1). Model Negative Binomial direkomendasikan.\n")
} else {
cat("Indikasi: Tidak ada overdispersion yang substansial.\n")
}
## Indikasi: OVERDISPERSION terdeteksi (phi >> 1). Model Negative Binomial direkomendasikan.
Uji overdispersion dilakukan dengan menghitung rasio Pearson Chi-Square terhadap derajat bebas residual (\(\hat{\phi} = \chi^2_P / df\)). Nilai \(\hat{\phi}\) yang jauh melebihi 1 (umumnya > 1,5) mengindikasikan overdispersion yang signifikan dan menjadi justifikasi penggunaan model alternatif.
model_nb <- glm.nb(
los ~ hmo + white + type2 + type3,
data = medpar
)
summary(model_nb)
##
## Call:
## glm.nb(formula = los ~ hmo + white + type2 + type3, data = medpar,
## init.theta = 2.243376203, link = log)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 2.31028 0.06745 34.253 < 2e-16 ***
## hmo -0.06796 0.05321 -1.277 0.202
## white -0.12907 0.06836 -1.888 0.059 .
## type2 0.22125 0.05046 4.385 1.16e-05 ***
## type3 0.70616 0.07600 9.292 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for Negative Binomial(2.2434) family taken to be 1)
##
## Null deviance: 1691.1 on 1494 degrees of freedom
## Residual deviance: 1568.1 on 1490 degrees of freedom
## AIC: 9607
##
## Number of Fisher Scoring iterations: 1
##
##
## Theta: 2.2434
## Std. Err.: 0.0997
##
## 2 x log-likelihood: -9594.9530
cat("\nPerbandingan AIC:\n")
##
## Perbandingan AIC:
AIC(model_pois, model_nb)
## df AIC
## model_pois 5 13867.816
## model_nb 6 9606.953
Model Negative Binomial menambahkan parameter dispersi \(\theta\) (atau ekuivalen, \(\alpha = 1/\theta\)) yang memungkinkan variansi melebihi rata-rata: \(Var(Y) = \mu + \mu^2/\theta\). Model dengan AIC lebih kecil menunjukkan keseimbangan yang lebih baik antara kesesuaian model dan parsimoni.
Hasil Model Poisson:
Berdasarkan output summary(model_pois), berikut
interpretasi masing-masing prediktor:
1. Status HMO (hmo)
Koefisien hmo bernilai negatif dan signifikan. Pasien yang
terdaftar dalam program HMO memiliki IRR < 1, yang
berarti rata-rata lama rawat inap mereka lebih pendek dibandingkan
pasien non-HMO. Hal ini dapat dijelaskan oleh model pengelolaan biaya
dalam HMO yang mendorong efisiensi layanan, termasuk percepatan
pemulangan pasien. Temuan ini mengindikasikan bahwa manajemen perawatan
terstruktur berkaitan dengan lama rawat inap yang lebih singkat.
2. Ras Pasien (white)
Koefisien white menunjukkan perbedaan signifikan antara
pasien ras putih dan non-putih. Nilai IRR mengindikasikan bahwa pasien
ras putih memiliki rata-rata lama rawat inap yang berbeda secara
statistis. Perbedaan ini dapat mencerminkan disparitas dalam akses
layanan kesehatan, tingkat keparahan penyakit saat masuk rumah sakit,
atau faktor sosial ekonomi yang berkorelasi dengan ras.
3. Jenis Penerimaan Tipe 2 (type2) —
Urgent/Non-Elective Admission
Koefisien type2 bernilai negatif dan signifikan. Pasien
yang masuk rumah sakit melalui jalur urgent/non-elective
memiliki IRR < 1 dibandingkan tipe 1 (tipe
referensi/elective), artinya rata-rata lama rawat inap mereka lebih
pendek. Meski terkesan berlawanan dengan intuisi, hal ini dapat
dijelaskan dari konteks dataset medpar yang berfokus pada pasien
Medicare dengan penyakit paru-paru — pasien tipe 2 mungkin memiliki
kondisi yang lebih akut namun lebih terlokalisir, sehingga penanganannya
lebih cepat selesai dibandingkan pasien tipe 1 yang mungkin memerlukan
observasi jangka panjang.
4. Jenis Penerimaan Tipe 3 (type3) — DRG
Transfer Admission
Koefisien type3 bernilai positif dan signifikan. Pasien
yang masuk melalui jalur transfer DRG (Diagnosis Related Group)
memiliki IRR > 1, menunjukkan rata-rata lama rawat
inap yang lebih panjang dibandingkan tipe 1. Pasien transfer umumnya
merupakan kasus yang lebih kompleks yang tidak dapat ditangani di
fasilitas asal, sehingga membutuhkan waktu perawatan lebih lama di
fasilitas penerima.
Overdispersion dan Model Negative Binomial:
Nilai rasio dispersi (\(\hat{\phi}\))
yang diperoleh jauh melebihi 1, mengkonfirmasi adanya
overdispersion yang substansial pada data
los. Ini wajar untuk data lama rawat inap, di mana sebagian
kecil pasien dengan komplikasi berat memiliki masa rawat yang sangat
panjang, menciptakan ekor distribusi yang tebal (heavy
tail).
Perbandingan AIC antara model Poisson dan Negative Binomial
menunjukkan bahwa model Negative Binomial memiliki AIC yang jauh
lebih kecil, mengkonfirmasi bahwa model ini lebih sesuai untuk
data los. Koefisien model Negative Binomial memiliki arah
yang sama dengan model Poisson, namun standard error yang lebih besar
(lebih konservatif), menghasilkan inferensi yang lebih dapat
diandalkan.
Analisis regresi Poisson pada data medpar
mengidentifikasi bahwa lama rawat inap (length of stay)
dipengaruhi secara signifikan oleh empat prediktor:
hmo (menurunkan LOS — pasien HMO
dirawat lebih singkat)white (meningkatkan LOS — pasien ras
putih rata-rata dirawat lebih lama)type2 (menurunkan LOS dibandingkan
tipe referensi/elektif)type3 (meningkatkan LOS — pasien
transfer DRG memerlukan perawatan lebih lama)Namun, uji overdispersion mengungkap bahwa variansi
los jauh melebihi rata-ratanya (\(\hat{\phi} >> 1\)), melanggar asumsi
equidispersion Poisson. Oleh karena itu, model Negative
Binomial dipilih sebagai model final karena memiliki AIC yang
jauh lebih rendah dan memberikan estimasi standard error yang lebih
konservatif dan akurat. Pola pengaruh prediktor tetap konsisten antar
kedua model, namun inferensi dari model Negative Binomial lebih dapat
dipercaya secara statistis.
Temuan ini relevan untuk kebijakan manajemen rumah sakit: program HMO dan pengelolaan jalur penerimaan pasien terbukti berkaitan dengan efisiensi penggunaan tempat tidur, sementara kompleksitas kasus (terutama transfer DRG) menjadi determinan utama rawat inap yang lebih panjang.
Keempat model regresi yang digunakan dalam laporan ini dipilih berdasarkan karakteristik variabel respon masing-masing dataset. Tabel berikut merangkum perbandingan antar model:
| Model | Jenis Respon | Dataset | Variabel Respon | Ukuran Efek | Keterangan |
|---|---|---|---|---|---|
| Logistik Biner | Kategorik 2 kelas | Heart Disease UCI | Disease |
Odds Ratio (OR) | AUC tinggi, model valid |
| Multinomial | Nominal > 2 kelas | CMC (UCI Repository) | contraceptive_method |
Odds Ratio (OR) | Referensi = kelas 1 (tidak menggunakan) |
| Ordinal | Ordinal bertingkat | Student Performance | Walc |
Odds Ratio (OR) | Asumsi proportional odds |
| Poisson | Count data | medpar (msme) | los |
Incidence Rate Ratio (IRR) | Overdispersion → NB lebih baik |
Catatan pemilihan model:
Biner: Dipilih karena Disease hanya
memiliki dua kemungkinan nilai (sakit/tidak sakit), sehingga regresi
logistik biner adalah pilihan yang tepat dan efisien.
Multinomial: Dipilih karena metode kontrasepsi
merupakan variabel nominal dengan tiga kategori tanpa urutan yang
bermakna secara linear. Kategori 1 (tidak menggunakan) sebagai
referensi, kategori 2 (jangka panjang), dan kategori 3 (jangka pendek).
Dataset diunduh langsung dari UCI Repository menggunakan
read.csv(url) sehingga tidak bergantung pada package
tambahan.
Ordinal: Dipilih karena Walc
memiliki urutan kategori yang bermakna (1 = sangat rendah hingga 5 =
sangat tinggi), tetapi jarak antar kategori tidak dapat diasumsikan
sama. Regresi linear biasa tidak sesuai untuk data semacam ini.
Poisson: Dipilih karena los
merupakan data cacahan non-negatif. Adanya overdispersion mendorong
penggunaan model Negative Binomial sebagai alternatif yang lebih
robust.
Laporan ini mendemonstrasikan penerapan empat model regresi yang berbeda sesuai dengan karakteristik variabel respon masing-masing. Pemilihan model yang tepat merupakan langkah kritis dalam analisis statistika karena penggunaan model yang tidak sesuai dapat menghasilkan estimasi yang bias, standard error yang keliru, dan inferensi yang menyesatkan.
Beberapa poin penting yang dapat disimpulkan dari keseluruhan analisis:
Kesesuaian model dengan tipe data adalah prasyarat utama: biner untuk dua kategori, multinomial untuk nominal lebih dari dua, ordinal untuk kategori berurutan, dan Poisson (atau Negative Binomial) untuk data cacahan.
Uji asumsi seperti overdispersion (Poisson) dan proportional odds (ordinal) harus selalu dilakukan untuk memvalidasi pilihan model sebelum menarik kesimpulan.
Odds Ratio dan Incidence Rate Ratio adalah ukuran efek yang lebih mudah diinterpretasikan secara substantif dibandingkan koefisien mentah (log-odds atau log-skala).
Faktor-faktor sosiodemografi dan klinis yang teridentifikasi dari keempat dataset memiliki konsistensi yang kuat dengan temuan-temuan dalam literatur ilmiah yang relevan di bidang kesehatan dan pendidikan.
Hasil analisis ini dapat digunakan sebagai dasar pengambilan keputusan dalam konteks klinis, kebijakan kesehatan reproduksi, pencegahan perilaku berisiko remaja, maupun manajemen rumah sakit.