Praktikum Analisis Data Kategori

BAB 1: Tabel Kontingensi Dua Arah

Sebuah survei dilakukan terhadap 200 orang untuk mengetahui hubungan antara kebiasaan membaca buku dan kebiasaan menonton film. Hasil survei dirangkum dalam tabel kontingensi berikut:

Menonton Film Tidak Menonton Film Total
Membaca Buku 80 20 100
Tidak Membaca Buku 40 60 100
Total 120 80 200

Notasi:

  • ( a = 60 ): Membaca Buku dan Menonton Film.
  • ( b = 40 ): Membaca Buku dan Tidak Menonton Film.
  • ( c = 80 ): Tidak Membaca Buku dan Menonton Film.
  • ( d = 20 ): Tidak Membaca Buku dan Tidak Menonton Film.
  • ( n = 200 ): Total sampel.

1.1 Distribusi Peluang

1.1.1 Peluang Bersama (\(P(A \cap B)\))

Peluang bersama adalah probabilitas bahwa dua peristiwa terjadi bersamaan, dihitung sebagai rasio frekuensi kejadian terhadap total sampel. Peluang bersama dihitung dengan rumus: \[ P(A \cap B) = \frac{n(A \cap B)}{n} \] Dimana: - \(n(A \cap B)\) adalah jumlah kejadian tertentu dalam tabel - \(n\) adalah total observasi (200)

# Data jumlah observasi
total <- 200

# Peluang bersama
P_A_B <- 80 / total # Membaca buku dan menonton film
P_A_notB <- 20 / total # Membaca buku dan tidak menonton film
P_notA_B <- 40 / total # Tidak membaca buku dan menonton film
P_notA_notB <- 60 / total # Tidak membaca buku dan tidak menonton film

# Menampilkan hasil
P_A_B; P_A_notB; P_notA_B; P_notA_notB
## [1] 0.4
## [1] 0.1
## [1] 0.2
## [1] 0.3

\(P(\text{Membaca} \cap \text{Menonton}) = \frac{a}{n} = \frac{80}{200} = 0.4\)

\(P(\text{Membaca} \cap \text{Tidak Menonton}) = \frac{b}{n} = \frac{20}{200} = 0.1\)

\(P(\text{Tidak Membaca} \cap \text{Menonton}) = \frac{c}{n} = \frac{40}{200} = 0.2\)

\(P(\text{Tidak Membaca} \cap \text{Tidak Menonton}) = \frac{d}{n} = \frac{60}{200} = 0.3\)

library(knitr)
## Warning: package 'knitr' was built under R version 4.4.2
joint_data <- matrix(c(0.4, 0.1, 0.2, 0.3), nrow = 2, byrow = TRUE) 
rownames(joint_data) <- c("Membaca Buku", "Tidak Membaca Buku") 
colnames(joint_data) <- c("Menonton Film", "Tidak Menonton Film") 
kable(joint_data,caption = "Tabel Peluang Bersama")
Tabel Peluang Bersama
Menonton Film Tidak Menonton Film
Membaca Buku 0.4 0.1
Tidak Membaca Buku 0.2 0.3

1.1.2 Peluang Marginal (\(P(A)\) dan \(P(B)\))

Peluang marjinal adalah probabilitas suatu peristiwa terjadi tanpa mempedulikan peristiwa lain, dihitung dari total baris atau kolom. Peluang marginal dihitung dengan rumus: \[ P(A) = \frac{n(A)}{n} \] \[ P(B) = \frac{n(B)}{n} \] Dimana: - \(n(A)\) dan \(n(B)\) adalah jumlah total dari masing-masing kategori.

# Peluang marginal
P_A <- (80+20) / total  # Peluang membaca buku
P_notA <- (40+60) / total  # Peluang tidak membaca buku
P_B <- (80+40) / total  # Peluang menonton film
P_notB <- (20+60) / total  # Peluang tidak menonton film

# Menampilkan hasil
P_A; P_notA; P_B; P_notB
## [1] 0.5
## [1] 0.5
## [1] 0.6
## [1] 0.4

\(P(\text{Membaca}) = \frac{a + b}{n} = \frac{80 + 20}{200} = 0.5\)

\(P(\text{Tidak Membaca}) = \frac{c + d}{n} = \frac{40 + 60}{200} = 0.5\)

\(P(\text{Menonton}) = \frac{a + c}{n} = \frac{80 + 40}{200} = 0.6\)

\(P(\text{Tidak Menonton}) = \frac{b + d}{n} = \frac{20 + 60}{200} = 0.4\)

1.1.3 Peluang Bersyarat (\(P(A|B)\) dan \(P(B|A)\))

Peluang bersyarat adalah probabilitas suatu peristiwa terjadi dengan syarat peristiwa lain telah terjadi. Peluang bersyarat dihitung dengan rumus: \[ P(A|B) = \frac{P(A \cap B)}{P(B)} \] \[ P(B|A) = \frac{P(A \cap B)}{P(A)} \]

# Peluang bersyarat
P_B_given_A <- P_A_B / P_A
P_notB_given_A <- P_A_notB / P_A
P_B_given_notA <- P_notA_B / P_notA
P_notB_given_notA <- P_notA_notB / P_notA

P_A_given_B <- P_A_B / P_B
P_notA_given_B <- P_notA_B / P_B
P_A_given_notB <- P_A_notB / P_notB
P_notA_given_notB <- P_notA_notB / P_notB

# Tampilkan hasil
P_B_given_A       # P(Menonton | Membaca)
## [1] 0.8
P_notB_given_A    # P(Tidak Menonton | Membaca)
## [1] 0.2
P_B_given_notA    # P(Menonton | Tidak Membaca)
## [1] 0.4
P_notB_given_notA # P(Tidak Menonton | Tidak Membaca)
## [1] 0.6
P_A_given_B       # P(Membaca | Menonton)
## [1] 0.6666667
P_notA_given_B    # P(Tidak Membaca | Menonton)
## [1] 0.3333333
P_A_given_notB    # P(Membaca | Tidak Menonton)
## [1] 0.25
P_notA_given_notB # P(Tidak Membaca | Tidak Menonton)
## [1] 0.75

\(P(\text{Menonton} | \text{Membaca}) = \frac{P(\text{Membaca} \cap \text{Menonton})}{P(\text{Membaca})} = \frac{0.4}{0.5} = 0.8\)

\(P(\text{Tidak Menonton} | \text{Membaca}) = \frac{P(\text{Membaca} \cap \text{Tidak Menonton})}{P(\text{Membaca})} = \frac{0.1}{0.5} = 0.2\)

\(P(\text{Menonton} | \text{Tidak Membaca}) = \frac{P(\text{Tidak Membaca} \cap \text{Menonton})}{P(\text{Tidak Membaca})} = \frac{0.2}{0.5} = 0.4\)

\(P(\text{Tidak Menonton} | \text{Tidak Membaca}) = \frac{P(\text{Tidak Membaca} \cap \text{Tidak Menonton})}{P(\text{Tidak Membaca})} = \frac{0.3}{0.5} = 0.6\)

\(P(\text{Membaca} | \text{Menonton}) = \frac{P(\text{Membaca} \cap \text{Menonton})}{P(\text{Menonton})} = \frac{0.4}{0.6} = 0.6667\)

\(P(\text{Tidak Membaca} | \text{Menonton}) = \frac{P(\text{Tidak Membaca} \cap \text{Menonton})}{P(\text{Menonton})} = \frac{0.2}{0.6} = 0.3333\)

\(P(\text{Membaca} | \text{Tidak Menonton}) = \frac{P(\text{Membaca} \cap \text{Tidak Menonton})}{P(\text{Tidak Menonton})} = \frac{0.1}{0.4} = 0.25\)

\(P(\text{Tidak Membaca} | \text{Tidak Menonton}) = \frac{P(\text{Tidak Membaca} \cap \text{Tidak Menonton})}{P(\text{Tidak Menonton})} = \frac{0.3}{0.4} = 0.75\)

Kesimpulan

Ada korelasi yang kuat antara kebiasaan menonton film dan membaca buku. Individu yang membaca buku cenderung juga lebih sering menonton film, dan individu yang tidak membaca buku cenderung lebih jarang melakukannya.

Sebaliknya juga berlaku: jika seseorang suka menonton film, kemungkinan besar juga suka membaca buku. Namun, jika seseorang tidak menonton film, kemungkinan besar juga tidak akan membaca buku.

Jadi, kebiasaan membaca dan menonton itu terkait. Artinya, minat terhadap satu aktivitas mungkin juga menunjukkan minat terhadap aktivitas lain. Ini menunjukkan adanya pola preferensi atau gaya hidup yang saling terkait antara kedua aktivitas tersebut.

1.2 Ukuran Asosiasi

1.2.1 Beda Peluang (Risk Difference)

Beda peluang dihitung dengan: \[ RD = P(A|B) - P(A|\neg B) \]

Risk difference mengukur perbedaan probabilitas kejadian (menonton film) antara dua kelompok (membaca vs. tidak membaca).

RD <- P_B_given_A-P_B_given_notA
RD
## [1] 0.4

\(RD = P(\text{Menonton} | \text{Membaca}) - P(\text{Menonton} | \text{Tidak Membaca})\)

\(RD = 0.8 - 0.4 = 0.4\)

Individu yang membaca buku memiliki probabilitas 40% lebih tinggi untuk menonton film dibandingkan mereka yang tidak membaca buku.

1.2.2 Resiko Relatif (Relative Risk)

Relative risk mengukur rasio probabilitas kejadian antara dua kelompok. Resiko relatif dihitung dengan: \[ RR = \frac{P(A|B)}{P(A|\neg B)} \]

RR <- P_B_given_A/P_B_given_notA
RR
## [1] 2

\(RR = \frac{P(\text{Menonton} | \text{Membaca})}{P(\text{Menonton} | \text{Tidak Membaca})}\)

\(RR = \frac{0.8}{0.4} = 2\)

Individu yang membaca buku memiliki risiko (probabilitas) 2 kali lebih besar untuk menonton film dibandingkan mereka yang tidak membaca buku.

1.2.3 Rasio Odds (Odds Ratio)

Odds ratio mengukur rasio odds kejadian antara dua kelompok. Odds didefinisikan sebagai rasio probabilitas kejadian terhadap probabilitas tidak terjadi. Rasio odds dihitung dengan: \[ OR = \frac{(P(A|B) / P(\neg A|B))}{(P(A|\neg B) / P(\neg A|\neg B))} \]

OR <- (P_A_given_B / P_notA_given_B) / ((P_A_notB / P_notB) / (P_notA_notB / P_notB))
OR
## [1] 6

Odds individu yang membaca buku untuk menonton film adalah 6 kali lebih besar dibandingkan odds individu yang tidak membaca buku.

Kesimpulan

Ada indikasi kuat bahwa kebiasaan membaca buku berasosiasi positif dengan kebiasaan menonton film.

  • Risk Difference (RD) nunjukin bahwa orang yang membaca buku punya selisih probabilitas lebih tinggi untuk menonton film dibanding yang nggak baca — jadi ada gap signifikan antar dua kelompok.

  • Relative Risk (RR) bilang bahwa pembaca buku dua kali lebih mungkin buat menonton film dibanding non-pembaca.

  • Odds Ratio (OR) memperkuat itu semua dengan nunjukin bahwa peluang relatif (odds) orang yang membaca untuk menonton film itu enam kali lipat dibanding yang nggak membaca.

Bisa disimpulin bahwa membaca buku bukan cuma aktivitas terpisah, tapi mungkin bagian dari gaya hidup yang aktif mencari hiburan/informasi dari berbagai sumber—termasuk nonton film. Jadi, promosi kebiasaan membaca bisa secara nggak langsung ngedorong ketertarikan pada aktivitas budaya lainnya.

BAB 2: Tabel Kontingensi Tiga Arah

data <- data.frame(
  Nyeri_Dada = rep(c("Typical Angina", "Asymptomatic"), each = 2),
  Gender = rep(c("Perempuan", "Laki-Laki"), times = 2),
  Terkena_Penyakit_Jantung = c(21, 11, 14, 21),
  Tidak_Terkena_Penyakit_Jantung = c(17, 14, 21, 20)
)
kable(data, caption = "Data Input")
Data Input
Nyeri_Dada Gender Terkena_Penyakit_Jantung Tidak_Terkena_Penyakit_Jantung
Typical Angina Perempuan 21 17
Typical Angina Laki-Laki 11 14
Asymptomatic Perempuan 14 21
Asymptomatic Laki-Laki 21 20

2.1 Tabel Marjinal dan Parsial

2.1.1 Tabel Parsial

library(dplyr)
## Warning: package 'dplyr' was built under R version 4.4.3
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
Tabel Parsial untuk Typical Angina
typical_angina <- data %>% filter(Nyeri_Dada == "Typical Angina") %>% select(-Nyeri_Dada);typical_angina
##      Gender Terkena_Penyakit_Jantung Tidak_Terkena_Penyakit_Jantung
## 1 Perempuan                       21                             17
## 2 Laki-Laki                       11                             14
Nyeri Dada Gender Terkena Penyakit Jantung Tidak Terkena Penyakit Jantung
Typical Angina Perempuan 21 17
Typical Angina Laki-Laki 11 14
Tabel Parsial untuk Asymptomatic
asymptomatic <- data %>% filter(Nyeri_Dada == "Asymptomatic") %>% select(-Nyeri_Dada);asymptomatic
##      Gender Terkena_Penyakit_Jantung Tidak_Terkena_Penyakit_Jantung
## 1 Perempuan                       14                             21
## 2 Laki-Laki                       21                             20
Nyeri Dada Gender Terkena Penyakit Jantung Tidak Terkena Penyakit Jantung
Asymptomatic Perempuan 14 21
Asymptomatic Laki-Laki 21 20

2.1.2 Tabel Marjinal

Tabel Frekuensi Marjinal untuk X(Gender) dan Y(Kondisi)
marginal2 <- data %>% 
  group_by(Gender) %>% 
  summarise(across(where(is.numeric), sum), .groups = "drop");marginal2
## # A tibble: 2 × 3
##   Gender    Terkena_Penyakit_Jantung Tidak_Terkena_Penyakit_Jantung
##   <chr>                        <dbl>                          <dbl>
## 1 Laki-Laki                       32                             34
## 2 Perempuan                       35                             38
Gender Terkena Penyakit Jantung Tidak Terkena Penyakit Jantung Total
Perempuan 35 38 73
Laki-Laki 32 34 66
Tabel Frekuensi Marjinal untuk Z(Nyeri Dada) dan Y(Kondisi)
marginal1 <- data %>% 
  group_by(Nyeri_Dada) %>% 
  summarise(across(where(is.numeric), sum), .groups = "drop");marginal1
## # A tibble: 2 × 3
##   Nyeri_Dada     Terkena_Penyakit_Jantung Tidak_Terkena_Penyakit_Jantung
##   <chr>                             <dbl>                          <dbl>
## 1 Asymptomatic                         35                             41
## 2 Typical Angina                       32                             31
Nyeri Dada Terkena Penyakit Jantung Tidak Terkena Penyakit Jantung Total
Asymtomatic 35 41 73
Typical Angina 32 31 66

2.2 Distribusi Peluang

2.2.1 Peluang Bersama \((P(A \cap B \cap C))\)

Peluang bersama adalah probabilitas tiga peristiwa terjadi bersamaan, dihitung sebagai:

\(P(A \cap B \cap C) = \frac{\text{Frekuensi}(A \cap B \cap C)}{n}\)

table_array <- array(c(21, 17, 11, 14, 14, 21, 21, 20), 
                     dim = c(2, 2, 2), 
                     dimnames = list(
                       Nyeri_Dada = c("Typical Angina", "Asymptomatic"),
                       Gender = c("Perempuan", "Laki-Laki"),
                       Penyakit_Jantung = c("Terkena", "Tidak Terkena")
                     ))
joint_prob <- table_array / sum(table_array)
kable(joint_prob[,,1], caption = "Peluang Bersama: Terkena Penyakit Jantung")
Peluang Bersama: Terkena Penyakit Jantung
Perempuan Laki-Laki
Typical Angina 0.1510791 0.0791367
Asymptomatic 0.1223022 0.1007194
kable(joint_prob[,,2], caption = "Peluang Bersama: Tidak Terkena Penyakit Jantung")
Peluang Bersama: Tidak Terkena Penyakit Jantung
Perempuan Laki-Laki
Typical Angina 0.1007194 0.1510791
Asymptomatic 0.1510791 0.1438849

2.2.2 Peluang Marjinal \((P(A)), (P(B)), (P(C))\)

Peluang marjinal adalah probabilitas suatu peristiwa tanpa mempedulikan peristiwa lain. Rumus: \(P(A) = \frac{\text{Total frekuensi } A}{n}\)

marginal_nyeri <- margin.table(table_array, 1) / sum(table_array)
marginal_gender <- margin.table(table_array, 2) / sum(table_array)
marginal_jantung <- margin.table(table_array, 3) / sum(table_array)
cat("Peluang Marjinal:\n")
## Peluang Marjinal:
cat("P(Typical Angina) =", marginal_nyeri[1], "\n")
## P(Typical Angina) = 0.4820144
cat("P(Asymptomatic) =", marginal_nyeri[2], "\n")
## P(Asymptomatic) = 0.5179856
cat("P(Perempuan) =", marginal_gender[1], "\n")
## P(Perempuan) = 0.5251799
cat("P(Laki-Laki) =", marginal_gender[2], "\n")
## P(Laki-Laki) = 0.4748201
cat("P(Terkena) =", marginal_jantung[1], "\n")
## P(Terkena) = 0.4532374
cat("P(Tidak Terkena) =", marginal_jantung[2], "\n")
## P(Tidak Terkena) = 0.5467626

2.2.3 Peluang Bersyarat \((P(A|B,C))\)

Peluang bersyarat adalah probabilitas suatu peristiwa dengan syarat peristiwa lain telah terjadi. Misalnya, kita hitung \(P(\text{Terkena} | \text{Nyeri Dada}, \text{Gender})\)

Rumus: \(P(A|B,C) = \frac{P(A \cap B \cap C)}{P(B \cap C)}\)

Perhitungan (contoh untuk \(P(\text{Terkena} | \text{Typical Angina}, \text{Perempuan}) )\): \(P(\text{Typical Angina} \cap \text{Perempuan}) = \frac{21 + 17}{139} = \frac{38}{139} \approx 0.2734\) \(P(\text{Terkena} | \text{Typical Angina}, \text{Perempuan}) = \frac{P(\text{Typical Angina} \cap \text{Perempuan} \cap \text{Terkena})}{P(\text{Typical Angina} \cap \text{Perempuan})} = \frac{0.1511}{0.2734} \approx 0.5526\)

cond_prob <- array(NA, dim = c(2, 2, 2), 
                   dimnames = list(
                     Nyeri_Dada = c("Typical Angina", "Asymptomatic"),
                     Gender = c("Perempuan", "Laki-Laki"),
                     Penyakit_Jantung = c("Terkena", "Tidak Terkena")
                   ))
for (i in 1:2) {
  for (j in 1:2) {
    denom <- sum(table_array[i,j,])
    if (denom > 0) {
      cond_prob[i,j,1] <- table_array[i,j,1] / denom
      cond_prob[i,j,2] <- table_array[i,j,2] / denom
    }
  }
}
kable(cond_prob[,,1], caption = "Peluang Bersyarat: P(Terkena | Nyeri Dada, Gender)")
Peluang Bersyarat: P(Terkena | Nyeri Dada, Gender)
Perempuan Laki-Laki
Typical Angina 0.6000000 0.3437500
Asymptomatic 0.4473684 0.4117647
kable(cond_prob[,,2], caption = "Peluang Bersyarat: P(Tidak Terkena | Nyeri Dada, Gender)")
Peluang Bersyarat: P(Tidak Terkena | Nyeri Dada, Gender)
Perempuan Laki-Laki
Typical Angina 0.4000000 0.6562500
Asymptomatic 0.5526316 0.5882353

2.3 Ukuran Asosiasi

2.3.1 Beda Peluang (Risk Diffrence)

Risk difference mengukur selisih probabilitas kejadian (Terkena Penyakit Jantung) antara dua level Nyeri Dada untuk setiap Gender.

Rumus: \(RD = P(\text{Terkena} | \text{Typical Angina}, \text{Gender}) - P(\text{Terkena} | \text{Asymptomatic}, \text{Gender})\)

Perhitungan:

Untuk Perempuan: \(RD = 0.5526 - 0.4000 = 0.1526\)

Untuk Laki-Laki: \(RD = 0.4400 - 0.5122 = -0.0722\)

rd_perempuan <- cond_prob[1,1,1] - cond_prob[2,1,1]
rd_lakilaki <- cond_prob[1,2,1] - cond_prob[2,2,1]
cat("Risk Difference (Perempuan) =", rd_perempuan, "\n")
## Risk Difference (Perempuan) = 0.1526316
cat("Risk Difference (Laki-Laki) =", rd_lakilaki, "\n")
## Risk Difference (Laki-Laki) = -0.06801471

Interpretasi: Pada Perempuan, Typical Angina meningkatkan probabilitas penyakit jantung sebesar 15.26%.

Pada Laki-Laki, Typical Angina mengurangi probabilitas penyakit jantung sebesar 7.22%.

2.3.2 Resiko Relatif (Relative Risk)

Relative risk mengukur rasio probabilitas kejadian antara dua level Nyeri Dada untuk setiap Gender.

Rumus: \(RR = \frac{P(\text{Terkena} | \text{Typical Angina}, \text{Gender})}{P(\text{Terkena} | \text{Asymptomatic}, \text{Gender})}\)

Perhitungan: Untuk Perempuan: \(RR = \frac{0.5526}{0.4000} = 1.3815\)

Untuk Laki-Laki: \(RR = \frac{0.4400}{0.5122} \approx 0.8589\)

rr_perempuan <- cond_prob[1,1,1] / cond_prob[2,1,1]
rr_lakilaki <- cond_prob[1,2,1] / cond_prob[2,2,1]
cat("Relative Risk (Perempuan) =", rr_perempuan, "\n")
## Relative Risk (Perempuan) = 1.341176
cat("Relative Risk (Laki-Laki) =", rr_lakilaki, "\n")
## Relative Risk (Laki-Laki) = 0.8348214

Interpretasi:

Pada Perempuan, risiko penyakit jantung 1.38 kali lebih tinggi dengan Typical Angina.

Pada Laki-Laki, risiko penyakit jantung 0.86 kali lebih rendah dengan Typical Angina.

2.3.3 Rasio Odds (Odds Ratio)

dds ratio mengukur rasio odds kejadian untuk setiap Gender.

Rumus: \(OR = \frac{\text{Odds}(\text{Typical Angina} | \text{Gender})}{\text{Odds}(\text{Asymptomatic} | \text{Gender})} = \frac{a \cdot d}{b \cdot c}\) dengan ( a, b, c, d ) dari tabel 2x2 parsial.

Perhitungan:

Perempuan:

\(\text{Odds}_{\text{Typical Angina}} = \frac{21}{17} \approx 1.2353\)

\(\text{Odds}_{\text{Asymptomatic}} = \frac{14}{21} \approx 0.6667\)

\(OR = \frac{1.2353}{0.6667} \approx 1.8529\)

Laki-Laki:

\(\text{Odds}_{\text{Typical Angina}} = \frac{11}{14} \approx 0.7857\)

\(\text{Odds}_{\text {Asymptomatic}} = \frac{21}{20} = \approx 1.0500\)

\(OR = \frac{0.7857}{1.0500} \approx 0.7483\)

or_perempuan <- (table_array[1,1,1] * table_array[2,1,2]) / (table_array[1,1,2] * table_array[2,1,1])
or_lakilaki <- (table_array[1,2,1] * table_array[2,2,2]) / (table_array[1,2,2] * table_array[2,2,1])
cat("Odds Ratio (Perempuan) =", or_perempuan, "\n")
## Odds Ratio (Perempuan) = 1.852941
cat("Odds Ratio (Laki-Laki) =", or_lakilaki, "\n")
## Odds Ratio (Laki-Laki) = 0.7482993

Interpretasi: Pada Perempuan, odds penyakit jantung 1.85 kali lebih tinggi dengan Typical Angina. Pada Laki-Laki, odds penyakit jantung 0.75 kali lebih rendah dengan Typical Angina.

2.4 Inferensi Tabel Kontingensi Tiga Arah

2.4.1 Independensi Bersyarat

Independensi bersyarat berarti dua variabel independen pada setiap level variabel ketiga. Misalnya, Nyeri Dada dan Penyakit Jantung independen bersyarat pada Gender jika:

\(P(\text{Nyeri Dada}, \text{Penyakit Jantung} \| \text{Gender}) = P(\text{Nyeri Dada} \| \text{Gender}) \cdot P(\text{Penyakit Jantung} \| \text{Gender})\)

Contoh Perhitungan (untuk Typical Angina, Terkena, pada Perempuan):

\(P(\text{Typical Angina} \cap \text{Terkena} | \text{Perempuan}) = \frac{21}{38} \approx 0.5526\)

\(P(\text{Typical Angina} | \text{Perempuan}) = \frac{38}{73} \approx 0.5205\)

\(P(\text{Terkena} | \text{Perempuan}) = \frac{21 + 14}{73} = \frac{35}{73} \approx 0.4795\)

Produk: \(0.5205 \cdot 0.4795 \approx 0.2496 \neq 0.5526\)

Karena nilai tidak sama, Nyeri Dada dan Penyakit Jantung tidak independen bersyarat pada Perempuan. Hal serupa dapat diuji untuk kombinasi lain.

2.4.2 Pengujian Statistik untuk Independensi Bersyarat

Menggunakan uji Cochran-Mantel-Haenszel (CMH) untuk menguji independensi bersyarat Nyeri Dada dan Penyakit Jantung pada setiap level Gender.

Hipotesis:

\(H_0\): Nyeri Dada dan Penyakit Jantung independen bersyarat pada Gender.

\(H_1\): Tidak independen.

mantelhaen.test(table_array)
## 
##  Mantel-Haenszel chi-squared test without continuity correction
## 
## data:  table_array
## Mantel-Haenszel X-squared = 0.020553, df = 1, p-value = 0.886
## alternative hypothesis: true common odds ratio is not equal to 1
## 95 percent confidence interval:
##  0.4872037 1.8606586
## sample estimates:
## common odds ratio 
##         0.9521133

Interpretasi: Karena p-value > 0.05 artinya terima \(H_0\), artinya tidak ada asosiasi antara Nyeri Dada dan Penyakit Jantung setelah mengontrol Gender

2.4.3 Odds Ratio Bersama

Odds ratio bersama (common odds ratio) diestimasi menggunakan pendekatan Mantel-Haenszel, yang menggabungkan odds ratio dari setiap tabel parsial.

Rumus: \(OR_{MH} = \frac{\sum_k \frac{a_k d_k}{n_k}}{\sum_k \frac{b_k c_k}{n_k}}\) dengan \(k\) adalah level Gender, \(n_k\) adalah total pada tabel parsial ke-\(k\).

Perhitungan:

Untuk Perempuan \(( k=1 )): ( \frac{a_1 d_1}{n_1} = \frac{21 \cdot 21}{38} \approx 11.6053 ), ( \frac{b_1 c_1}{n_1} = \frac{17 \cdot 14}{38} \approx 6.2632\)

Untuk Laki-Laki \(( k=2 )): ( \frac{a_2 d_2}{n_2} = \frac{11 \cdot 20}{25} = 8.8 ), ( \frac{b_2 c_2}{n_2} = \frac{14 \cdot 21}{25} = 11.76\)

\(OR_{MH} = \frac{11.6053 + 8.8}{6.2632 + 11.76} = \frac{20.4053}{18.0232} \approx 1.1322\)

num <- sum(c(table_array[1,1,1] * table_array[2,1,2] / sum(table_array[1,1,]),
             table_array[1,2,1] * table_array[2,2,2] / sum(table_array[1,2,])))
denom <- sum(c(table_array[1,1,2] * table_array[2,1,1] / sum(table_array[1,1,]),
               table_array[1,2,2] * table_array[2,2,1] / sum(table_array[1,2,])))
or_mh <- num / denom
cat("Common Odds Ratio (Mantel-Haenszel) =", or_mh, "\n")
## Common Odds Ratio (Mantel-Haenszel) = 1.218139

Interpretasi: Odds ratio bersama sekitar 1.13 menunjukkan asosiasi lemah antara Nyeri Dada dan Penyakit Jantung setelah mengontrol Gender.

2.4.4 Uji Homogenitas Odds Ratio dengan Statistik Breslow-Day

Uji Breslow-Day menguji apakah odds ratio antar tabel parsial (Perempuan dan Laki-Laki) homogen.

Hipotesis:

\(H_0\): Odds ratio homogen antar level Gender.

\(H_1\): Odds ratio tidak homogen.

Kesimpulan

Analisis tabel kontingensi tiga arah menunjukkan:

Peluang: Peluang bersama, marjinal, dan bersyarat memberikan gambaran distribusi data. Misalnya, probabilitas tertinggi adalah untuk Asymptomatic, Laki-Laki, Tidak Terkena (0.1439).

Ukuran Asosiasi:

Risk difference menunjukkan efek beragam Nyeri Dada pada Penyakit Jantung antar Gender.

Relative risk dan odds ratio menunjukkan asosiasi yang berbeda antara Perempuan dan Laki-Laki.

Inferensi:

Independensi bersyarat tidak terpenuhi, menunjukkan adanya asosiasi.

Uji CMH akan menentukan signifikansi asosiasi setelah mengontrol Gender.

Odds ratio bersama (1.13) menunjukkan asosiasi lemah.

BAB 3: Generalized Linear Model dan Inferensi GLM

3.1 Pendahuluan

Generalized Linear Model (GLM) adalah kerangka statistik yang menggeneralisasi model regresi linear untuk menangani respons yang tidak berdistribusi normal, seperti data kategorikal, count, atau proporsi. GLM terdiri dari tiga komponen utama:

Komponen Acak: Distribusi respons dari keluarga eksponensial (misalnya, binomial, Poisson).

Komponen Sistematik: Kombinasi linear dari prediktor \(( \eta = \beta_0 + \beta_1 x_1 + \cdots + \beta_p x_p )\).

Fungsi Link: Fungsi yang menghubungkan nilai harapan respons \(( \mu )\) dengan komponen sistematik \(( g(\mu) = \eta )\).

GLM sangat relevan untuk data kategorikal, seperti dalam regresi logistik untuk respons biner. Inferensi GLM melibatkan estimasi parameter \(( \beta )\), uji signifikansi koefisien, dan evaluasi kecocokan model (goodness-of-fit).

Dalam bab ini, kita akan:

Menjelaskan konsep GLM dan komponennya.

Memberikan contoh kasus dengan data fiktif, menggunakan regresi logistik.

Melakukan inferensi GLM, termasuk estimasi parameter, uji Wald, uji likelihood ratio, dan uji goodness-of-fit (deviance dan Hosmer-Lemeshow).

3.2 Konsep Generalized Linear Model

Konsep Generalized Linear Model

  1. Komponen Acak

Respons ( Y ) diasumsikan mengikuti distribusi dari keluarga eksponensial, yang memiliki bentuk densitas:

\(f(y; \theta, \phi) = \exp\left( \frac{y \theta - b(\theta)}{a(\phi)} + c(y, \phi) \right)\)

\(\theta\): Parameter lokasi (natural parameter).

\(\phi\): Parameter skala (dispersion parameter).

\(b(\theta)\): Fungsi yang menentukan distribusi.

Contoh: Untuk respons biner, \(Y \sim \text{Binomial}(n, \pi)\), dengan \(\pi\) sebagai probabilitas sukses.

  1. Komponen Sistematik

Prediktor \(x_1, x_2, \ldots, x_p\) membentuk kombinasi linear:

\(\eta = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \cdots + \beta_p x_p\)

  1. Fungsi Link

Fungsi link \(g(\cdot)\) menghubungkan nilai harapan respons \(\mu = E(Y)\) dengan \(\eta\):

\(g(\mu) = \eta\)

Untuk regresi logistik (respons biner):

\(\mu = \pi\) (probabilitas sukses).

Fungsi link logit: \(g(\pi) = \log\left( \frac{\pi}{1-\pi} \right) = \eta\).

Invers link: \(\pi = \frac{\exp(\eta)}{1 + \exp(\eta)}\).

  1. Estimasi Parameter

Parameter \(\beta\) diestimasi menggunakan Maximum Likelihood Estimation (MLE), dengan fungsi likelihood:

\(L(\beta) = \prod_{i=1}^n f(y_i; \theta_i, \phi)\)

Log-likelihood dioptimalkan secara numerik (misalnya, dengan metode Newton-Raphson).

  1. Inferensi GLM

Inferensi meliputi:

Uji Wald: Menguji signifikansi individu koefisien \(( H_0: \beta_j = 0 )\).

Uji Likelihood Ratio: Membandingkan model penuh dan model tereduksi.

Goodness-of-Fit: Menggunakan statistik deviance atau uji Hosmer-Lemeshow untuk menilai kecocokan model.

Contoh Kasus: Regresi Logistik

Kita akan membuat data fiktif untuk menganalisis hubungan antara Nyeri Dada (Typical Angina/Asymptomatic), Gender (Perempuan/Laki-Laki), dan Usia (kontinu) terhadap Status Penyakit Jantung (Terkena/Tidak Terkena). Respons adalah biner (Terkena = 1, Tidak Terkena = 0), sehingga kita gunakan regresi logistik.

Data Fiktif: Kita asumsikan 200 individu dengan variabel:

Nyeri Dada: 0 = Asymptomatic, 1 = Typical Angina.

Gender: 0 = Perempuan, 1 = Laki-Laki.

Usia: Usia dalam tahun (kontinu, rata-rata 50, deviasi standar 10).

Penyakit Jantung: 1 = Terkena, 0 = Tidak

set.seed(123)
n <- 200
data <- data.frame(
  Nyeri_Dada = sample(c(0, 1), n, replace = TRUE, prob = c(0.55, 0.45)),
  Gender = sample(c(0, 1), n, replace = TRUE, prob = c(0.52, 0.48)),
  Usia = rnorm(n, mean = 50, sd = 10)
)
# Simulasi respons biner berdasarkan model logistik
eta <- -3 + 1.5 * data$Nyeri_Dada + 0.8 * data$Gender + 0.05 * data$Usia
pi <- exp(eta) / (1 + exp(eta))
data$Penyakit_Jantung <- rbinom(n, 1, pi)
kable(head(data), caption = "Cuplikan Data Fiktif")
Cuplikan Data Fiktif
Nyeri_Dada Gender Usia Penyakit_Jantung
0 0 71.98810 1
1 1 63.12413 1
0 1 47.34855 1
1 0 55.43194 1
1 0 45.85660 1
0 1 45.23753 0

Model Logistik:

\(log\left( \frac{\pi_i}{1 - \pi_i} \right) = \beta_0 + \beta_1 \text{Nyeri\_Dada}_i + \beta_2 \text{Gender}_i + \beta_3 \text{Usia}_i\)

Di mana \(\pi_i = P(\text{Penyakit Jantung} = 1 | x_i)\).

3.3 Analisis GLM

####3.3.1 Estimasi Parameter

Kita sesuaikan model logistik menggunakan fungsi glm() di R.

model <- glm(Penyakit_Jantung ~ Nyeri_Dada + Gender + Usia, 
             family = binomial(link = "logit"), 
             data = data)
summary(model)
## 
## Call:
## glm(formula = Penyakit_Jantung ~ Nyeri_Dada + Gender + Usia, 
##     family = binomial(link = "logit"), data = data)
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept) -3.01515    0.91407  -3.299 0.000972 ***
## Nyeri_Dada   2.07889    0.35940   5.784 7.28e-09 ***
## Gender       0.36426    0.33531   1.086 0.277328    
## Usia         0.04937    0.01734   2.848 0.004406 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 269.20  on 199  degrees of freedom
## Residual deviance: 217.53  on 196  degrees of freedom
## AIC: 225.53
## 
## Number of Fisher Scoring iterations: 4

Interpretasi Koefisien:

\(\exp(\hat{\beta}_j)\) adalah odds ratio untuk peningkatan satu unit pada prediktor \(x_j\).

\(\hat{\beta}_1 = 2.07\), maka \(\exp(2.07) \approx 7.92\), artinya individu dengan Typical Angina memiliki odds 7.92 kali lebih tinggi untuk terkena penyakit jantung dibandingkan Asymptomatic, dengan prediktor lain konstan.

####3.3.2 Uji Wald Uji Wald digunakan untuk menguji signifikansi individu koefisien:

\(z = \frac{\hat{\beta}_j}{\text{SE}(\hat{\beta}_j)}\)

Di mana \(z \sim N(0,1)\) di bawah \(H_0: \beta_j = 0\).

Jika p-value < 0.05, tolak ( H_0 ), artinya prediktor signifikan.

wald_results <- summary(model)$coefficients
kable(wald_results, caption = "Hasil Uji Wald")
Hasil Uji Wald
Estimate Std. Error z value Pr(>|z|)
(Intercept) -3.0151544 0.9140698 -3.298604 0.0009717
Nyeri_Dada 2.0788915 0.3594041 5.784274 0.0000000
Gender 0.3642598 0.3353084 1.086342 0.2773276
Usia 0.0493697 0.0173377 2.847534 0.0044059

Interpretasi:

  • Variabel Nyeri_Dada dan Usia signifikan.

  • Variabel Gender tidak berpengaruh signifikan dalam model.

  • Model secara umum punya variabel prediktor yang cukup relevan, tapi mungkin bisa dievaluasi lebih lanjut untuk pengaruh gender.

####3.3.3 Uji Likelihood Ratio Uji Likelihood Ratio (LRT) membandingkan model penuh dengan model tereduksi untuk menguji signifikansi prediktor.

Rumus: \(D = -2 \left( \log L(\text{model tereduksi}) - \log L(\text{model penuh}) \right)\)

\(D \sim \chi^2\) dengan derajat bebas = jumlah parameter yang diuji.

Contoh: Uji apakah semua prediktor (Nyeri Dada, Gender, Usia) secara bersama signifikan.

null_model <- glm(Penyakit_Jantung ~ 1, family = binomial(link = "logit"), data = data)
lrt <- anova(null_model, model, test = "Chisq")
kable(lrt, caption = "Uji Likelihood Ratio")
Uji Likelihood Ratio
Resid. Df Resid. Dev Df Deviance Pr(>Chi)
199 269.2047 NA NA NA
196 217.5334 3 51.67124 0

####3.3.4 Goodness of Fit Deviance mengukur perbedaan antara model yang disesuaikan dan model jenuh (saturated model).

Rumus: \(D = -2 \left( \log L(\text{model disesuaikan}) - \log L(\text{model jenuh}) \right)\)

Deviance residual dihitung sebagai:

\(D_{\text{residual}} = \sum_{i=1}^n d_i^2, \quad d_i = \text{sign}(y_i - \hat{\pi}_i) \sqrt{-2 \left[ y_i \log(\hat{\pi}_i) + (1 - y_i) \log(1 - \hat{\pi}_i) \right]}\)

deviance <- summary(model)$deviance
df_residual <- summary(model)$df.residual
p_value_dev <- pchisq(deviance, df_residual, lower.tail = FALSE)
cat("Residual Deviance =", deviance, "\n")
## Residual Deviance = 217.5334
cat("Degrees of Freedom =", df_residual, "\n")
## Degrees of Freedom = 196
cat("P-value =", p_value_dev, "\n")
## P-value = 0.1392872

Didapat p-value(0.13) > 0.05, maka model cocok dengan data (tidak ada bukti kurang cocok).

###3.4 Prediksi dan Interpretasi Skenario:

Individu 1: Nyeri Dada = Typical Angina (1), Gender = Perempuan (0), Usia = 50.

Individu 2: Nyeri Dada = Asymptomatic (0), Gender = Laki-Laki (1), Usia = 60.

new_data <- data.frame(
  Nyeri_Dada = c(1, 0),
  Gender = c(0, 1),
  Usia = c(50, 60)
)
pred_prob <- predict(model, newdata = new_data, type = "response")
pred_odds <- pred_prob / (1 - pred_prob)
kable(data.frame(new_data, Probabilitas = pred_prob, Odds = pred_odds), 
      caption = "Prediksi Probabilitas dan Odds")
Prediksi Probabilitas dan Odds
Nyeri_Dada Gender Usia Probabilitas Odds
1 0 50 0.8223310 4.628445
0 1 60 0.5771992 1.365180

Interpretasi:

Probabilitas menunjukkan kemungkinan terkena penyakit jantung.

Odds memberikan rasio probabilitas sukses terhadap gagal.

Kesimpulan

GLM: Regresi logistik berhasil memodelkan hubungan antara Nyeri Dada, Gender, dan Usia terhadap Penyakit Jantung. Komponen acak (binomial), sistematik (kombinasi linear), dan fungsi link (logit) diterapkan dengan tepat.

Inferensi: Uji Wald menunjukkan prediktor mana yang signifikan. Uji Likelihood Ratio mengonfirmasi pentingnya model secara keseluruhan. Uji goodness-of-fit menilai kecocokan model. Aplikasi: Model ini dapat digunakan untuk memprediksi risiko penyakit jantung berdasarkan karakteristik individu.

BAB 4: Regresi Logistik dengan Prediktor Nominal, Ordinal, dan Rasio

Regresi logistik adalah model statistik yang digunakan untuk memodelkan hubungan antara satu variabel respons biner (dengan dua kategori, seperti 0 dan 1) dengan satu atau lebih prediktor yang berskala nominal, ordinal, dan/atau rasio.

Model umum dari regresi logistik adalah:

\[ \log\left(\frac{\pi(x)}{1 - \pi(x)}\right) = \beta_0 + \beta_1X_1 + \cdots + \beta_pX_p \]

di mana \(\pi(x)\) adalah probabilitas kejadian (Y = 1), \(\beta\) adalah parameter yang ingin diestimasi, dan \(X\) adalah prediktor.

Regresi logistik cocok digunakan ketika data yang dianalisis bersifat kategorik atau binari dan kita ingin melihat pengaruh dari beberapa variabel independen yang bisa terdiri dari berbagai jenis skala pengukuran.

4.1 Simulasi Data

set.seed(123)
n <- 200
data10 <- tibble(
  y = rbinom(n, 1, 0.5),
  gender = factor(sample(c("L", "P"), n, TRUE)),
  pendidikan = factor(sample(1:3, n, TRUE), labels = c("SMA", "D3", "S1"), ordered = TRUE),
  umur = round(rnorm(n, 25, 5), 1)
)

4.2 Perlakuan Variabel

Dalam regresi logistik, perlakuan terhadap variabel prediktor sangat penting:

  • Nominal: diubah menjadi dummy (misalnya gender)
  • Ordinal: bisa diperlakukan sebagai dummy atau diberi nilai numerik
  • Rasio: langsung digunakan sebagai prediktor numerik

4.3 Estimasi Model

data10$pendidikan_num <- as.numeric(data10$pendidikan)
model10 <- glm(y ~ gender + pendidikan_num + umur, data = data10, family = binomial)
summary(model10)
## 
## Call:
## glm(formula = y ~ gender + pendidikan_num + umur, family = binomial, 
##     data = data10)
## 
## Coefficients:
##                 Estimate Std. Error z value Pr(>|z|)  
## (Intercept)     0.655353   0.843328   0.777   0.4371  
## genderP         0.019421   0.289062   0.067   0.9464  
## pendidikan_num -0.368904   0.179826  -2.051   0.0402 *
## umur            0.001881   0.029760   0.063   0.9496  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 277.08  on 199  degrees of freedom
## Residual deviance: 272.76  on 196  degrees of freedom
## AIC: 280.76
## 
## Number of Fisher Scoring iterations: 4

4.4 Interpretasi Koefisien

Koefisien dalam model logistik menunjukkan pengaruh log-odds dari setiap variabel prediktor terhadap probabilitas kejadian:

\[ OR_j = e^{\beta_j} \]

exp(coef(model10))
##    (Intercept)        genderP pendidikan_num           umur 
##      1.9258217      1.0196106      0.6914921      1.0018826

4.5 Uji Goodness-of-Fit

Uji Hosmer-Lemeshow mengukur kesesuaian model terhadap data:

# Uji goodness-of-fit (dengan penanganan error)
library(ResourceSelection)
## Warning: package 'ResourceSelection' was built under R version 4.4.3
## ResourceSelection 0.3-6   2023-06-27
hoslem.test(data10$y, fitted(model10), g = 10)
## 
##  Hosmer and Lemeshow goodness of fit (GOF) test
## 
## data:  data10$y, fitted(model10)
## X-squared = 10.797, df = 8, p-value = 0.2135

BAB 5: Pemilihan Model Regresi Logistik dan Evaluasi

Bab ini membahas cara memilih model terbaik dan mengevaluasi performanya.

5.1 Pemilihan Model

Metode stepwise secara otomatis memilih prediktor yang optimal:

  • Forward: mulai dari model kosong, menambah variabel
  • Backward: mulai dari model penuh, menghapus variabel
  • Both: kombinasi keduanya
step_model <- step(model10, direction = "both")
## Start:  AIC=280.76
## y ~ gender + pendidikan_num + umur
## 
##                  Df Deviance    AIC
## - umur            1   272.76 278.76
## - gender          1   272.76 278.76
## <none>                272.76 280.76
## - pendidikan_num  1   277.04 283.04
## 
## Step:  AIC=278.76
## y ~ gender + pendidikan_num
## 
##                  Df Deviance    AIC
## - gender          1   272.76 276.76
## <none>                272.76 278.76
## + umur            1   272.76 280.76
## - pendidikan_num  1   277.07 281.07
## 
## Step:  AIC=276.77
## y ~ pendidikan_num
## 
##                  Df Deviance    AIC
## <none>                272.76 276.76
## + gender          1   272.76 278.76
## + umur            1   272.76 278.76
## - pendidikan_num  1   277.08 279.08

5.2 Evaluasi Model

5.2.1 ROC dan AUC

ROC digunakan untuk mengevaluasi kinerja klasifikasi model. AUC (Area Under Curve) mengukur kemampuan model dalam membedakan kelas.

library(pROC)
## Warning: package 'pROC' was built under R version 4.4.2
## Type 'citation("pROC")' for a citation.
## 
## Attaching package: 'pROC'
## The following objects are masked from 'package:stats':
## 
##     cov, smooth, var
pred <- predict(model10, type = "response")
roc10 <- roc(data10$y, pred)
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
plot(roc10, col = "blue")

auc(roc10)
## Area under the curve: 0.5784

5.2.2 Pseudo R-Squared

Nilai pseudo \(R^2\) memberikan ukuran kekuatan model, mirip dengan \(R^2\) dalam regresi linear.

null_model <- glm(y ~ 1, data = data10, family = binomial)
1 - (logLik(model10) / logLik(null_model))  # McFadden's R²
## 'log Lik.' 0.01560203 (df=4)

BAB 6: Distribusi Multinomial

Distribusi multinomial adalah generalisasi dari distribusi binomial untuk lebih dari dua kategori.

\[ P(X_1 = x_1, ..., X_k = x_k) = \frac{n!}{x_1!x_2!...x_k!} p_1^{x_1} \cdots p_k^{x_k} \]

6.1 Perhitungan Probabilitas

n <- 10
x <- c(4, 3, 3)
p <- c(0.3, 0.4, 0.3)
prob <- factorial(n)/prod(factorial(x)) * prod(p^x)
prob
## [1] 0.05878656

6.2 Multinomial Logistic Regression

Regresi ini digunakan ketika variabel dependen memiliki lebih dari dua kategori dan tidak berurutan.

library(nnet)
## Warning: package 'nnet' was built under R version 4.4.3
data(iris)

model12 <- multinom(Species ~ Petal.Length + Petal.Width, data = iris)
## # weights:  12 (6 variable)
## initial  value 164.791843 
## iter  10 value 12.657828
## iter  20 value 10.374056
## iter  30 value 10.330881
## iter  40 value 10.306926
## iter  50 value 10.300057
## iter  60 value 10.296452
## iter  70 value 10.294046
## iter  80 value 10.292029
## iter  90 value 10.291154
## iter 100 value 10.289505
## final  value 10.289505 
## stopped after 100 iterations
summary(model12)
## Call:
## multinom(formula = Species ~ Petal.Length + Petal.Width, data = iris)
## 
## Coefficients:
##            (Intercept) Petal.Length Petal.Width
## versicolor   -22.79944      6.92122    7.878496
## virginica    -67.82521     12.64721   18.261016
## 
## Std. Errors:
##            (Intercept) Petal.Length Petal.Width
## versicolor     44.3859     37.58715    81.00888
## virginica      46.3939     37.65702    81.09482
## 
## Residual Deviance: 20.57901 
## AIC: 32.57901

Koefisien dari model ini merepresentasikan perubahan log-odds antara setiap kelas target dibandingkan kelas referensi.


BAB 7: Regresi Logistik Ordinal

Regresi logistik ordinal digunakan jika variabel respon bersifat kategorik dan terurut (ordinal).

Model yang digunakan adalah model logit kumulatif:

\[ \log\left(\frac{P(Y \leq j)}{P(Y > j)}\right) = \alpha_j + \beta x \]

7.1 Contoh Simulasi Data

library(MASS)
## 
## Attaching package: 'MASS'
## The following object is masked from 'package:dplyr':
## 
##     select
set.seed(123)
speed <- round(runif(200, 1, 10))
satisfaction <- cut(5 + 0.5*speed + rnorm(200),
                    breaks = c(-Inf, 5.5, 7.5, Inf),
                    labels = c("Tidak Puas", "Cukup", "Puas"),
                    ordered_result = TRUE)
df13 <- data.frame(satisfaction, speed)
model13 <- polr(satisfaction ~ speed, data = df13, Hess = TRUE)
summary(model13)
## Call:
## polr(formula = satisfaction ~ speed, data = df13, Hess = TRUE)
## 
## Coefficients:
##        Value Std. Error t value
## speed 0.9096     0.1094   8.315
## 
## Intercepts:
##                  Value  Std. Error t value
## Tidak Puas|Cukup 1.3015 0.4377     2.9738 
## Cukup|Puas       4.4734 0.5718     7.8232 
## 
## Residual Deviance: 237.2312 
## AIC: 243.2312

7.2 Uji Asumsi Paralelisme

library(brant)
## Warning: package 'brant' was built under R version 4.4.3
brant(model13)
## -------------------------------------------- 
## Test for X2  df  probability 
## -------------------------------------------- 
## Omnibus      1.13    1   0.29
## speed        1.13    1   0.29
## -------------------------------------------- 
## 
## H0: Parallel Regression Assumption holds

Uji Brant digunakan untuk mengecek apakah asumsi paralelisme dalam model ordinal dipenuhi.


BAB 8: Log Linear Model

Model log-linier digunakan untuk menganalisis hubungan antara variabel kategorik dalam tabel kontingensi.

Model umum:

\[ \log(\mu_{ij}) = \lambda + \lambda_i^A + \lambda_j^B + \lambda_{ij}^{AB} \]

8.1 Studi Kasus

data_survey <- matrix(c(32, 190, 113, 611, 51, 326),
                      nrow = 3, byrow = TRUE,
                      dimnames = list(Kebahagiaan = c("Tidak", "Cukup", "Sangat"),
                                      Surga = c("Tidak Percaya", "Percaya")))
ftable(data_survey)
##             Surga Tidak Percaya Percaya
## Kebahagiaan                            
## Tidak                        32     190
## Cukup                       113     611
## Sangat                       51     326
loglm(~ Kebahagiaan + Surga, data = data_survey)
## Call:
## loglm(formula = ~Kebahagiaan + Surga, data = data_survey)
## 
## Statistics:
##                        X^2 df  P(> X^2)
## Likelihood Ratio 0.8911136  2 0.6404675
## Pearson          0.8836760  2 0.6428538

8.2 Odds Ratio

Ukuran asosiasi dalam tabel 2x2:

\[ OR = \frac{n_{11}n_{22}}{n_{12}n_{21}} \]

Interpretasi odds ratio menunjukkan seberapa besar peluang antara dua kategori dibandingkan.