1 Identitas

Nama: Rifki Nur Fadilah
NPM: 140610240059


2 Pendahuluan

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.


3 Regresi Logistik Biner

3.1 Landasan Teori

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

3.2 Tujuan Analisis

Mengidentifikasi faktor-faktor klinis dan demografis yang secara signifikan memengaruhi probabilitas seseorang terdiagnosis penyakit jantung (heart disease).

3.3 Deskripsi Data

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

3.4 Import dan Eksplorasi Data

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          
##                            
##                            
## 

3.5 Statistik Deskriptif

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.

3.6 Pemodelan

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.

3.7 Odds Ratio

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

3.8 Evaluasi Model

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)

3.9 Interpretasi

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.

3.10 Kesimpulan

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:

  1. sexMale — Laki-laki memiliki risiko lebih tinggi (OR > 1)
  2. cpnon-anginal — Nyeri dada non-anginal meningkatkan odds penyakit jantung (OR > 1)
  3. cptypical angina — Typical angina meningkatkan odds penyakit jantung secara kuat (OR > 1)
  4. trestbps — Tekanan darah sistolik yang lebih tinggi meningkatkan risiko (OR > 1)
  5. 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.


4 Regresi Logistik Multinomial

4.1 Landasan Teori

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.

4.2 Tujuan Analisis

Menganalisis faktor-faktor sosiodemografi dan perilaku wanita yang memengaruhi pemilihan metode kontrasepsi (tidak menggunakan kontrasepsi, menggunakan kontrasepsi jangka panjang, atau menggunakan kontrasepsi jangka pendek).

4.3 Deskripsi Data

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:

  • 1 = Tidak menggunakan kontrasepsi
  • 2 = Metode jangka panjang (IUD, sterilisasi, dll.)
  • 3 = Metode jangka pendek (pil, kondom, suntik, dll.)

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)

4.4 Import Data

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

4.5 Pra-pemrosesan Data

# 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      
##                                            
##                                            
## 

4.6 Distribusi Respon

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.

4.7 Model Multinomial

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.

4.8 Uji Wald

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

4.9 Odds Ratio

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

4.10 Goodness of Fit

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

4.11 Interpretasi

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.

4.12 Kesimpulan

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.


5 Regresi Logistik Ordinal

5.1 Landasan Teori

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.

5.2 Tujuan Analisis

Menganalisis faktor-faktor yang memengaruhi tingkat konsumsi alkohol akhir pekan (weekend alcohol consumption, Walc) pada siswa sekolah menengah di Portugal.

5.3 Deskripsi Data

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:

  • 1 = Sangat rendah
  • 2 = Rendah
  • 3 = Sedang
  • 4 = Tinggi
  • 5 = Sangat tinggi

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)

5.4 Import Data

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

5.5 Distribusi Respon

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

5.6 Model Ordinal

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.

5.7 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.

5.8 Odds Ratio

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

5.9 Interpretasi

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:

  • Jenis Kelamin (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.
  • Usia (age), Jumlah Kegagalan Akademik (failures), Status Kesehatan (health): Ketiganya tidak signifikan (p > 0,05).
  • Jumlah Ketidakhadiran (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.
  • Nilai Akademik (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.

5.10 Kesimpulan

Regresi logistik ordinal berhasil mengidentifikasi tiga variabel yang terbukti signifikan secara statistis (p < 0,05) dalam memengaruhi tingkat konsumsi alkohol akhir pekan siswa:

  1. 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.
  2. 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.
  3. 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.


6 Regresi Poisson

6.1 Landasan Teori

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

6.2 Tujuan Analisis

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.

6.3 Deskripsi Data

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

6.4 Import Data

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

6.5 Distribusi LOS

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.

6.6 Model Poisson

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

6.7 Incidence Rate Ratio

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.

6.8 Uji Overdispersion

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.

6.9 Model Negative Binomial

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.

6.10 Interpretasi

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.

6.11 Kesimpulan

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.


7 Perbandingan Model

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.


8 Penutup

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:

  1. 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.

  2. Uji asumsi seperti overdispersion (Poisson) dan proportional odds (ordinal) harus selalu dilakukan untuk memvalidasi pilihan model sebelum menarik kesimpulan.

  3. Odds Ratio dan Incidence Rate Ratio adalah ukuran efek yang lebih mudah diinterpretasikan secara substantif dibandingkan koefisien mentah (log-odds atau log-skala).

  4. 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.