Kata Pengantar

Puji dan syukur saya panjatkan ke hadirat Tuhan Yang Maha Esa, karena atas rahmat dan karunia-Nya, buku Analisis Data Kategorik ini akhirnya dapat terselesaikan dengan baik. Buku ini merupakan salah satu output dari mata kuliah Analisis Data Kategori saya selama kuliah. Penulisan dan penyusunan naskah ini tidak lepas dari dukungan, arahan, serta bantuan banyak pihak yang sangat berarti bagi saya.

Secara khusus, saya mengucapkan terima kasih yang tulus kepada Bapak I Gede Nyoman Mindra Jaya, selaku dosen pengampu mata kuliah, atas bimbingan, motivasi, dan inspirasi yang beliau berikan. Kejelasan konsep, dorongan semangat, dan diskusi–diskusi mendalam tentang data kategorik telah menjadi fondasi utama keberhasilan penulisan ini.

Saya juga berterima kasih kepada rekan–rekan mahasiswa yang selalu suportif, baik secara langsung maupun tidak langsung. Saran konstruktif, kerja sama dalam diskusi kelompok, dan bantuan teknis yang kalian berikan betapapun kecil membantu saya melewati setiap tahap pengerjaan.

Akhirnya, saya berharap buku ini dapat menjadi sumber ilmu dan inspirasi bagi mahasiswa, peneliti, maupun praktisi yang berkecimpung di bidang analisis data kategorik. Segala kekurangan dalam naskah ini sepenuhnya menjadi tanggung jawab saya. Kritik dan masukan membangun akan sangat saya hargai demi penyempurnaan karya ini di masa mendatang.

Jatinangor, 24 Juni 2025 Peter Taniwan

1 Pendahuluan

Analisis Data Kategori adalah bagian dari statistika yang digunakan untuk melihat hubungan antara variabel-variabel yang berupa kategori (jenis kelamin, status pernikahan, dll), variabel angka (kayak umur, penghasilan), atau gabungan dari keduanya. Ilmu ini sering dipakai buat menganalisis masalah-masalah di bidang kesehatan (biomedik) dan sosial yang semakin rumit.

Dalam mata kuliah ini, kita belajar model-model statistik yang bisa digunakan saat data kita punya sifat tertentu, misalnya error-nya mengikuti distribusi khusus (disebut distribusi keluarga eksponensial).

Data kategori itu sendiri adalah data yang bentuknya kelompok, bukan angka yang bisa diukur terus-menerus. Contohnya kayak: laki-laki/perempuan, menikah/belum menikah, atau tingkat pendidikan. Karena bentuk datanya beda dari data angka, cara ngolahnya juga beda. Kita pakai metode khusus seperti tabel silang (tabel kontingensi), uji chi-square, dan regresi logistik.

Sekarang, analisis data kategori ini nggak cuma dipakai di riset akademik, tapi juga udah banyak dimanfaatkan di dunia teknologi, misalnya buat analisis data besar (big data) atau kecerdasan buatan (AI), untuk nemuin pola dan tren dalam data.

1.1 Tujuan Analisis Data Kategori

Analisis data kategori memiliki beberapa tujuan utama yang sangat penting, khususnya dalam bidang biomedik, sosial, dan ilmu terapan lainnya. Berikut adalah tujuan-tujuan tersebut:

1.1.1 Mengidentifikasi Pola dan Hubungan Antar Variabel Kategori

Untuk mengetahui apakah ada keterkaitan atau pengaruh antara dua atau lebih variabel yang bersifat kategori, seperti hubungan antara jenis kelamin dan preferensi produk.

1.1.2 Mengukur Kekuatan dan Arah Hubungan

Untuk menilai seberapa kuat dan ke arah mana hubungan antara kategori, misalnya melalui odds ratio dalam regresi logistik.

  1. Menguji Hipotesis tentang Independensi Variabel
    Dengan uji statistik seperti uji chi-square, kita dapat menguji apakah dua variabel kategori saling independen atau tidak.

  2. Memprediksi Kategori Respon Berdasarkan Variabel Lain
    Melalui model seperti regresi logistik, kita bisa memprediksi kemungkinan suatu individu berada dalam kategori tertentu berdasarkan karakteristik lainnya.

  3. Menghasilkan Informasi yang Relevan untuk Pengambilan Keputusan
    Hasil dari analisis dapat digunakan sebagai dasar pengambilan keputusan dalam berbagai bidang, seperti kesehatan, pemasaran, pendidikan, dan kebijakan publik.

  4. Mengadaptasi Model Analisis yang Sesuai dengan Sifat Data
    Karena data kategori memiliki karakteristik khusus (nominal/ordinal), analisis ini bertujuan menggunakan metode yang tepat agar hasilnya valid dan bermakna.

  5. Mendukung Pengembangan Teknologi Analitik
    Dalam era big data dan machine learning, analisis data kategori menjadi dasar penting dalam pemrosesan data non-numerik untuk aplikasi prediktif dan klasifikasi.

1.2 Definisi dan Ruang Lingkup Analisis Data Kategori

1.2.1 Definisi

Analisis Data Kategori adalah teknik statistik yang digunakan untuk menganalisis data yang berbentuk kategorik, yaitu data yang disusun dalam bentuk kategori atau kelompok, bukan dalam bentuk angka yang kontinu. Teknik ini sangat berguna dalam berbagai bidang seperti ilmu sosial, kesehatan, pemasaran, dan pendidikan, di mana banyak variabel yang diukur bersifat non-numerik.

Data kategorik memiliki ciri khas yaitu hanya mengelompokkan objek ke dalam beberapa kategori tanpa (atau dengan) mengindikasikan tingkat atau urutan. Karena karakteristiknya berbeda dari data kontinu, maka analisis terhadap data ini membutuhkan pendekatan dan metode statistik tersendiri, seperti tabel kontingensi, uji chi-square, regresi logistik, dan model-model lain dalam keluarga Generalized Linear Model (GLM).

1.2.2 Ruang Lingkup

Ruang lingkup dalam analisis data kategori mencakup berbagai jenis data dan pendekatan analisis, antara lain:

1.2.2.1 Jenis Skala Data Kategorik

  • Data Nominal
    Data nominal adalah data yang terdiri dari kategori tanpa urutan yang jelas. Contoh:
    • Warna favorit (merah, biru, hijau)
    • Jenis kelamin (laki-laki, perempuan)
  • Data Ordinal
    Data ordinal adalah data kategorik yang memiliki urutan, namun jarak antar kategorinya tidak diketahui secara pasti. Contoh:
    • Tingkat pendidikan (SD, SMP, SMA, Sarjana)
    • Tingkat kepuasan (sangat tidak puas, tidak puas, netral, puas, sangat puas)

1.2.2.2 Jumlah Kategori

  • Data Biner
    Merupakan data kategorik dengan dua kategori saja. Contoh:
    • Hasil ujian (lulus/gagal)
    • Status kesehatan (sehat/sakit)
  • Data Multikategori
    Merupakan data dengan lebih dari dua kategori. Contoh:
    • Status pernikahan (belum menikah, menikah, cerai)
    • Preferensi makanan (manis, asin, pedas, pahit)

1.2.2.3 Pendekatan Analisis

  • Analisis Deskriptif
    Menyajikan data dalam bentuk frekuensi dan persentase.

  • Uji Asosiasi dan Independensi
    Menggunakan tabel kontingensi dan uji chi-square untuk melihat hubungan antar variabel kategorik.

  • Model Prediktif
    Seperti regresi logistik (biner, multinomial, ordinal) untuk memprediksi probabilitas suatu kejadian berdasarkan variabel-variabel kategorik maupun kontinu.

1.3 Perbedaan Data Kategorik dan Data Numerik

Data dalam statistika secara umum dapat dibedakan menjadi dua jenis utama, yaitu data kategorik dan data numerik (kuantitatif). Keduanya memiliki sifat, fungsi, dan metode analisis yang berbeda.

1.3.1 Data Kategorik

Data kategorik adalah data yang nilainya berupa kategori atau label, bukan angka yang memiliki nilai matematis yang dapat dijumlahkan atau diukur secara kontinu. Data ini digunakan untuk mengelompokkan objek ke dalam beberapa kelas atau kelompok.

Contoh: - Jenis kelamin: laki-laki, perempuan - Status pernikahan: belum menikah, menikah, cerai - Tingkat kepuasan: sangat tidak puas, puas, sangat puas

Ciri-ciri data kategorik: - Tidak dapat diukur dengan satuan numerik yang kontinu - Bisa bersifat nominal (tidak berurutan) atau ordinal (berurutan) - Umumnya dianalisis dengan frekuensi, proporsi, uji chi-square, dan regresi logistik

Catatan: Data kategorik berbeda dari data kuantitatif karena tidak dapat diukur dalam skala numerik kontinu.

1.3.2 Data Numerik (Kuantitatif)

Data numerik adalah data yang nilainya berupa angka, dan bisa dihitung atau diukur dengan satuan tertentu. Data ini memungkinkan dilakukan operasi matematika seperti penjumlahan, pengurangan, rata-rata, dsb.

Contoh: - Tinggi badan: 170 cm, 165 cm - Berat badan: 60 kg, 75 kg - Usia: 20 tahun, 25 tahun

Ciri-ciri data numerik: - Dapat diukur secara kontinu atau diskrit - Bisa dianalisis menggunakan metode statistik parametrik seperti uji-t, ANOVA, regresi linier, dan sebagainya

1.3.4 Tabel Perbandingan

Aspek Data Kategorik Data Numerik
Nilai Kategori / label Angka / numerik
Satuan ukur Tidak ada Ada (misalnya cm, kg, tahun)
Operasi matematis Tidak bisa (misalnya rata-rata) Bisa (rata-rata, sd, dll)
Contoh Jenis kelamin, warna, status Usia, tinggi, penghasilan
Metode analisis Uji chi-square, regresi logistik Uji-t, ANOVA, regresi linier

1.4 Aplikasi Nyata Analisis Data Kategori di Berbagai Sektor

Analisis data kategori merupakan alat penting dalam menggali informasi dari data yang bersifat kualitatif. Jenis analisis ini tidak hanya dipelajari secara teoritis, tetapi juga sangat luas diterapkan dalam dunia nyata, mulai dari riset sosial hingga pengambilan keputusan strategis di industri. Berikut beberapa bidang yang banyak memanfaatkan analisis data kategori:

1.4.1 Riset Sosial dan Perilaku Masyarakat

Analisis data kategori membantu peneliti sosial untuk mengidentifikasi pola dan hubungan antara faktor-faktor demografis, budaya, dan perilaku. Contohnya:

  • Survei tentang preferensi politik berdasarkan usia dan latar belakang pendidikan
  • Studi hubungan antara kondisi keluarga dan tingkat stres individu
  • Evaluasi persepsi masyarakat terhadap isu-isu sosial menggunakan skala pendapat (setuju/netral/tidak setuju)

1.4.2 Dunia Medis dan Kesehatan Masyarakat

Dalam bidang kesehatan, data kategorik digunakan untuk mengelompokkan pasien, mengevaluasi efektivitas pengobatan, dan memahami faktor risiko penyakit. Misalnya:

  • Klasifikasi jenis penyakit berdasarkan gejala dominan
  • Studi perbandingan efektivitas vaksin antara kelompok usia berbeda
  • Analisis gaya hidup (merokok/tidak, aktif/tidak) terhadap kejadian penyakit tertentu

1.4.3 Strategi Bisnis dan Analisis Konsumen

Bisnis modern sangat bergantung pada data kategori untuk memahami segmentasi pasar dan mengembangkan strategi yang sesuai. Contoh penerapannya:

  • Menilai loyalitas pelanggan berdasarkan tingkat kepuasan
  • Mengelompokkan pasar berdasarkan kategori usia, lokasi, dan jenis kelamin
  • Memprediksi keputusan pembelian berdasarkan preferensi kategori produk

1.4.4 Evaluasi Pendidikan dan Pengajaran

Lembaga pendidikan menggunakan data kategorik untuk menilai efektivitas sistem pembelajaran serta memahami kebutuhan mahasiswa. Beberapa penerapan di antaranya:

  • Analisis umpan balik mahasiswa terhadap metode kuliah
  • Hubungan antara latar belakang keluarga dan capaian akademik
  • Evaluasi keterlibatan mahasiswa dalam kegiatan kampus berdasarkan jurusan

1.4.5 Tata Kelola Pemerintahan dan Kebijakan Publik

Pemerintah memanfaatkan data kategori untuk membuat keputusan yang responsif terhadap kebutuhan masyarakat. Misalnya:

  • Survei kepuasan masyarakat terhadap layanan publik
  • Studi efektivitas bantuan sosial berdasarkan kategori penerima manfaat
  • Analisis partisipasi pemilu berdasarkan kelompok usia atau wilayah

1.4.6 Keamanan Publik dan Sosial

Data kategori juga berguna dalam analisis pola kriminalitas dan perumusan strategi keamanan. Contohnya:

  • Pemetaan jenis kejahatan berdasarkan wilayah
  • Analisis hubungan antara faktor sosial dan tingkat kriminalitas
  • Evaluasi efektivitas penanganan kasus oleh aparat berdasarkan tipe pelanggaran

1.4.7 Teknologi dan Digitalisasi

Dengan pesatnya perkembangan teknologi, data kategorik semakin banyak digunakan dalam bidang digital. Contoh:

  • Klasifikasi konten dalam media sosial (berita/hiburan/edukasi)
  • Analisis sentimen pengguna terhadap fitur aplikasi (positif/negatif/netral)
  • Rekomendasi produk atau konten berdasarkan preferensi kategori pengguna

1.4.8 Olahraga dan Kesehatan Fisik

Dalam dunia olahraga, data kategori digunakan untuk mengevaluasi performa atlet dan mengembangkan strategi pelatihan. Misalnya:

  • Mengelompokkan atlet berdasarkan posisi bermain atau gaya bertanding
  • Menganalisis kecenderungan cedera berdasarkan jenis latihan
  • Studi hubungan antara tipe tubuh dan cabang olahraga yang cocok

1.4.9 Lingkungan dan Keberlanjutan

Analisis data kategori juga relevan dalam studi lingkungan hidup, seperti:

  • Klasifikasi jenis limbah (organik/non-organik/berbahaya)
  • Survei sikap masyarakat terhadap isu lingkungan (peduli/netral/tidak peduli)
  • Studi efektivitas program daur ulang berdasarkan wilayah atau kelompok usia

Analisis data kategori memungkinkan pengambilan keputusan yang lebih tajam dan kontekstual. Dengan memahami penerapannya di berbagai sektor, mahasiswa dapat melihat nilai praktis dari teori yang dipelajari di kelas.

2 Metode Analisis dalam Anlisis Data Kategori

Terdapat beberapa metode yang umumnya digunakan dalam Analisis Data Kategori, tergantung pada tujuan penelitian, antara lain:

2.1 Tabel Kontingensi dan Uji Chi-Square

Metode ini digunakan untuk menguji ada atau tidaknya hubungan antara dua variabel kategori.

Contoh: Menguji apakah tingkat pendidikan berhubungan dengan status pekerjaan individu.

Kegunaan:

  • Menyediakan gambaran tentang hubungan antara dua atau lebih variabel kategori.
  • Membantu dalam menentukan apakah ada asosiasi yang signifikan antara kategori yang diamati.
  • Digunakan dalam penelitian sosial, ekonomi, dan kesehatan untuk memeriksa hubungan antar variabel kategori.

2.2 Regresi Logistik

Regresi logistik adalah teknik yang digunakan untuk memprediksi probabilitas terjadinya suatu peristiwa yang dikategorikan berdasarkan variabel kategori lainnya.

Contoh: Memahami kemungkinan seorang pelanggan untuk membeli produk berdasarkan kategori preferensi mereka.

2.2.1 Kegunaan:

  • Berguna untuk memprediksi hasil yang bersifat biner (misalnya, ya atau tidak).
  • Membantu dalam pembuatan model prediktif yang digunakan dalam pemasaran, analisis risiko, dan pengambilan keputusan berbasis data.
  • Sering digunakan dalam situasi di mana variabel dependen adalah kategori, seperti dalam riset medis (misalnya, keberhasilan pengobatan atau tidak).

2.3 Analisis Correspondence (CA)

Analisis ini digunakan untuk mengidentifikasi dan menggambarkan hubungan antara berbagai kategori dalam satu dataset.

Contoh: Analisis preferensi makanan di berbagai kelompok usia untuk memahami pola konsumsi.

2.3.1 Kegunaan:

  • Menyajikan pemetaan visual antara kategori-kategori dalam dataset, memudahkan pemahaman hubungan antar variabel.
  • Berguna untuk mengidentifikasi tren dan pola yang tidak langsung terlihat dalam data.
  • Banyak diterapkan dalam analisis pasar dan riset sosial untuk menggali hubungan antar kategori.

2.4 Decision Tree dan Random Forest

Decision Tree dan Random Forest adalah metode pembelajaran mesin yang umum digunakan untuk klasifikasi data berbasis kategori.

Contoh: Mengklasifikasikan pelanggan berdasarkan tingkat loyalitas mereka menggunakan model pohon keputusan.

2.4.1 Kegunaan:

  • Membantu dalam klasifikasi data yang kompleks dengan hasil yang mudah dipahami dan diinterpretasikan.
  • Memungkinkan model untuk menangani data yang sangat besar dan beragam tanpa membutuhkan banyak praproses.
  • Sering digunakan dalam prediksi bisnis, seperti segmentasi pasar, analisis risiko, dan deteksi penipuan.

2.5 Kesimpulan

Analisis data kategori merupakan komponen penting dalam statistik yang memiliki banyak aplikasi di berbagai bidang. Dengan penggunaan metode yang tepat, analisis ini dapat membantu dalam mengidentifikasi pola, hubungan, serta tren dalam data kategori. Metode-metode seperti uji chi-square, regresi logistik, dan teknik machine learning seperti Decision Tree dan Random Forest terus berkembang seiring dengan kemajuan teknologi, yang memungkinkan pengambilan keputusan berbasis data yang lebih tepat.

3 Distribusi Probabilitas untuk Data Kategori

Variabel acak kategori adalah variabel yang hanya dapat memiliki sejumlah kategori diskrit sebagai hasilnya. Distribusi probabilitas untuk variabel ini menggambarkan kemungkinan munculnya setiap kategori dalam eksperimen atau penelitian yang dilakukan.

3.1 Distribusi Bernoulli

Distribusi Bernoulli digunakan dalam percobaan yang memiliki dua hasil yang mungkin, yaitu sukses atau gagal. Probabilitas untuk setiap hasil ditentukan dengan nilai \(p\), yang merupakan peluang terjadinya sukses, dan \(1-p\), yang merupakan peluang kegagalan.

Fungsi probabilitas distribusi Bernoulli adalah sebagai berikut: \[ P(X = x) = p^x (1 - p)^{1-x}, \quad x \in \{0, 1\} \]

Simbol: - \(X\): Variabel acak biner (hanya 0 atau 1) - \(p\): Probabilitas sukses (X = 1)

Contoh Aplikasi: - Hasil lemparan koin (Kepala = 1, Ekor = 0) - Keberhasilan atau kegagalan dalam uji klinis untuk suatu obat

Kegunaan:

  • Membantu dalam menganalisis percakapan dengan dua hasil, seperti uji coba produk.
  • Digunakan untuk memperkirakan peluang kejadian seperti sukses/gagal dalam berbagai percobaan.

Perhitungan dengan R:

set.seed(123)  
bernoulli_sample <- rbinom(n = 10, size = 1, prob = 0.5) # 10 percobaan Bernoulli 
bernoulli_sample
##  [1] 0 1 0 1 1 0 1 1 1 0

3.2 Distribusi Binomial

Distribusi Binomial digunakan untuk menghitung probabilitas jumlah keberhasilan dalam sejumlah percobaan yang independen, di mana setiap percobaan hanya memiliki dua kemungkinan hasil: sukses atau gagal. Distribusi ini berguna ketika kita ingin mengetahui kemungkinan jumlah keberhasilan dalam percobaan berulang.

Fungsi probabilitas untuk distribusi Binomial adalah: \[ P(X = k) = \binom{n}{k} p^k (1 - p)^{n - k} \] di mana: - \(X\) adalah jumlah keberhasilan yang diamati. - \(n\) adalah jumlah total percobaan. - \(k\) adalah jumlah keberhasilan yang diinginkan. - \(p\) adalah probabilitas sukses dalam satu percobaan. - \(\binom{n}{k}\) adalah kombinasi dari \(n\) percobaan yang diambil \(k\) keberhasilan.

Keterangan: - \(n\): Jumlah total percobaan yang dilakukan. - \(k\): Jumlah keberhasilan yang diharapkan dari percobaan. - \(p\): Probabilitas keberhasilan dalam satu percobaan (misalnya, probabilitas koin menunjukkan kepala). - \(\binom{n}{k}\): Kombinasi, yaitu jumlah cara untuk memilih \(k\) keberhasilan dari \(n\) percobaan.

Contoh Aplikasi:

  • Jumlah keberhasilan dalam percobaan lemparan koin: Jika kita melempar koin sebanyak 10 kali, kita dapat menggunakan distribusi Binomial untuk menghitung probabilitas munculnya 5 kepala.
  • Keberhasilan dalam pengobatan klinis: Jika 80% pasien berhasil sembuh dengan pengobatan tertentu, distribusi Binomial dapat digunakan untuk menghitung probabilitas bahwa dari 15 pasien, 12 orang akan sembuh.

Kegunaan:

  • Penerapan dalam Survei: Digunakan untuk memperkirakan jumlah keberhasilan dalam populasi berdasarkan sampel, seperti menghitung jumlah orang yang memilih opsi tertentu dalam survei.
  • Uji Hipotesis: Digunakan dalam pengujian hipotesis untuk mengetahui apakah hasil yang diamati konsisten dengan distribusi probabilitas binomial.

Perhitungan dengan R:

Untuk menghitung nilai dari distribusi Binomial di R, kita dapat menggunakan fungsi dbinom(), yang menghitung probabilitas untuk jumlah keberhasilan tertentu.

# Misal kita ingin menghitung probabilitas mendapatkan 3 kepala dalam 10 kali #lemparan koin
n <- 10 # Jumlah percobaan (lemparan koin) 
p <- 0.5 # Probabilitas sukses (kepala) 
k <- 3 # Jumlah keberhasilan yang diinginkan

# Menghitung probabilitas
probabilitas <- dbinom(k, size = n, prob = p)
probabilitas
## [1] 0.1171875

Selain itu, kita dapat menggunakan rbinom() untuk menghasilkan sampel acak berdasarkan distribusi Binomial.

# Men-generate 10 sampel dari distribusi binomial dengan n=10 dan p=0.5
set.seed(123)
samples <- rbinom(10, size = n, prob = p)
samples
##  [1] 4 6 5 7 7 2 5 7 5 5

3.3 Distribusi Multinomial

Distribusi Multinomial merupakan perluasan dari distribusi Binomial, digunakan ketika percobaan memiliki lebih dari dua kemungkinan hasil. Jika percobaan dilakukan sebanyak \(n\) kali, dan setiap percobaan dapat menghasilkan salah satu dari \(k\) kategori yang berbeda, distribusi multinomial memberikan probabilitas dari setiap kombinasi jumlah kejadian untuk masing-masing kategori.

Fungsi probabilitas untuk distribusi Multinomial adalah: \[ P(X_1 = x_1, X_2 = x_2, \dots, X_k = x_k) = \frac{n!}{x_1! x_2! \dots x_k!} p_1^{x_1} p_2^{x_2} \dots p_k^{x_k} \] di mana: - \(n\) adalah jumlah total percobaan. - \(x_i\) adalah jumlah kejadian untuk kategori ke-\(i\). - \(p_i\) adalah probabilitas kemunculan kategori ke-\(i\). - \(k\) adalah jumlah kategori yang mungkin muncul dalam percobaan.

Keterangan: - \(n\): Jumlah total percobaan. - \(x_i\): Jumlah kejadian untuk kategori ke-\(i\). - \(p_i\): Probabilitas kemunculan kategori ke-\(i\). - \(k\): Jumlah kategori yang tersedia dalam percobaan.

Contoh Aplikasi:

  • Pemilihan kandidat dalam pemilu: Dalam pemilu, jika terdapat beberapa kandidat dan setiap pemilih memilih satu kandidat, distribusi Multinomial digunakan untuk menghitung kemungkinan jumlah suara yang diperoleh setiap kandidat.
  • Distribusi warna permen dalam satu bungkus: Jika dalam satu bungkus permen terdapat berbagai warna, distribusi Multinomial dapat digunakan untuk menghitung probabilitas distribusi warna yang muncul.

Kegunaan:

  • Analisis Preferensi: Digunakan untuk menganalisis preferensi dalam pilihan yang memiliki lebih dari dua kategori, seperti dalam survei produk atau pemilihan kandidat.
  • Uji Hipotesis: Dapat digunakan dalam uji hipotesis untuk membandingkan distribusi kejadian pada lebih dari dua kategori.

Perhitungan dengan R:

Untuk menghitung probabilitas berdasarkan distribusi Multinomial, kita dapat menggunakan fungsi dmultinom(). Fungsi ini digunakan untuk menghitung probabilitas untuk setiap kombinasi kejadian dari kategori yang ada.

 # Misalkan kita memiliki 10 percobaan dan 3 kategori dengan probabilitas 
#masing-masing 
n <- 10 # Jumlah percobaan 
p <- c(0.3, 0.5, 0.2) # Probabilitas untuk masing-masing kategori 
x <- c(3, 5, 2) # Jumlah kejadian untuk masing-masing kategori

#Menghitung probabilitas menggunakan distribusi Multinomial

probabilitas_multinomial <- dmultinom(x, size = n, prob = p) 
probabilitas_multinomial
## [1] 0.08505

Selain itu, kita dapat menghasilkan sampel acak menggunakan distribusi Multinomial dengan rmultinom(). Berikut adalah cara untuk menghasilkan sampel acak berdasarkan distribusi ini.

# Men-generate 1 sampel acak dari distribusi multinomial dengan n=10 dan #probabilitas yang sudah ditentukan 
set.seed(123) 
samples_multinomial <- rmultinom(1, size = n, prob = p) 
samples_multinomial
##      [,1]
## [1,]    2
## [2,]    5
## [3,]    3

3.4 Distribusi Poisson

Distribusi Poisson digunakan untuk menghitung jumlah kejadian dalam suatu interval waktu atau ruang yang tetap, di mana kejadian tersebut terjadi secara independen dan dengan rata-rata kejadian yang konstan dalam interval tersebut. Distribusi ini banyak digunakan dalam situasi di mana kejadian yang jarang terjadi, tetapi jumlah kejadian dalam periode tertentu dapat dihitung.

Fungsi probabilitas untuk distribusi Poisson adalah: \[ P(X = k) = \frac{\lambda^k e^{-\lambda}}{k!} \] di mana: - \(X\) adalah jumlah kejadian yang diamati dalam interval waktu atau ruang tertentu. - \(\lambda\) adalah rata-rata kejadian per unit waktu atau ruang. - \(k\) adalah jumlah kejadian yang terjadi dalam interval tersebut. - \(e\) adalah konstanta Euler (sekitar 2.71828).

  • \(\lambda\): Rata-rata kejadian dalam interval waktu atau ruang tertentu.
  • \(k\): Jumlah kejadian yang diinginkan dalam interval tersebut.
  • \(e\): Konstanta matematika yang digunakan dalam perhitungan distribusi Poisson.

Contoh Aplikasi:

  • Jumlah panggilan telepon ke pusat layanan: Jika rata-rata jumlah panggilan telepon ke pusat layanan dalam satu jam adalah 5 panggilan, distribusi Poisson dapat digunakan untuk menghitung kemungkinan jumlah panggilan yang masuk dalam satu jam.
  • Jumlah kecelakaan lalu lintas di satu jalan: Jika rata-rata kecelakaan lalu lintas yang terjadi di suatu jalan dalam sehari adalah 2, distribusi Poisson digunakan untuk menghitung probabilitas terjadinya jumlah kecelakaan tertentu dalam sehari.

Kegunaan:

  • Perhitungan Kejadian Langka: Berguna untuk menghitung probabilitas terjadinya kejadian yang jarang dalam periode waktu tertentu, seperti jumlah kecelakaan, panggilan telepon, atau kerusakan mesin.
  • Analisis Proses Stokastik: Dapat digunakan untuk model proses stokastik di berbagai bidang, seperti keuangan, teknik, dan biologi.

Perhitungan dengan R:

Untuk menghitung probabilitas berdasarkan distribusi Poisson, kita dapat menggunakan fungsi dpois(), yang digunakan untuk menghitung probabilitas bahwa suatu jumlah kejadian terjadi dalam interval waktu atau ruang tertentu.

# Misalkan rata-rata kejadian adalah 3, dan kita ingin menghitung probabilitas #terjadinya 5 kejadian
lambda <- 3 # Rata-rata kejadian
k <- 5 # Jumlah kejadian yang diinginkan

# Menghitung probabilitas menggunakan distribusi Poisson
probabilitas_poisson <- dpois(k, lambda)
probabilitas_poisson
## [1] 0.1008188

Selain itu, kita dapat menggunakan rpois() untuk menghasilkan sampel acak berdasarkan distribusi Poisson.

# Men-generate 10 sampel acak dari distribusi Poisson dengan rata-rata kejadian 3
set.seed(123)
samples_poisson <- rpois(10, lambda = 3)
samples_poisson
##  [1] 2 4 2 5 6 0 3 5 3 3

4 Desain Sampling dalam Analisis Data Kategori

Dalam penelitian yang menggunakan data kategori, pemilihan strategi sampling sangat berpengaruh terhadap kualitas hasil yang diperoleh, khususnya dalam hal validitas dan keandalan. Desain sampling sebaiknya disesuaikan dengan jenis data serta sasaran dari studi yang dilakukan. Secara umum, pendekatan pengambilan sampel dibagi menjadi dua kelompok besar: prospektif dan retrospektif, yang masing-masing memiliki ciri khas dan teknik tersendiri.

4.1 Pengambilan Sampel Prospektif

Metode ini dilakukan dengan mengidentifikasi subjek terlebih dahulu, lalu dilakukan observasi secara berkelanjutan untuk mencatat perkembangan variabel yang diamati. Karena peneliti dapat mengendalikan variabel bebas sejak awal, pendekatan ini cocok untuk eksperimen dan studi sebab-akibat.

4.1.1 Eksperimen

Eksperimen melibatkan penempatan subjek secara acak ke dalam kelompok perlakuan dan kelompok kontrol. Teknik sampling yang lazim digunakan antara lain:

  • Simple Random Sampling (SRS): Tiap anggota populasi memiliki peluang yang sama untuk terpilih.
  • Stratified Sampling: Populasi dikelompokkan berdasarkan karakteristik tertentu (strata), lalu diambil sampel dari tiap strata.
  • Cluster Sampling: Populasi dipecah menjadi beberapa klaster, lalu sejumlah klaster dipilih secara acak untuk dijadikan sampel.

4.1.2 Studi Kohort

Studi kohort dilakukan dengan mengikuti sekelompok orang berdasarkan kriteria tertentu selama kurun waktu tertentu. Beberapa teknik sampling yang digunakan antara lain:

  • Census Sampling: Semua individu yang memenuhi syarat diikutsertakan.
  • Systematic Sampling: Sampel diambil secara berkala dari daftar populasi.
  • Matched Sampling: Tiap anggota kelompok kohort dipasangkan dengan individu lain yang memiliki karakteristik serupa dari kelompok berbeda.

4.2 Pengambilan Sampel Retrospektif

Berbeda dengan pendekatan prospektif, metode ini mengandalkan data historis atau kejadian masa lalu. Cocok untuk studi yang menelusuri hubungan antara paparan dan hasil.

4.2.1 Studi Kasus-Kontrol

Studi ini melibatkan dua kelompok: satu dengan kondisi tertentu (kasus) dan satu tanpa kondisi (kontrol). Teknik sampling yang digunakan:

  • Purposive Sampling: Pemilihan berdasarkan karakteristik yang relevan.
  • Snowball Sampling: Subjek awal merekomendasikan peserta lain.
  • Incidence Density Sampling: Pemilihan kasus dan kontrol mempertimbangkan waktu kejadian.

4.2.2 Studi Kohort Retrospektif

Menggunakan data yang sudah ada untuk mengelompokkan individu berdasarkan paparan, lalu ditelusuri hasil yang terjadi. Metode sampling yang umum:

  • Convenience Sampling: Berdasarkan ketersediaan data.
  • Quota Sampling: Pemilihan sampel agar proporsional terhadap populasi.
  • Case-Based Sampling: Fokus pada karakteristik kasus yang telah terjadi.

4.3 Ringkasan Perbandingan Desain Sampling

Berikut tabel ringkasan yang membandingkan kelebihan dan keterbatasan masing-masing pendekatan:

Jenis Studi Pendekatan Metode Sampling Kelebihan Kekurangan
Eksperimen Prospektif SRS, Stratified, Cluster Kontrol variabel tinggi, cocok untuk kausalitas Biaya mahal, perlu pertimbangan etis dan teknis
Studi Kohort Prospektif Census, Systematic, Matched Dapat observasi jangka panjang Potensi kehilangan subjek, waktu lama
Studi Kasus-Kontrol Retrospektif Purposive, Snowball, Incidence Density Cepat, efisien untuk kasus langka Rentan bias, sulit kontrol variabel luar
Kohort Retrospektif Retrospektif Convenience, Quota, Case-Based Hemat waktu dan biaya, manfaatkan data historis Data tidak selalu lengkap atau berkualitas baik

Desain sampling yang baik bukan hanya soal efisiensi, tetapi juga memastikan temuan bisa dipertanggungjawabkan dan digeneralisasikan. Memahami kapan dan bagaimana menggunakan tiap metode akan sangat membantu dalam menyusun studi yang solid dan berbobot.

5 Tabel Kontingensi 2x2

Tabel kontingensi 2x2 adalah format dasar yang umum digunakan untuk mengevaluasi hubungan antara dua variabel yang bersifat kategorik. Contohnya seperti hubungan antara tindakan medis dengan kesembuhan pasien, atau kebiasaan merokok dengan risiko kanker paru-paru.

Struktur umum tabel 2x2:

Kategori (+) Kategori (-) Total
Grup 1 n11 n12 n1.
Grup 2 n21 n22 n2.
Total n.1 n.2 n

5.1 Analisis Peluang dalam Tabel 2x2

5.1.1 Peluang Gabungan (Joint Probability)

Merupakan peluang bahwa dua kejadian terjadi bersamaan, misalnya “merokok” dan “mengalami kanker”:

\[ P(A_i, B_j) = \frac{n_{ij}}{n} \]

5.1.2 Peluang Marginal

Menggambarkan kemungkinan dari satu variabel tanpa memperhitungkan variabel lain:

\[ P(A_i) = \frac{n_{i.}}{n} \quad , \quad P(B_j) = \frac{n_{.j}}{n} \]

5.1.3 Peluang Bersyarat

Mengukur peluang suatu kejadian, dengan syarat kejadian lain telah diketahui:

\[ P(B_j|A_i) = \frac{n_{ij}}{n_{i.}} \]


5.1.4 Contoh Kasus: Merokok dan Kanker Paru-Paru

Kanker (+) Kanker (-) Total
Perokok 450 200 650
Bukan Perokok 50 300 350
Total 500 500 1000

5.1.5 Perhitungan Manual

# Matriks data 
data <- matrix(c(450, 200, 50, 300), nrow = 2, byrow = TRUE) 
colnames(data) <- c("Kanker (+)", "Kanker (-)") 
rownames(data) <- c("Perokok", "Non-Perokok")

n <- sum(data)

#Peluang gabungan

P_joint <- data / n

#Peluang marginal

P_marginal_baris <- rowSums(data) / n 
P_marginal_kolom <- colSums(data) / n

#Peluang bersyarat

P_conditional <- data / rowSums(data)

#Output

list( Peluang_Bersama = P_joint, Peluang_Marginal_Baris = P_marginal_baris, Peluang_Marginal_Kolom = P_marginal_kolom, Peluang_Bersyarat = P_conditional )
## $Peluang_Bersama
##             Kanker (+) Kanker (-)
## Perokok           0.45        0.2
## Non-Perokok       0.05        0.3
## 
## $Peluang_Marginal_Baris
##     Perokok Non-Perokok 
##        0.65        0.35 
## 
## $Peluang_Marginal_Kolom
## Kanker (+) Kanker (-) 
##        0.5        0.5 
## 
## $Peluang_Bersyarat
##             Kanker (+) Kanker (-)
## Perokok      0.6923077  0.3076923
## Non-Perokok  0.1428571  0.8571429

5.2 Ukuran Asosiasi dalam Data Kategori 2x2

Dalam analisis statistik, tabel kontingensi 2x2 digunakan untuk mengeksplorasi hubungan antara dua variabel kategori. Tabel ini memungkinkan kita untuk mengetahui apakah ada hubungan yang signifikan antara dua variabel tersebut.

5.2.1 Aplikasi umum tabel kontingensi 2x2:

  • Epidemiologi: Meneliti kaitan antara kebiasaan merokok dan penyakit kanker paru-paru.
  • Eksperimen Klinis: Mengukur sejauh mana efektivitas pengobatan terhadap suatu kondisi medis.
  • Riset Sosial: Menganalisis hubungan antara tingkat pendidikan dan status pekerjaan.

Dalam tabel 2x2, kita dapat mengukur asosiasi menggunakan ukuran berikut:

  • Risk Difference (RD): Mengukur selisih risiko antara dua kelompok.
  • Relative Risk (RR): Menilai perbandingan risiko antara dua kelompok.
  • Odds Ratio (OR): Membandingkan peluang terjadinya kejadian antara dua kelompok.
  • Uji Chi-Square dan Fisher’s Exact Test: Menguji signifikansi hubungan antara dua variabel kategori.

5.2.2 Risk Difference (RD)

Risk Difference (RD) atau Perbedaan Risiko adalah ukuran absolut yang sering digunakan dalam studi epidemiologi. RD menggambarkan selisih antara probabilitas terjadinya suatu kejadian dalam dua kelompok yang berbeda, misalnya antara kelompok yang terpapar dan yang tidak terpapar.

Perhitungan RD dilakukan dengan cara menghitung risiko kejadian dalam setiap kelompok, kemudian mengurangkan risiko kelompok tidak terpapar dari risiko kelompok yang terpapar.

Secara matematis, perhitungan RD dapat ditulis sebagai:

\[ RD = \left( \frac{n11}{n1.} \right) - \left( \frac{n21}{n2.} \right) \]

Dimana: - \(n11\) adalah jumlah kasus yang terjadi pada kelompok 1 (misalnya yang terpapar), - \(n1.\) adalah total jumlah individu dalam kelompok 1, - \(n21\) adalah jumlah kasus yang terjadi pada kelompok 2 (misalnya yang tidak terpapar), - \(n2.\) adalah total jumlah individu dalam kelompok 2.

Interpretasi: - Jika \(RD > 0\), maka kelompok 1 (terpapar) memiliki risiko lebih tinggi dibandingkan dengan kelompok 2 (tidak terpapar). - Jika \(RD < 0\), maka risiko kejadian lebih rendah di kelompok 1 dibandingkan dengan kelompok 2. - Jika \(RD = 0\), maka tidak ada perbedaan risiko antara kedua kelompok.

5.2.3 Relative Risk (RR)

Relative Risk (RR) atau Risiko Relatif adalah ukuran yang sering digunakan dalam penelitian epidemiologi untuk membandingkan kemungkinan terjadinya suatu peristiwa atau kejadian antara dua kelompok. Dalam hal ini, RR mengukur perbandingan antara kelompok yang terpapar suatu faktor risiko dengan kelompok yang tidak terpapar.

RR memberikan gambaran mengenai seberapa besar kemungkinan kejadian tersebut terjadi pada kelompok yang terpapar dibandingkan dengan kelompok yang tidak terpapar.

Rumus perhitungan Relative Risk (RR) adalah sebagai berikut:

\[ RR = \frac{\left( \frac{n11}{n1.} \right)}{\left( \frac{n21}{n2.} \right)} \]

Dimana: - \(n11\) adalah jumlah kejadian pada kelompok yang terpapar, - \(n1.\) adalah total jumlah individu dalam kelompok terpapar, - \(n21\) adalah jumlah kejadian pada kelompok yang tidak terpapar, - \(n2.\) adalah total jumlah individu dalam kelompok yang tidak terpapar.

Interpretasi: - Jika \(RR > 1\), maka kejadian lebih sering terjadi pada kelompok yang terpapar. - Jika \(RR < 1\), maka kejadian lebih jarang terjadi pada kelompok yang terpapar. - Jika \(RR = 1\), maka tidak ada perbedaan risiko antara kedua kelompok.


Contoh Perhitungan menggunakan R

Misalkan kita memiliki data mengenai hubungan antara konsumsi alkohol dan kejadian penyakit jantung. Berikut adalah data yang akan digunakan:

Penyakit Jantung (+) Penyakit Jantung (-) Total
Konsumsi Alkohol 120 80 200
Tidak Konsumsi 30 170 200
Total 150 250 400

Dalam contoh ini: - Kelompok 1 adalah orang yang mengonsumsi alkohol, - Kelompok 2 adalah orang yang tidak mengonsumsi alkohol.

5.2.4 Odds Ratio (OR)

Odds Ratio (OR) atau Rasio Odds adalah ukuran yang digunakan dalam analisis statistik untuk membandingkan peluang (odds) terjadinya suatu kejadian antara dua kelompok, misalnya kelompok yang terpapar dan yang tidak terpapar. OR sering digunakan dalam penelitian jenis studi kasus-kontrol, tetapi juga bisa digunakan dalam studi kohort dan eksperimen.

OR mengukur perbandingan odds antara dua kelompok yang berbeda. Odds mengacu pada rasio antara kejadian dan non-kejadian dalam suatu kelompok. Rasio ini berguna untuk menggambarkan kekuatan hubungan antara dua variabel.

Secara matematis, Odds Ratio (OR) dihitung dengan rumus berikut:

\[ OR = \frac{n11 \times n22}{n12 \times n21} \]

Dimana: - \(n11\) adalah jumlah kejadian pada kelompok 1 yang terpapar, - \(n12\) adalah jumlah non-kejadian pada kelompok 1 yang terpapar, - \(n21\) adalah jumlah kejadian pada kelompok 2 yang tidak terpapar, - \(n22\) adalah jumlah non-kejadian pada kelompok 2 yang tidak terpapar.

Interpretasi: - Jika \(OR > 1\), maka odds kejadian lebih tinggi di kelompok yang terpapar dibandingkan kelompok yang tidak terpapar. - Jika \(OR < 1\), maka odds kejadian lebih rendah di kelompok yang terpapar dibandingkan kelompok yang tidak terpapar. - Jika \(OR = 1\), maka tidak ada perbedaan odds kejadian antara kedua kelompok.


Contoh Perhitungan menggunakan R

Misalkan kita memiliki data tentang hubungan antara paparan polusi udara dan risiko penyakit pernapasan. Berikut adalah data yang digunakan:

Penyakit Pernapasan (+) Penyakit Pernapasan (-) Total
Paparan Polusi Tinggi 100 150 250
Paparan Polusi Rendah 50 200 250
Total 150 350 500

Dalam contoh ini: - Kelompok 1 adalah individu yang terpapar polusi udara tinggi, - Kelompok 2 adalah individu yang terpapar polusi udara rendah.

5.2.5 Perbandingan RD, RR, dan OR

Ketiga ukuran asosiasi, yaitu Risk Difference (RD), Relative Risk (RR), dan Odds Ratio (OR), digunakan untuk mengukur hubungan antara dua variabel kategori. Meskipun ketiganya bertujuan untuk menilai kekuatan asosiasi antara dua kelompok, mereka memiliki perbedaan mendasar dalam cara pengukuran dan interpretasinya. Berikut adalah perbandingan dari ketiga ukuran tersebut:

Ukuran Definisi Desain Sampling yang Cocok Interpretasi
Risk Difference (RD) Selisih antara probabilitas kejadian suatu peristiwa dalam dua kelompok Studi kohort atau eksperimen acak Menunjukkan perbedaan absolut dalam risiko kejadian antara dua kelompok.
Relative Risk (RR) Perbandingan risiko kejadian antara dua kelompok Studi kohort atau eksperimen klinis Mengukur seberapa besar risiko relatif pada kelompok terpapar dibandingkan dengan kelompok yang tidak terpapar.
Odds Ratio (OR) Perbandingan odds (peluang) kejadian antara dua kelompok Studi kasus-kontrol atau studi observasional Mengukur hubungan antara faktor risiko dan kejadian, dan sering digunakan dalam studi kasus-kontrol.

5.2.6 Kesimpulan:

  • Risk Difference (RD) memberikan gambaran tentang perbedaan absolut dalam risiko antara dua kelompok. Ini lebih mudah dipahami karena menunjukkan seberapa besar tambahan atau pengurangan risiko yang terjadi pada kelompok tertentu.

  • Relative Risk (RR) lebih cocok untuk studi kohort atau eksperimen klinis, karena mengukur kemungkinan relatif dan sering kali lebih berguna untuk menilai kekuatan hubungan antara faktor risiko dan kejadian.

  • Odds Ratio (OR) lebih banyak digunakan dalam studi kasus-kontrol karena memungkinkan peneliti untuk memperkirakan risiko relatif meskipun data yang digunakan adalah data dari studi retrospektif.


Dengan pemahaman yang lebih baik tentang perbedaan dan aplikasi ketiga ukuran asosiasi ini, peneliti dapat memilih ukuran yang tepat berdasarkan desain penelitian mereka dan tujuan analisis.

6 Inferensi Tabel Kontingensi Dua Arah

Inferensi dalam statistik adalah proses pengambilan kesimpulan atau generalisasi mengenai populasi berdasarkan data sampel. Pada tabel kontingensi dua arah, inferensi digunakan untuk menganalisis hubungan antara dua variabel kategori yang tersusun dalam sebuah matriks distribusi frekuensi. Tujuan utama dari inferensi ini adalah untuk memahami apakah ada hubungan atau asosiasi yang signifikan antara kedua variabel tersebut.

Inferensi dalam tabel kontingensi dua arah dapat dibagi menjadi dua jenis utama:


6.1 Estimasi

Estimasi bertujuan untuk memperkirakan parameter yang ada pada populasi dengan menggunakan data sampel. Dalam konteks tabel kontingensi dua arah, estimasi dibagi menjadi dua jenis utama, yaitu estimasi titik dan estimasi interval.

6.1.1 Estimasi Titik

Estimasi titik memberikan nilai tunggal yang digunakan untuk memperkirakan parameter populasi. Dalam tabel kontingensi dua arah, estimasi titik sering kali berupa proporsi kejadian dalam masing-masing kelompok yang ada.

Secara matematis, estimasi titik proporsi untuk kelompok tertentu dapat dihitung dengan rumus:

\[ \hat{p} = \frac{x}{n} \]

Dimana: - \(\hat{p}\) adalah estimasi titik proporsi, - \(x\) adalah jumlah kejadian dalam kategori yang dimaksud, - \(n\) adalah total jumlah individu dalam sampel.

6.1.2 Estimasi Interval

Estimasi interval memberikan rentang nilai yang mengandung parameter populasi dengan tingkat kepercayaan tertentu. Ini lebih informatif karena memberi gambaran seberapa besar kemungkinan parameter yang kita perkirakan berada dalam rentang tersebut.

Rumus untuk estimasi interval proporsi dengan tingkat kepercayaan \(\alpha\) adalah:

\[ \hat{p} \pm Z_{\alpha/2} \sqrt{\frac{\hat{p}(1 - \hat{p})}{n}} \]

Dimana: - \(Z_{\alpha/2}\) adalah nilai dari distribusi normal standar untuk tingkat kepercayaan yang ditentukan, - \(\hat{p}\) adalah estimasi titik proporsi, - \(n\) adalah ukuran sampel.

6.2 Uji Hipotesis

Uji hipotesis digunakan untuk menguji klaim atau dugaan tentang parameter populasi berdasarkan data sampel yang kita miliki. Dalam analisis data kategori, salah satu jenis uji hipotesis yang sering digunakan adalah Uji Proporsi, yang menguji apakah proporsi kejadian dalam suatu kelompok berbeda secara signifikan dari proporsi yang diharapkan.

Tujuan utama dari uji hipotesis adalah untuk menentukan apakah data yang kita amati cukup kuat untuk menolak hipotesis nol (H₀), yang biasanya menyatakan bahwa tidak ada perbedaan atau tidak ada hubungan antara variabel yang diuji.

6.2.1 Uji Proporsi

ji proporsi digunakan untuk membandingkan proporsi kejadian antara dua kelompok dalam sebuah tabel kontingensi. Tujuan utamanya adalah mengetahui apakah terdapat perbedaan proporsi yang signifikan antara kedua kelompok yang dibandingkan.

Misalkan tabel kontingens 2 x 2 memiliki struktur sebagai berikut:

library(knitr)
library(kableExtra)

# Buat data frame
tabel <- data.frame(
  Grup = c("Grup 1", "Grup 2", "Total"),
  `Kejadian (+)` = c("$n_{11}$", "$n_{21}$", "$n_{.1}$"),
  `Tidak Kejadian (-)` = c("$n_{12}$", "$n_{22}$", "$n_{.2}$"),
  Total = c("$n_{1.}$", "$n_{2.}$", "$n$")
)

# Tampilkan tabel dengan kable
kable(
  tabel,
  booktabs = TRUE,
  escape = FALSE,
  align = "lccc",
  caption = "Tabel Kontingensi 2x2"
) %>%
  kable_styling(latex_options = c("hold_position"))
Tabel Kontingensi 2x2
Grup Kejadian…. Tidak.Kejadian…. Total
Grup 1 \(n_{11}\) \(n_{12}\) \(n_{1.}\)
Grup 2 \(n_{21}\) \(n_{22}\) \(n_{2.}\)
Total \(n_{.1}\) \(n_{.2}\) \(n\)

Untuk menguji apakah proporsi kedua kelompok sama atau berbeda, uji z dua proporsi dapat digunakan. Uji ini dilakukan dengan menetapkan hipotesis nol bahwa tidak ada perbedaan proporsi antara kedua kelompok:

- Hipotesis Nol (H0) : tidak ada perbedaan proporsi antara dua kelompok

- Hipotesis Alternatif (H1) : terdapat perbedaan proporsi antara dua kelompok

Estimasi proporsi dalam masing - masing kelompok diberikan oleh :

\[ \hat{p}_1 = \frac{n_{11}}{n_{1.}} \], \[ \hat{p}_2 = \frac{n_{21}}{n_{2.}} \]

Estimasi proporsi gabungan

\[ \hat{p} = \frac{n_{11} + n_{21}}{n_{1.} + n_{2.}} \]

Statistik uji untuk uji proporsi dua sampel :

\[ Z = \frac{\hat{p}_1 - \hat{p}_2}{\sqrt{\hat{p}(1 - \hat{p})\left(\frac{1}{n_{1.}} + \frac{1}{n_{2.}}\right)}} \]

Statistik uji Z pada uji dua proporsi mengikuti distribusi normal baku \(\mathcal{N}(0, 1)\). Nilai p-value diperoleh dengan membandingkan statistik uji terhadap nilai kritis dari distribusi normal tersebut.

Jika nilai absolut \(|z|\) melebihi nilai kritis untuk tingkat signifikansi tertentu \(\alpha\) (misalnya, 1.96 untuk \(\alpha = 0.05\)), maka hipotesis nol dapat ditolak. Artinya, terdapat perbedaan proporsi yang signifikan antara dua kelompok yang dibandingkan.

Uji dua proporsi ini sangat sesuai digunakan dalam penelitian kohort maupun eksperimen klinis, terutama ketika kita ingin mengetahui apakah perbedaan proporsi antar kelompok signifikan secara statistik.

6.2.1.1. Perhitungan Manual

Misalkan kita memiliki tabel tentang hubungan antara metode pengobatan dan kesembuhan kanker.

library(knitr)

# Definisikan tabel kontingensi
tabel <- data.frame(
  Grup               = c("Grup 1",    "Grup 2", "Total"),
  `Kejadian (+)`     = c(40,          55,       95),
  `Tidak Kejadian (-)` = c(60,        45,       105),
  Total              = c(100,        100,      200),
  check.names = FALSE
)

# Cetak tabel dengan kable
kable(
  tabel,
  caption = "Tabel Kontingensi – Contoh Data Lain",
  booktabs = TRUE,
  align = "lccc"
)
Tabel Kontingensi – Contoh Data Lain
Grup Kejadian (+) Tidak Kejadian (-) Total
Grup 1 40 60 100
Grup 2 55 45 100
Total 95 105 200

Langkah 1: Proporsi Sampel

\[ \hat{p}_1 = \frac{40}{100} = 0.40 \]

\[ \hat{p}_2 = \frac{55}{100} = 0.55 \]

Langkah 2: Proporsi Gabungan

\[ \hat{p} = \frac{40 + 55}{100 + 100} = \frac{95}{200} = 0.475 \]

Langkah 3: Statistik Uji Z

\[ Z = \frac{\hat{p}_1 - \hat{p}_2} {\sqrt{\hat{p}\,(1-\hat{p})\left(\frac{1}{100}+\frac{1}{100}\right)}} = \frac{0.40 - 0.55}{\sqrt{0.475\,(1-0.475)\times 0.02}} = \frac{-0.15}{\sqrt{0.0049875}} \approx -2.124 \]

Langkah 4: p-value (dua arah)

\[ \text{p-value} = 2 \times P\bigl(Z < -2.124\bigr) \approx 2 \times 0.0168 = 0.0336 \]

Karena p-value = 0.0336 < 0.05, kita menolak \(H_0\), yang berarti terdapat perbedaan proporsi signifikan antara dua grup.

6.2.1.2. Perhitungan dengan R

# Verifikasi dengan R
prop_test <- prop.test(
  x = c(40, 55),
  n = c(100, 100)
)
prop_test
## 
##  2-sample test for equality of proportions with continuity correction
## 
## data:  c(40, 55) out of c(100, 100)
## X-squared = 3.9298, df = 1, p-value = 0.04744
## alternative hypothesis: two.sided
## 95 percent confidence interval:
##  -0.296847038 -0.003152962
## sample estimates:
## prop 1 prop 2 
##   0.40   0.55

Interpretasi: Jika p-value < 0.05, maka terdapat perbedaan proporsi kejadian antara grup 1 dan grup 2.

6.2.2 Uji Asosiasi

Uji asosiasi digunakan untuk menguji hubungan antara dua variabel kategori dalam tabel kontingensi. Salah satu tujuan utama dari uji asosiasi adalah untuk mengevaluasi apakah ada hubungan signifikan antara dua variabel yang ada. Dalam uji asosiasi pada tabel kontingensi dua arah, kita sering menggunakan beberapa ukuran asosiasi seperti Risk Difference (RD), Relative Risk (RR), dan Odds Ratio (OR).

Setiap ukuran asosiasi ini memiliki kegunaan dan interpretasi yang berbeda, tergantung pada jenis data dan tujuan analisis. Berikut adalah penjelasan dan cara perhitungan masing-masing:


Risk Difference (RD)

Risk Difference (RD) atau Perbedaan Risiko adalah ukuran yang menggambarkan perbedaan antara probabilitas kejadian suatu hasil di dua kelompok yang berbeda, seperti antara kelompok yang terpapar dan yang tidak terpapar. RD dihitung dengan mengurangkan risiko kejadian pada kelompok yang tidak terpapar dari risiko pada kelompok yang terpapar.

Rumus perhitungan Risk Difference (RD) adalah:

\[ RD = \left( \frac{n11}{n1.} \right) - \left( \frac{n21}{n2.} \right) \]

Dimana: - \(n11\) adalah jumlah kejadian pada kelompok 1 (terpapar), - \(n1.\) adalah total jumlah individu dalam kelompok 1, - \(n21\) adalah jumlah kejadian pada kelompok 2 (tidak terpapar), - \(n2.\) adalah total jumlah individu dalam kelompok 2.

Interpretasi: - Jika RD > 0, maka kelompok pertama (terpapar) memiliki risiko lebih tinggi. - Jika RD < 0, maka kelompok pertama (terpapar) memiliki risiko lebih rendah. - Jika RD = 0, maka tidak ada perbedaan risiko antara dua kelompok.


Relative Risk (RR)

Relative Risk (RR) atau Risiko Relatif digunakan untuk membandingkan risiko kejadian antara dua kelompok. RR menghitung seberapa besar kemungkinan suatu peristiwa terjadi pada kelompok yang terpapar dibandingkan dengan kelompok yang tidak terpapar.

Rumus perhitungan Relative Risk (RR) adalah:

\[ RR = \frac{\frac{n11}{n1.}}{\frac{n21}{n2.}} \]

Dimana: - \(n11\) adalah jumlah kejadian pada kelompok terpapar, - \(n1.\) adalah total individu dalam kelompok terpapar, - \(n21\) adalah jumlah kejadian pada kelompok tidak terpapar, - \(n2.\) adalah total individu dalam kelompok tidak terpapar.

Interpretasi: - Jika RR > 1, maka kejadian lebih sering terjadi pada kelompok terpapar dibandingkan kelompok tidak terpapar. - Jika RR < 1, maka kejadian lebih jarang terjadi pada kelompok terpapar. - Jika RR = 1, maka tidak ada perbedaan risiko antara kedua kelompok.


Odds Ratio (OR)

Odds Ratio (OR) atau Rasio Odds mengukur perbandingan peluang (odds) terjadinya suatu kejadian antara dua kelompok, biasanya kelompok yang terpapar dan tidak terpapar. OR sering digunakan dalam studi kasus-kontrol, namun juga dapat digunakan dalam studi kohort dan eksperimen.

Rumus perhitungan Odds Ratio (OR) adalah:

\[ OR = \frac{n11 \times n22}{n12 \times n21} \]

Dimana: - \(n11\) adalah jumlah kejadian pada kelompok terpapar, - \(n12\) adalah jumlah non-kejadian pada kelompok terpapar, - \(n21\) adalah jumlah kejadian pada kelompok tidak terpapar, - \(n22\) adalah jumlah non-kejadian pada kelompok tidak terpapar.

Interpretasi: - Jika OR > 1, maka peluang kejadian lebih besar pada kelompok terpapar dibandingkan dengan kelompok tidak terpapar. - Jika OR < 1, maka peluang kejadian lebih kecil pada kelompok terpapar. - Jika OR = 1, maka tidak ada perbedaan peluang kejadian antara kedua kelompok.


Contoh Perhitungan Risk Difference (RD), Relative Risk (RR), dan Odds Ratio (OR) dalam R

Misalkan kita memiliki data mengenai hubungan antara kebiasaan merokok dan penyakit jantung. Berikut adalah data tabel kontingensi dua arah:

Penyakit Jantung (+) Penyakit Jantung (-) Total
Perokok 120 80 200
Bukan Perokok 30 170 200
Total 150 250 400

Dalam contoh ini: - Kelompok 1 adalah perokok, - Kelompok 2 adalah bukan perokok.

Untuk menghitung Risk Difference (RD), Relative Risk (RR), dan Odds Ratio (OR), kita dapat menggunakan rumus yang telah dijelaskan di atas.

# Data Observasi
n11 <- 120  # Penyakit Jantung (+) pada perokok
n12 <- 80   # Penyakit Jantung (-) pada perokok
n21 <- 30   # Penyakit Jantung (+) pada bukan perokok
n22 <- 170  # Penyakit Jantung (-) pada bukan perokok

# Menghitung Risk Difference (RD)
RD <- (n11 / (n11 + n12)) - (n21 / (n21 + n22))

# Menghitung Relative Risk (RR)
RR <- (n11 / (n11 + n12)) / (n21 / (n21 + n22))

# Menghitung Odds Ratio (OR)
OR <- (n11 * n22) / (n12 * n21)

# Menampilkan hasil perhitungan
list(RD = RD, RR = RR, OR = OR)
## $RD
## [1] 0.45
## 
## $RR
## [1] 4
## 
## $OR
## [1] 8.5

Ketiga ukuran asosiasi ini memberikan informasi yang berguna tentang hubungan antar variabel kategori. RD lebih cocok digunakan untuk mengetahui perbedaan risiko absolut, RR memberikan gambaran mengenai risiko relatif, dan OR sering digunakan dalam studi kasus-kontrol untuk melihat hubungan antara faktor risiko dan kejadian. Semua ukuran ini sangat penting dalam penelitian epidemiologi, sosial, dan eksperimen klinis untuk mengukur sejauh mana dua variabel berhubungan.

6.2.3 Uji Independensi

Uji Independensi digunakan untuk menguji apakah dua variabel kategori dalam tabel kontingensi dua arah saling berhubungan atau independen satu sama lain. Uji ini bertujuan untuk melihat apakah terdapat asosiasi yang signifikan antara kedua variabel yang diuji.

Langkah-langkah dalam melakukan Uji Chi-Square untuk Independensi:

  1. Menentukan Hipotesis:
    • Hipotesis Nol (H₀): Variabel-variabel yang diuji independen satu sama lain (tidak ada asosiasi antara variabel).
    • Hipotesis Alternatif (H₁): Variabel-variabel yang diuji berhubungan satu sama lain (ada asosiasi yang signifikan antara variabel).
  2. Menghitung Statistik Uji Chi-Square: Statistik uji Chi-Square dihitung dengan rumus:

\[ \chi^2 = \sum \frac{(O - E)^2}{E} \]

Dimana: - \(O\) adalah frekuensi yang diamati (observed frequency), - \(E\) adalah frekuensi yang diharapkan (expected frequency) berdasarkan hipotesis nol.

  1. Menentukan Nilai P dan Keputusan:
    • Jika nilai p < 0.05, kita menolak hipotesis nol dan menyimpulkan bahwa kedua variabel berhubungan.
    • Jika nilai p ≥ 0.05, kita gagal menolak hipotesis nol dan menyimpulkan bahwa kedua variabel independen.

Contoh Perhitungan Uji Independensi dalam R

Misalkan kita memiliki data mengenai hubungan antara jenis kelamin dan preferensi produk. Berikut adalah data yang digunakan dalam tabel kontingensi dua arah:

Produk A Produk B Total
Laki-laki 80 120 200
Perempuan 100 100 200
Total 180 220 400

Untuk menghitung frekuensi yang diharapkan (E), kita menggunakan rumus:

\[ E_{ij} = \frac{(Total Baris i) \times (Total Kolom j)}{Total Keseluruhan} \]

Frekuensi yang diharapkan untuk setiap sel:

  • Untuk sel \((Laki-laki, Produk A)\):

\[ E = \frac{200 \times 180}{400} = 90 \]

  • Untuk sel \((Laki-laki, Produk B)\):

\[ E = \frac{200 \times 220}{400} = 110 \]

  • Untuk sel \((Perempuan, Produk A)\):

\[ E = \frac{200 \times 180}{400} = 90 \]

  • Untuk sel \((Perempuan, Produk B)\):

\[ E = \frac{200 \times 220}{400} = 110 \]


Menghitung Nilai Statistik Chi-Square (χ²)

Sekarang kita akan menghitung nilai statistik uji Chi-Square menggunakan rumus:

\[ \chi^2 = \sum \frac{(O - E)^2}{E} \]

Dimana \(O\) adalah frekuensi yang diamati dan \(E\) adalah frekuensi yang diharapkan. Menggunakan nilai-nilai yang telah dihitung di atas, kita dapat menghitung kontribusi masing-masing sel.


Perhitungan Chi-Square secara Manual

  • Untuk sel (Laki-laki, Produk A): \[ \chi^2 = \frac{(80 - 90)^2}{90} = \frac{(-10)^2}{90} = \frac{100}{90} = 1.11 \]

  • Untuk sel (Laki-laki, Produk B): \[ \chi^2 = \frac{(120 - 110)^2}{110} = \frac{(10)^2}{110} = \frac{100}{110} = 0.91 \]

  • Untuk sel (Perempuan, Produk A): \[ \chi^2 = \frac{(100 - 90)^2}{90} = \frac{(10)^2}{90} = \frac{100}{90} = 1.11 \]

  • Untuk sel (Perempuan, Produk B): \[ \chi^2 = \frac{(100 - 110)^2}{110} = \frac{(-10)^2}{110} = \frac{100}{110} = 0.91 \]


Menjumlahkan Semua Kontribusi Chi-Square

Jumlahkan nilai-nilai Chi-Square untuk semua sel:

\[ \chi^2 = 1.11 + 0.91 + 1.11 + 0.91 = 4.04 \]


Membandingkan dengan Nilai Kritis

Dengan menggunakan derajat kebebasan (df), kita dapat membandingkan nilai statistik Chi-Square yang dihitung dengan nilai kritis dari tabel Chi-Square. Derajat kebebasan untuk uji independensi dihitung dengan rumus:

\[ df = (r - 1) \times (c - 1) \]

Dimana: - \(r\) adalah jumlah baris, - \(c\) adalah jumlah kolom.

Dalam kasus ini, \(r = 2\) dan \(c = 2\), sehingga derajat kebebasan adalah:

\[ df = (2 - 1) \times (2 - 1) = 1 \]

Dengan df = 1 dan tingkat signifikansi \(\alpha = 0.05\), kita dapat membandingkan nilai statistik Chi-Square yang dihitung dengan nilai kritis dari tabel Chi-Square untuk df = 1. Nilai kritis pada \(\alpha = 0.05\) adalah 3.841.


Keputusan - Jika nilai Chi-Square yang dihitung (4.04) > nilai kritis (3.841), kita menolak hipotesis nol. - Jika nilai Chi-Square yang dihitung ≤ nilai kritis, kita gagal menolak hipotesis nol.

Karena 4.04 > 3.841, kita menolak hipotesis nol dan menyimpulkan bahwa jenis kelamin berhubungan dengan preferensi produk.

Untuk menguji apakah jenis kelamin berhubungan dengan preferensi produk, kita akan menggunakan Uji Chi-Square untuk independensi dengan R.

# Data Observasi
data <- matrix(c(80, 120, 100, 100), nrow = 2, byrow = TRUE)
colnames(data) <- c("Produk A", "Produk B")
rownames(data) <- c("Laki-laki", "Perempuan")

# Uji Chi-Square untuk independensi
chi_square_test <- chisq.test(data)

# Menampilkan hasil uji Chi-Square
chi_square_test
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  data
## X-squared = 3.6465, df = 1, p-value = 0.05619

Partisi Chi-Square Partisi Chi-Square adalah proses untuk menganalisis kontribusi dari setiap sel dalam tabel kontingensi terhadap statistik Chi-Square total. Dengan kata lain, kita dapat melihat seberapa besar pengaruh masing-masing sel dalam tabel kontingensi terhadap hasil uji Chi-Square.

Untuk mengidentifikasi kontribusi setiap sel terhadap nilai statistik Chi-Square, kita dapat menghitung chi-square untuk setiap sel dengan rumus:

\[ \chi^2 = \frac{(O - E)^2}{E} \]

Dimana: - \(O\) adalah frekuensi yang diamati (observed frequency), - \(E\) adalah frekuensi yang diharapkan (expected frequency).

Setelah menghitung statistik Chi-Square untuk setiap sel, kita dapat membandingkan kontribusi masing-masing sel terhadap total statistik Chi-Square. Sel dengan nilai kontribusi yang lebih besar menunjukkan bahwa kategori tersebut memiliki pengaruh yang lebih signifikan terhadap hasil uji.


Perhitungan Partisi Chi-Square

Mari kita lanjutkan dengan perhitungan kontribusi Chi-Square untuk setiap sel pada contoh sebelumnya yang melibatkan jenis kelamin dan preferensi produk.

Berikut adalah data yang digunakan dalam tabel kontingensi dua arah:

Produk A Produk B Total
Laki-laki 80 120 200
Perempuan 100 100 200
Total 180 220 400

Frekuensi yang diharapkan \(E\) untuk setiap sel telah dihitung sebelumnya, yaitu:

  • \(E_{Laki-laki, Produk A} = 90\)
  • \(E_{Laki-laki, Produk B} = 110\)
  • \(E_{Perempuan, Produk A} = 90\)
  • \(E_{Perempuan, Produk B} = 110\)

Dengan menggunakan rumus Chi-Square untuk masing-masing sel:

  • Untuk sel \((Laki-laki, Produk A)\):

\[ \chi^2 = \frac{(80 - 90)^2}{90} = \frac{(-10)^2}{90} = \frac{100}{90} = 1.11 \]

  • Untuk sel \((Laki-laki, Produk B)\):

\[ \chi^2 = \frac{(120 - 110)^2}{110} = \frac{(10)^2}{110} = \frac{100}{110} = 0.91 \]

  • Untuk sel \((Perempuan, Produk A)\):

\[ \chi^2 = \frac{(100 - 90)^2}{90} = \frac{(10)^2}{90} = \frac{100}{90} = 1.11 \]

  • Untuk sel \((Perempuan, Produk B)\):

\[ \chi^2 = \frac{(100 - 110)^2}{110} = \frac{(-10)^2}{110} = \frac{100}{110} = 0.91 \]


Menjumlahkan Partisi Chi-Square

Sekarang, kita akan menghitung jumlah total kontribusi Chi-Square dari semua sel:

\[ \chi^2_{total} = 1.11 + 0.91 + 1.11 + 0.91 = 4.04 \]


Interpretasi Partisi Chi-Square

Dengan menghitung kontribusi Chi-Square untuk setiap sel, kita dapat melihat bahwa sel dengan kontribusi lebih besar akan memiliki pengaruh lebih besar terhadap hasil uji Chi-Square total. Dalam contoh ini, sel \((Laki-laki, Produk A)\) dan \((Perempuan, Produk A)\) memiliki kontribusi yang lebih besar dibandingkan dengan sel \((Laki-laki, Produk B)\) dan \((Perempuan, Produk B)\)

Mari kita hitung frekuensi yang diharapkan (E) untuk setiap sel menggunakan R.

# Data observasi
data <- matrix(c(80, 120, 100, 100), nrow = 2, byrow = TRUE)
colnames(data) <- c("Produk A", "Produk B")
rownames(data) <- c("Laki-laki", "Perempuan")

# Menghitung frekuensi yang diharapkan (E)
expected <- prop.table(data, 2) * colSums(data)
expected
##           Produk A  Produk B
## Laki-laki  80.0000  98.18182
## Perempuan 122.2222 100.00000
# Menghitung kontribusi Chi-Square untuk setiap sel
contribution <- (data - expected)^2 / expected
contribution
##           Produk A Produk B
## Laki-laki 0.000000 4.848485
## Perempuan 4.040404 0.000000
# Menjumlahkan kontribusi Chi-Square untuk setiap sel
chi_square_total <- sum(contribution)
chi_square_total
## [1] 8.888889

Interpretasi Partisi Chi-Square

Kontribusi setiap sel dapat menunjukkan seberapa besar pengaruh sel tersebut terhadap hasil uji Chi-Square total. Jika suatu sel memiliki kontribusi yang lebih besar, itu menunjukkan bahwa kategori tersebut lebih signifikan dalam uji Chi-Square.

Uji Likelihood Ratio (G²)

Uji Likelihood Ratio (G²) adalah alternatif dari Uji Chi-Square yang digunakan untuk menguji independensi antara dua variabel kategori dalam tabel kontingensi. Uji ini didasarkan pada perbandingan antara likelihood dari data yang diamati dan likelihood dari data yang diharapkan (jika hipotesis nol berlaku). Uji Likelihood Ratio sering digunakan dalam analisis data kategori karena memiliki beberapa keuntungan, terutama ketika ukuran sampel kecil atau ketika ada nilai-nilai yang sangat kecil dalam tabel.


Langkah-langkah dalam Uji Likelihood Ratio (G²):

  1. Menentukan Hipotesis:
    • Hipotesis Nol (H₀): Variabel-variabel yang diuji independen satu sama lain (tidak ada asosiasi antara variabel).
    • Hipotesis Alternatif (H₁): Variabel-variabel yang diuji berhubungan satu sama lain (ada asosiasi yang signifikan antara variabel).
  2. Menghitung Likelihood yang Diharapkan dan Diamati:
    • Likelihood yang diamati (L₀) dihitung berdasarkan data yang diamati.
    • Likelihood yang diharapkan (L₁) dihitung berdasarkan frekuensi yang diharapkan jika hipotesis nol berlaku.
  3. Menghitung Statistik Uji Likelihood Ratio (G²): Rumus untuk Uji Likelihood Ratio (G²) adalah:

\[ G^2 = 2 \sum O_{ij} \ln \left( \frac{O_{ij}}{E_{ij}} \right) \]

Dimana: - \(O_{ij}\) adalah frekuensi yang diamati, - \(E_{ij}\) adalah frekuensi yang diharapkan.

  1. Menentukan Nilai P dan Keputusan:
    • Jika nilai G² lebih besar dari nilai kritis distribusi Chi-Square dengan derajat kebebasan \(df\) pada tingkat signifikansi \(\alpha\), maka kita menolak hipotesis nol dan menyimpulkan bahwa kedua variabel berhubungan.
    • Jika nilai G² lebih kecil dari nilai kritis, kita gagal menolak hipotesis nol dan menyimpulkan bahwa kedua variabel independen.

Contoh Perhitungan Uji Likelihood Ratio (G²) dalam R

Misalkan kita memiliki data yang sama dengan contoh sebelumnya mengenai jenis kelamin dan preferensi produk:

Produk A Produk B Total
Laki-laki 80 120 200
Perempuan 100 100 200
Total 180 220 400

Untuk menghitung , kita perlu menghitung likelihood yang diamati dan likelihood yang diharapkan, dan kemudian menghitung statistik .

# Data Observasi
data <- matrix(c(80, 120, 100, 100), nrow = 2, byrow = TRUE)
colnames(data) <- c("Produk A", "Produk B")
rownames(data) <- c("Laki-laki", "Perempuan")

# Menghitung frekuensi yang diharapkan (E)
expected <- prop.table(data, 2) * colSums(data)

# Menghitung statistik Likelihood Ratio (G²)
g2_statistic <- 2 * sum(data * log(data / expected), na.rm = TRUE)
g2_statistic
## [1] 8.026828

Interpretasi Uji Likelihood Ratio (G²)

  • Jika nilai G² > nilai kritis (berdasarkan distribusi Chi-Square dengan derajat kebebasan yang sesuai), kita menolak hipotesis nol dan menyimpulkan bahwa ada asosiasi signifikan antara variabel yang diuji.

    Jika nilai G² ≤ nilai kritis, kita gagal menolak hipotesis nol dan menyimpulkan bahwa variabel tersebut independen.

Uji Exact Fisher

Uji Exact Fisher adalah metode statistik yang digunakan untuk menguji hubungan antara dua variabel kategori dalam tabel kontingensi 2x2, terutama ketika ukuran sampel kecil atau ketika frekuensi pada beberapa sel sangat kecil (misalnya, kurang dari 5). Uji ini digunakan untuk memeriksa apakah dua variabel kategori independen satu sama lain, dengan asumsi bahwa distribusi data mengikuti distribusi hipergeometrik.

Uji Fisher sangat berguna karena memberikan hasil yang tepat (exact) dan tidak bergantung pada ukuran sampel atau distribusi data. Uji ini sangat sering digunakan untuk data yang tidak memenuhi asumsi uji Chi-Square, khususnya pada tabel yang memiliki nilai-nilai kecil.

Langkah-langkah Uji Exact Fisher:

  1. Menentukan Hipotesis:

    • Hipotesis Nol (H₀): Tidak ada asosiasi antara dua variabel kategori (variabel-variabel yang diuji adalah independen).
    • Hipotesis Alternatif (H₁): Ada asosiasi antara dua variabel kategori (variabel-variabel yang diuji berhubungan).
  2. Menghitung Nilai P: Uji Fisher menghitung nilai p yang tepat berdasarkan distribusi hipergeometrik, dan mengukur sejauh mana data yang diamati berbeda dari distribusi yang diharapkan berdasarkan hipotesis nol.

  3. Keputusan:

    • Jika nilai p < 0.05, kita menolak hipotesis nol dan menyimpulkan bahwa ada asosiasi signifikan antara kedua variabel.
    • Jika nilai p ≥ 0.05, kita gagal menolak hipotesis nol dan menyimpulkan bahwa tidak ada bukti yang cukup untuk menyatakan bahwa kedua variabel berhubungan.

Contoh Perhitungan Uji Exact Fisher dalam R

Misalkan kita memiliki data mengenai hubungan antara jenis kelamin dan preferensi produk (Produk A dan Produk B), dengan data sebagai berikut:

Produk A Produk B Total
Laki-laki 2 8 10
Perempuan 1 9 10
Total 3 17 20

Untuk menguji apakah ada asosiasi antara jenis kelamin dan preferensi produk, kita dapat menggunakan Uji Exact Fisher dengan data di atas.

# Data Observasi
data <- matrix(c(2, 8, 1, 9), nrow = 2, byrow = TRUE)
colnames(data) <- c("Produk A", "Produk B")
rownames(data) <- c("Laki-laki", "Perempuan")

# Uji Exact Fisher
fisher_test <- fisher.test(data)

# Menampilkan hasil uji Fisher
fisher_test
## 
##  Fisher's Exact Test for Count Data
## 
## data:  data
## p-value = 1
## alternative hypothesis: true odds ratio is not equal to 1
## 95 percent confidence interval:
##    0.09511362 147.08910544
## sample estimates:
## odds ratio 
##   2.162188

Interpretasi Uji Exact Fisher

  • Jika nilai p < 0.05, kita menolak hipotesis nol dan menyimpulkan bahwa ada asosiasi signifikan antara jenis kelamin dan preferensi produk.

  • Jika nilai p ≥ 0.05, kita gagal menolak hipotesis nol, yang berarti tidak ada bukti yang cukup untuk menyatakan bahwa jenis kelamin dan preferensi produk berhubungan.

6.3 Analisis Residual dalam Tabel Kontingensi

Analisis Residual digunakan untuk memeriksa apakah ada pola yang tidak terduga dalam data tabel kontingensi. Residual mengukur perbedaan antara frekuensi yang diamati (O) dan frekuensi yang diharapkan (E) dalam tabel. Dengan menganalisis residual, kita dapat mengidentifikasi sel-sel dalam tabel yang memberikan kontribusi signifikan terhadap statistik uji (seperti Chi-Square) dan melihat apakah ada pola ketergantungan yang tidak terlihat sebelumnya.

6.3.1 Residual Standar

Residual standar mengukur perbedaan relatif antara frekuensi yang diamati dan frekuensi yang diharapkan, dan dihitung dengan rumus:

\[ R_{ij} = \frac{O_{ij} - E_{ij}}{\sqrt{E_{ij}}} \]

Dimana: - \(R_{ij}\) adalah residual standar untuk sel \((i, j)\), - \(O_{ij}\) adalah frekuensi yang diamati pada sel \((i, j)\), - \(E_{ij}\) adalah frekuensi yang diharapkan pada sel \((i, j)\).

Jika nilai residual standar lebih besar dari 2 atau lebih kecil dari -2, itu menunjukkan bahwa sel tersebut memberikan kontribusi signifikan terhadap statistik uji dan terdapat perbedaan yang signifikan antara frekuensi yang diamati dan yang diharapkan.

6.3.2 Menghitung Residual Standar dalam R

Misalkan kita menggunakan data yang sama untuk contoh yang telah dibahas sebelumnya mengenai jenis kelamin dan preferensi produk:

Produk A Produk B Total
Laki-laki 80 120 200
Perempuan 100 100 200
Total 180 220 400

Kita akan menghitung residual standar untuk setiap sel dalam tabel kontingensi ini.

# Data Observasi
data <- matrix(c(80, 120, 100, 100), nrow = 2, byrow = TRUE)
colnames(data) <- c("Produk A", "Produk B")
rownames(data) <- c("Laki-laki", "Perempuan")

# Menghitung frekuensi yang diharapkan (E)
expected <- prop.table(data, 2) * colSums(data)

# Menghitung residual standar
residuals <- (data - expected) / sqrt(expected)

# Menampilkan residual standar
residuals
##            Produk A Produk B
## Laki-laki  0.000000 2.201928
## Perempuan -2.010076 0.000000

Interpretasi Residual Standar

Residual standar digunakan untuk mengevaluasi kontribusi setiap sel dalam tabel kontingensi terhadap statistik uji. Ini memberikan informasi yang lebih kuat tentang seberapa besar perbedaan antara frekuensi yang diamati dan frekuensi yang diharapkan dalam satuan deviasi standar.

Interpretasi residual standar: - Residual standar lebih besar dari 2 atau lebih kecil dari -2: Menunjukkan bahwa sel tersebut memberikan kontribusi yang signifikan terhadap statistik uji Chi-Square, yang berarti ada perbedaan signifikan antara frekuensi yang diamati dan yang diharapkan. Ini mengindikasikan adanya asosiasi atau ketergantungan yang kuat antara variabel dalam sel tersebut. - Residual standar mendekati 0: Menunjukkan bahwa frekuensi yang diamati dan yang diharapkan cukup serupa, dan sel tersebut tidak memberikan kontribusi signifikan terhadap statistik uji.

Contoh: - Residual standar > 2: Menandakan bahwa sel tersebut lebih sering muncul daripada yang diharapkan. - Residual standar < -2: Menandakan bahwa sel tersebut lebih jarang muncul daripada yang diharapkan.


6.3.2 Residual Biasa vs. Residual Standar

Residual Biasa dan Residual Standar adalah dua jenis residual yang digunakan untuk mengukur perbedaan antara frekuensi yang diamati dan frekuensi yang diharapkan dalam tabel kontingensi. Kedua jenis residual ini memberikan informasi yang berbeda, dan keduanya berguna dalam analisis tabel kontingensi.

Residual Biasa

Residual biasa mengukur selisih antara frekuensi yang diamati dan yang diharapkan:

\[ R_{ij} = O_{ij} - E_{ij} \]

Dimana: - \(O_{ij}\) adalah frekuensi yang diamati pada sel \((i, j)\), - \(E_{ij}\) adalah frekuensi yang diharapkan pada sel \((i, j)\).

Residual biasa memberikan selisih absolut antara yang diamati dan yang diharapkan.

Residual Standar

Residual standar memberikan perbandingan antara residual biasa dan penyimpangan yang diharapkan dalam satuan deviasi standar:

\[ R_{ij} = \frac{O_{ij} - E_{ij}}{\sqrt{E_{ij}}} \]

Dimana: - \(R_{ij}\) adalah residual standar untuk sel \((i, j)\), - \(O_{ij}\) adalah frekuensi yang diamati, - \(E_{ij}\) adalah frekuensi yang diharapkan.

Residual standar memungkinkan kita untuk membandingkan kontribusi antar sel meskipun ukuran sel berbeda. Ini memberikan ukuran yang lebih standarisasi daripada residual biasa.

Perbandingan:

  • Residual Biasa hanya menunjukkan selisih langsung antara frekuensi yang diamati dan yang diharapkan.
  • Residual Standar memberikan gambaran yang lebih terukur dan relatif, karena mempertimbangkan deviasi standar dari frekuensi yang diharapkan.

Perhitungan Residual Biasa dan Standar dalam R

Misalkan kita memiliki data yang sama mengenai hubungan antara jenis kelamin dan preferensi produk:

Produk A Produk B Total
Laki-laki 80 120 200
Perempuan 100 100 200
Total 180 220 400

Frekuensi yang diharapkan untuk setiap sel telah dihitung sebelumnya.

# Menghitung residual biasa (O - E)
residual_biasa <- data - expected

# Menghitung residual standar (O - E) / sqrt(E)
residual_standar <- (data - expected) / sqrt(expected)

# Menampilkan hasil residual
residual_biasa
##            Produk A Produk B
## Laki-laki   0.00000 21.81818
## Perempuan -22.22222  0.00000
residual_standar
##            Produk A Produk B
## Laki-laki  0.000000 2.201928
## Perempuan -2.010076 0.000000

7 Tabel Kontingensi Tiga Arah

Tabel Kontingensi Tiga Arah adalah jenis tabel yang digunakan untuk menganalisis hubungan antara tiga variabel kategori. Tabel ini memperluas konsep tabel kontingensi dua arah yang digunakan untuk menguji hubungan antara dua variabel kategori, tetapi dalam hal ini, kita menganalisis hubungan antara tiga variabel kategori. Tabel kontingensi tiga arah memungkinkan kita untuk mengamati hubungan antara variabel-variabel tersebut secara bersamaan.

Pada tabel kontingensi tiga arah, kita dapat menghitung tabel parsial dan tabel marginal untuk masing-masing kombinasi dari ketiga variabel tersebut.

7.1 Tabel Parsial dan Marginal

7.1.1 Tabel Marginal

Tabel marginal adalah tabel yang menunjukkan distribusi frekuensi total untuk satu variabel tanpa mempertimbangkan kategori variabel lainnya. Tabel ini memberikan informasi tentang frekuensi total untuk setiap kategori dalam satu variabel.

Contoh: Misalkan kita memiliki tabel kontingensi tiga arah yang melibatkan tiga variabel: Jenis Kelamin, Preferensi Produk, dan Usia. Tabel marginal untuk variabel Jenis Kelamin akan menunjukkan distribusi frekuensi total untuk Laki-laki dan Perempuan tanpa mempertimbangkan kategori Preferensi Produk dan Usia.

Tabel marginal dihitung dengan menjumlahkan seluruh baris atau kolom sesuai dengan kategori yang ada.

7.1.2 Tabel Parsial

Tabel parsial adalah tabel yang menunjukkan distribusi frekuensi untuk satu variabel dengan mengontrol variabel lainnya. Tabel parsial ini digunakan untuk menganalisis hubungan antara dua variabel sambil mengontrol satu variabel lainnya.

Contoh: Jika kita ingin melihat hubungan antara Jenis Kelamin dan Preferensi Produk, tetapi mengontrol Usia, kita dapat menghitung tabel parsial untuk kategori Usia tertentu (misalnya Usia < 30 atau Usia ≥ 30).

7.1.3 Contoh Perhitungan Tabel Parsial dan Marginal dalam R

Misalkan kita memiliki data berikut mengenai Jenis Kelamin, Preferensi Produk, dan Usia dalam tabel kontingensi tiga arah:

Jenis Kelamin Produk A Produk B Usia < 30 Usia ≥ 30 Total
Laki-laki 50 30 40 40 80
Perempuan 70 50 60 60 120
Total 120 80 100 100 200

Untuk menghitung tabel marginal dan tabel parsial, kita akan menjumlahkan baris atau kolom sesuai kebutuhan.

# Data observasi
data <- array(c(50, 30, 70, 50, 40, 40, 60, 60), dim = c(2, 2, 2))
dimnames(data) <- list("Jenis Kelamin" = c("Laki-laki", "Perempuan"),
                       "Produk" = c("Produk A", "Produk B"),
                       "Usia" = c("Usia < 30", "Usia ≥ 30"))

# Tabel marginal (jumlah seluruh kategori untuk setiap variabel)
marginal_jenis_kelamin <- margin.table(data, 1)  # Marginal berdasarkan jenis kelamin
marginal_produk <- margin.table(data, 2)  # Marginal berdasarkan produk
marginal_usia <- margin.table(data, 3)  # Marginal berdasarkan usia

# Tabel parsial (menghitung distribusi frekuensi untuk kategori tertentu)
parsial_usia30 <- data[,,1]  # Tabel parsial untuk Usia < 30
parsial_usia30
##              Produk
## Jenis Kelamin Produk A Produk B
##     Laki-laki       50       70
##     Perempuan       30       50
parsial_usia30plus <- data[,,2]  # Tabel parsial untuk Usia ≥ 30
parsial_usia30plus
##              Produk
## Jenis Kelamin Produk A Produk B
##     Laki-laki       40       60
##     Perempuan       40       60
# Menampilkan hasil
list(
  "Tabel Marginal Jenis Kelamin" = marginal_jenis_kelamin,
  "Tabel Marginal Produk" = marginal_produk,
  "Tabel Marginal Usia" = marginal_usia,
  "Tabel Parsial Usia < 30" = parsial_usia30,
  "Tabel Parsial Usia ≥ 30" = parsial_usia30plus
)
## $`Tabel Marginal Jenis Kelamin`
## Jenis Kelamin
## Laki-laki Perempuan 
##       220       180 
## 
## $`Tabel Marginal Produk`
## Produk
## Produk A Produk B 
##      160      240 
## 
## $`Tabel Marginal Usia`
## Usia
## Usia < 30 Usia ≥ 30 
##       200       200 
## 
## $`Tabel Parsial Usia < 30`
##              Produk
## Jenis Kelamin Produk A Produk B
##     Laki-laki       50       70
##     Perempuan       30       50
## 
## $`Tabel Parsial Usia ≥ 30`
##              Produk
## Jenis Kelamin Produk A Produk B
##     Laki-laki       40       60
##     Perempuan       40       60

7.1.4 Interpretasi Tabel Marginal dan Parsial

  • Tabel Marginal memberikan informasi tentang distribusi frekuensi untuk satu variabel tanpa mempertimbangkan kategori variabel lainnya. Ini berguna untuk melihat proporsi total untuk masing-masing kategori.

  • Tabel Parsial memungkinkan kita untuk menganalisis hubungan antara dua variabel sambil mengontrol variabel lainnya. Ini membantu untuk memahami pengaruh satu variabel terhadap hubungan dua variabel lainnya.

7.2 Distribusi Peluang

Distribusi peluang adalah cara untuk menghitung kemungkinan terjadinya suatu kejadian dalam eksperimen acak. Dalam analisis tabel kontingensi tiga arah, distribusi peluang digunakan untuk memahami hubungan antara berbagai kategori variabel. Dua konsep penting dalam distribusi peluang adalah Peluang Bersama (Joint Probability) dan Peluang Marginal (Marginal Probability).


Peluang Bersama (Joint Probability)

Peluang Bersama (Joint Probability) mengukur kemungkinan dua variabel kategori terjadi bersamaan. Dalam tabel kontingensi tiga arah, peluang bersama dihitung dengan menghitung frekuensi kejadian yang bersamaan dari dua atau lebih variabel kategori.

Secara matematis, Peluang Bersama (Joint Probability) untuk dua variabel, katakanlah Variabel A dan Variabel B, dapat dihitung dengan rumus:

\[ P(A, B) = \frac{n_{A, B}}{N} \]

Dimana: - \(n_{A, B}\) adalah jumlah kejadian yang terjadi bersamaan untuk kategori A dan B, - \(N\) adalah total jumlah kejadian dalam populasi.

Contoh:

Misalnya, kita ingin menghitung peluang bersama antara Jenis Kelamin (Laki-laki, Perempuan) dan Preferensi Produk (Produk A, Produk B).


Peluang Marginal (Marginal Probability)

Peluang Marginal (Marginal Probability) mengukur kemungkinan terjadinya satu variabel kategori tanpa mempertimbangkan variabel lainnya. Ini dihitung dengan menjumlahkan Peluang Bersama untuk kategori tertentu dalam satu variabel.

Secara matematis, Peluang Marginal untuk variabel A dapat dihitung dengan rumus:

\[ P(A) = \frac{n_{A, *}}{N} \]

Dimana: - \(n_{A, *}\) adalah jumlah kejadian untuk kategori A tanpa memperhatikan kategori variabel lainnya, - \(N\) adalah total jumlah kejadian dalam populasi.

Contoh:

Misalnya, kita ingin menghitung peluang marginal untuk Jenis Kelamin (Laki-laki, Perempuan), tanpa mempertimbangkan Preferensi Produk atau Usia.


Menghitung Peluang Bersama dan Marginal dalam R

Misalkan kita memiliki data berikut mengenai Jenis Kelamin, Preferensi Produk, dan Usia dalam tabel kontingensi tiga arah:

Jenis Kelamin Produk A Produk B Usia < 30 Usia ≥ 30 Total
Laki-laki 50 30 40 40 80
Perempuan 70 50 60 60 120
Total 120 80 100 100 200

Untuk menghitung Peluang Bersama dan Peluang Marginal, kita dapat menggunakan fungsi distribusi peluang di R.

# Data observasi
data <- array(c(50, 30, 70, 50, 40, 40, 60, 60), dim = c(2, 2, 2))
dimnames(data) <- list("Jenis Kelamin" = c("Laki-laki", "Perempuan"),
                       "Produk" = c("Produk A", "Produk B"),
                       "Usia" = c("Usia < 30", "Usia ≥ 30"))

# Menghitung peluang bersama (joint probability)
joint_probability <- data / sum(data)

# Menghitung peluang marginal (marginal probability) untuk masing-masing variabel
marginal_jenis_kelamin <- margin.table(data, 1) / sum(data)
marginal_produk <- margin.table(data, 2) / sum(data)
marginal_usia <- margin.table(data, 3) / sum(data)

# Menampilkan hasil peluang bersama dan marginal
list(
  "Peluang Bersama" = joint_probability,
  "Peluang Marginal Jenis Kelamin" = marginal_jenis_kelamin,
  "Peluang Marginal Produk" = marginal_produk,
  "Peluang Marginal Usia" = marginal_usia
)
## $`Peluang Bersama`
## , , Usia = Usia < 30
## 
##              Produk
## Jenis Kelamin Produk A Produk B
##     Laki-laki    0.125    0.175
##     Perempuan    0.075    0.125
## 
## , , Usia = Usia ≥ 30
## 
##              Produk
## Jenis Kelamin Produk A Produk B
##     Laki-laki      0.1     0.15
##     Perempuan      0.1     0.15
## 
## 
## $`Peluang Marginal Jenis Kelamin`
## Jenis Kelamin
## Laki-laki Perempuan 
##      0.55      0.45 
## 
## $`Peluang Marginal Produk`
## Produk
## Produk A Produk B 
##      0.4      0.6 
## 
## $`Peluang Marginal Usia`
## Usia
## Usia < 30 Usia ≥ 30 
##       0.5       0.5

Peluang Bersyarat (Conditional Probability)

Peluang Bersyarat (Conditional Probability) adalah probabilitas terjadinya suatu kejadian A dengan syarat bahwa kejadian B telah terjadi. Peluang bersyarat digunakan untuk mengukur seberapa besar kemungkinan terjadinya suatu peristiwa, mengingat peristiwa lain sudah terjadi.

Secara matematis, peluang bersyarat untuk kejadian A yang terjadi dengan syarat kejadian B adalah:

\[ P(A | B) = \frac{P(A \cap B)}{P(B)} \]

Dimana: - \(P(A | B)\) adalah peluang terjadinya A dengan syarat B, - \(P(A \cap B)\) adalah peluang terjadinya A dan B (peluang bersama), - \(P(B)\) adalah peluang terjadinya B.

Peluang bersyarat memungkinkan kita untuk memperkirakan kemungkinan suatu kejadian setelah mempertimbangkan kejadian lain yang sudah terjadi. Ini sangat berguna dalam analisis hubungan antar variabel kategori dalam tabel kontingensi.


Menghitung Peluang Bersyarat dalam Tabel Kontingensi

Misalkan kita memiliki data mengenai Jenis Kelamin dan Preferensi Produk, dan kita ingin menghitung peluang bersyarat untuk memilih Produk A, mengingat bahwa seseorang adalah Laki-laki. Ini dapat dihitung dengan rumus peluang bersyarat:

\[ P(Produk A | Laki-laki) = \frac{P(Laki-laki \cap Produk A)}{P(Laki-laki)} \]

Dimana: - \(P(Laki-laki \cap Produk A)\) adalah peluang bersama memilih Produk A dan Laki-laki, - \(P(Laki-laki)\) adalah peluang terjadinya Laki-laki (marginal).

Contoh data yang diberikan:

Produk A Produk B Total
Laki-laki 80 120 200
Perempuan 100 100 200
Total 180 220 400

Perhitungan Peluang Bersyarat dalam R

Untuk menghitung peluang bersyarat P(Produk A | Laki-laki) dalam contoh di atas, kita dapat menggunakan data yang ada dan rumus di atas.

# Data Observasi
data <- matrix(c(80, 120, 100, 100), nrow = 2, byrow = TRUE)
colnames(data) <- c("Produk A", "Produk B")
rownames(data) <- c("Laki-laki", "Perempuan")

# Menghitung peluang bersama P(Laki-laki dan Produk A)
P_Laki_Laki_Produk_A <- data[1,1] / sum(data)

# Menghitung peluang marginal P(Laki-laki)
P_Laki_Laki <- sum(data[1,]) / sum(data)

# Menghitung peluang bersyarat P(Produk A | Laki-laki)
P_Produk_A_given_Laki_Laki <- P_Laki_Laki_Produk_A / P_Laki_Laki

# Menampilkan hasil
P_Produk_A_given_Laki_Laki
## [1] 0.4

7.3 Tabel Peluang Bersyarat

Tabel Peluang Bersyarat digunakan untuk menggambarkan hubungan antara dua variabel kategori, dengan mempertimbangkan satu variabel yang mengontrol variabel lainnya. Tabel ini memberikan distribusi peluang terjadinya suatu kejadian pada satu variabel, mengingat bahwa kejadian pada variabel lain telah diketahui.

Tabel peluang bersyarat memungkinkan kita untuk menganalisis kemungkinan suatu kejadian terjadi dengan kondisi tertentu. Dalam tabel kontingensi tiga arah, kita dapat menghitung peluang bersyarat untuk setiap kombinasi kategori, yang memberikan wawasan lebih lanjut tentang hubungan antar variabel.


Membuat Tabel Peluang Bersyarat

Untuk membuat tabel peluang bersyarat, kita harus terlebih dahulu menghitung frekuensi yang diamati dan frekuensi yang diharapkan untuk setiap kombinasi kategori dalam tabel kontingensi. Kemudian, kita dapat menghitung peluang bersyarat untuk setiap kombinasi kategori.

Langkah-langkah:

  1. Menghitung frekuensi yang diamati (O): Ini adalah jumlah kejadian yang terjadi untuk kombinasi kategori variabel yang dipilih.
  2. Menghitung frekuensi yang diharapkan (E): Frekuensi yang diharapkan dihitung berdasarkan hipotesis nol, yaitu asumi bahwa variabel-variabel tersebut independen.
  3. Menghitung peluang bersyarat: Peluang bersyarat untuk kombinasi kategori dihitung dengan rumus:

\[ P(A|B) = \frac{P(A \cap B)}{P(B)} \]

Dimana: - \(P(A|B)\) adalah peluang terjadinya kejadian A dengan syarat bahwa kejadian B telah terjadi, - \(P(A \cap B)\) adalah peluang bersama untuk A dan B, - \(P(B)\) adalah peluang untuk kejadian B.


Contoh Perhitungan Tabel Peluang Bersyarat

Misalkan kita memiliki data mengenai Jenis Kelamin, Preferensi Produk, dan Usia, seperti pada tabel berikut:

Jenis Kelamin Produk A Produk B Usia < 30 Usia ≥ 30 Total
Laki-laki 50 30 40 40 80
Perempuan 70 50 60 60 120
Total 120 80 100 100 200

Untuk menghitung Peluang Bersyarat, misalnya kita ingin mengetahui peluang memilih Produk A dengan syarat Usia < 30.

Menghitung Peluang Bersyarat:

\[ P(Produk A | Usia < 30) = \frac{P(Produk A \cap Usia < 30)}{P(Usia < 30)} \]

Dengan data di atas, kita dapat menghitung Peluang Bersyarat menggunakan rumus tersebut.

7.4 Ukuran Asosiasi

Risk Difference (RD)

Risk Difference (RD) atau Perbedaan Risiko adalah ukuran yang digunakan untuk mengukur perbedaan risiko absolut antara dua kelompok dalam hal kejadian suatu peristiwa. Dalam konteks tabel kontingensi tiga arah, RD digunakan untuk mengetahui apakah ada perbedaan risiko yang signifikan antara dua kelompok berdasarkan kategori variabel.

Rumus Perhitungan RD:

\[ RD = \left( \frac{n11}{n1.} \right) - \left( \frac{n21}{n2.} \right) \]

Dimana: - \(n11\) adalah jumlah kejadian dalam kelompok 1 (misalnya, kelompok yang terpapar), - \(n1.\) adalah total jumlah individu dalam kelompok 1, - \(n21\) adalah jumlah kejadian dalam kelompok 2 (misalnya, kelompok yang tidak terpapar), - \(n2.\) adalah total jumlah individu dalam kelompok 2.

Interpretasi:

  • RD > 0: Kelompok pertama (terpapar) memiliki risiko lebih tinggi.
  • RD < 0: Kelompok pertama (terpapar) memiliki risiko lebih rendah.
  • RD = 0: Tidak ada perbedaan risiko antara kedua kelompok.

Contoh Perhitungan RD:

Misalkan kita memiliki data tentang jenis kelamin dan preferensi produk, dengan data sebagai berikut:

Jenis Kelamin Produk A Produk B Total
Laki-laki 80 120 200
Perempuan 100 100 200
Total 180 220 400

Dengan menggunakan rumus di atas, kita dapat menghitung Risk Difference (RD) untuk mengetahui perbedaan risiko memilih Produk A antara Laki-laki dan Perempuan.

# Data observasi
data <- matrix(c(80, 120, 100, 100), nrow = 2, byrow = TRUE)
colnames(data) <- c("Produk A", "Produk B")
rownames(data) <- c("Laki-laki", "Perempuan")

# Menghitung Risk Difference (RD)
RD <- (data[1, 1] / sum(data[1,])) - (data[2, 1] / sum(data[2,]))

# Menampilkan hasil RD
RD
## [1] -0.1

7.4.2 Relative Risk (RR)

Relative Risk (RR) atau Risiko Relatif adalah ukuran yang digunakan untuk membandingkan risiko kejadian antara dua kelompok. RR mengukur seberapa besar kemungkinan suatu peristiwa terjadi pada kelompok yang terpapar dibandingkan dengan kelompok yang tidak terpapar.

RR sering digunakan dalam penelitian epidemiologi untuk mengevaluasi hubungan antara faktor risiko dan kejadian penyakit. Jika RR > 1, ini menunjukkan bahwa kelompok terpapar lebih berisiko dibandingkan dengan kelompok tidak terpapar. Sebaliknya, jika RR < 1, berarti kelompok terpapar memiliki risiko lebih rendah dibandingkan dengan kelompok yang tidak terpapar. Jika RR = 1, ini menunjukkan bahwa kedua kelompok memiliki risiko yang sama.

Rumus Perhitungan RR:

\[ RR = \frac{\frac{n11}{n1.}}{\frac{n21}{n2.}} \]

Dimana: - \(n11\) adalah jumlah kejadian dalam kelompok terpapar (misalnya Produk A di Laki-laki), - \(n1.\) adalah total jumlah individu dalam kelompok terpapar, - \(n21\) adalah jumlah kejadian dalam kelompok tidak terpapar (misalnya Produk A di Perempuan), - \(n2.\) adalah total jumlah individu dalam kelompok tidak terpapar.

Interpretasi:

  • RR > 1: Kelompok terpapar lebih berisiko dibandingkan dengan kelompok tidak terpapar.
  • RR < 1: Kelompok terpapar memiliki risiko lebih rendah dibandingkan dengan kelompok tidak terpapar.
  • RR = 1: Tidak ada perbedaan risiko antara kedua kelompok.

Contoh Perhitungan RR:

Misalkan kita memiliki data yang sama dengan contoh sebelumnya mengenai jenis kelamin dan preferensi produk, seperti berikut:

Jenis Kelamin Produk A Produk B Total
Laki-laki 80 120 200
Perempuan 100 100 200
Total 180 220 400

Untuk menghitung Relative Risk (RR), kita dapat menggunakan rumus di atas untuk menghitung rasio risiko memilih Produk A antara Laki-laki dan Perempuan.

# Data observasi
data <- matrix(c(80, 120, 100, 100), nrow = 2, byrow = TRUE)
colnames(data) <- c("Produk A", "Produk B")
rownames(data) <- c("Laki-laki", "Perempuan")

# Menghitung Relative Risk (RR)
RR <- (data[1, 1] / sum(data[1,])) / (data[2, 1] / sum(data[2,]))

# Menampilkan hasil RR
RR
## [1] 0.8

7.4.3 Odds Ratio (OR)

Odds Ratio (OR) atau Rasio Odds adalah ukuran yang digunakan untuk membandingkan peluang terjadinya suatu kejadian antara dua kelompok. OR sering digunakan dalam studi kasus-kontrol, namun juga dapat digunakan dalam studi kohort dan eksperimen untuk mengukur perbandingan peluang antara dua kelompok dalam hal kejadian tertentu.

OR mengukur perbandingan antara peluang kejadian (odds) dalam kelompok yang terpapar dengan kelompok yang tidak terpapar. Ini memberikan gambaran tentang seberapa besar peluang kejadian terjadi pada satu kelompok dibandingkan dengan kelompok lainnya.

Rumus Perhitungan OR:

\[ OR = \frac{n11 \times n22}{n12 \times n21} \]

Dimana: - \(n11\) adalah jumlah kejadian pada kelompok terpapar, - \(n12\) adalah jumlah non-kejadian pada kelompok terpapar, - \(n21\) adalah jumlah kejadian pada kelompok tidak terpapar, - \(n22\) adalah jumlah non-kejadian pada kelompok tidak terpapar.

Interpretasi:

  • OR > 1: Peluang kejadian lebih besar pada kelompok terpapar dibandingkan dengan kelompok tidak terpapar.
  • OR < 1: Peluang kejadian lebih kecil pada kelompok terpapar dibandingkan dengan kelompok tidak terpapar.
  • OR = 1: Tidak ada perbedaan peluang kejadian antara kedua kelompok.

Contoh Perhitungan OR:

Misalkan kita memiliki data yang sama dengan contoh sebelumnya mengenai jenis kelamin dan preferensi produk, seperti berikut:

Jenis Kelamin Produk A Produk B Total
Laki-laki 80 120 200
Perempuan 100 100 200
Total 180 220 400

Untuk menghitung Odds Ratio (OR), kita dapat menggunakan rumus di atas untuk membandingkan peluang memilih Produk A antara Laki-laki dan Perempuan.

# Data observasi
data <- matrix(c(80, 120, 100, 100), nrow = 2, byrow = TRUE)
colnames(data) <- c("Produk A", "Produk B")
rownames(data) <- c("Laki-laki", "Perempuan")

# Menghitung Odds Ratio (OR)
OR <- (data[1, 1] * data[2, 2]) / (data[1, 2] * data[2, 1])

# Menampilkan hasil OR
OR
## [1] 0.6666667

7.5 Conditional Independence

Conditional Independence (Kemandirian Bersyarat) adalah konsep yang digunakan untuk menganalisis hubungan antara dua variabel kategori dalam tabel kontingensi, dengan mengontrol variabel lain. Dalam istilah yang lebih sederhana, dua variabel dikatakan independen satu sama lain jika hubungan antara keduanya hilang atau menjadi tidak signifikan setelah mempertimbangkan atau mengontrol variabel ketiga.

Definisi:

Dua variabel \(A\) dan \(B\) dikatakan independen secara bersyarat terhadap variabel ketiga \(C\) jika kondisi berikut berlaku:

\[ P(A, B | C) = P(A | C) \times P(B | C) \]

Artinya, setelah mengontrol variabel \(C\), informasi tentang \(A\) tidak mempengaruhi informasi tentang \(B\), dan sebaliknya.


7.5.1 Menguji Kemandirian Bersyarat

Untuk menguji conditional independence antara dua variabel \(A\) dan \(B\) setelah mengontrol variabel \(C\), kita dapat menggunakan uji Chi-Square atau Uji Fisher yang memeriksa apakah distribusi antara dua variabel berubah secara signifikan setelah mempertimbangkan variabel ketiga.

Sebagai contoh, kita bisa menghitung Peluang Bersyarat untuk dua variabel setelah mengontrol satu variabel lainnya. Jika P(A | B, C) = P(A | C) dan P(B | C) = P(B | A, C), maka kita dapat menyimpulkan bahwa \(A\) dan \(B\) adalah independen secara bersyarat terhadap \(C\).


7.5.2 Contoh Perhitungan dalam Tabel Kontingensi

Misalkan kita memiliki data berikut tentang Jenis Kelamin, Preferensi Produk, dan Usia, dengan data yang digunakan dalam tabel kontingensi tiga arah:

Jenis Kelamin Produk A Produk B Usia < 30 Usia ≥ 30 Total
Laki-laki 50 30 40 40 80
Perempuan 70 50 60 60 120
Total 120 80 100 100 200

Kita ingin menguji kemandirian bersyarat antara Jenis Kelamin dan Preferensi Produk, dengan mengontrol Usia. Artinya, kita ingin mengetahui apakah hubungan antara Jenis Kelamin dan Preferensi Produk berubah setelah kita mempertimbangkan Usia.


7.5.3 Menghitung Kemandirian Bersyarat dalam R

Untuk menghitung conditional independence dalam R, kita dapat menggunakan uji Chi-Square atau menghitung distribusi peluang bersyarat antara dua variabel dengan mengontrol variabel ketiga.

# Data observasi
data <- array(c(50, 30, 70, 50, 40, 40, 60, 60), dim = c(2, 2, 2))
dimnames(data) <- list("Jenis Kelamin" = c("Laki-laki", "Perempuan"),
                       "Produk" = c("Produk A", "Produk B"),
                       "Usia" = c("Usia < 30", "Usia ≥ 30"))

# Menghitung peluang bersama (joint probability) untuk Produk A dan Usia < 30
P_ProdukA_Usia30 <- sum(data[,,1]) / sum(data)

# Menghitung peluang bersyarat P(Produk A | Usia < 30) setelah mengontrol Jenis Kelamin
P_ProdukA_given_Usia30 <- sum(data[1,,1]) / sum(data[,,1])

# Menampilkan hasil
P_ProdukA_given_Usia30
## [1] 0.6

Jika nilai P(Produk A | Usia < 30, Jenis Kelamin) tidak berbeda secara signifikan dengan P(Produk A | Usia < 30), maka kita dapat menyimpulkan bahwa Jenis Kelamin dan Preferensi Produk adalah independen bersyarat setelah mengontrol Usia.

7.6 Marginal Y dan X

Dalam analisis tabel kontingensi, kita sering kali tertarik untuk memahami distribusi satu variabel marginal tanpa mempertimbangkan variabel lainnya. Tabel marginal untuk variabel X dan Y memberikan gambaran tentang distribusi frekuensi total untuk masing-masing kategori variabel, yang dihitung dengan menjumlahkan seluruh baris atau kolom dari tabel kontingensi.


Marginal X

Tabel marginal X menunjukkan distribusi frekuensi untuk variabel X tanpa mempertimbangkan variabel lainnya. Tabel ini memberikan informasi tentang total frekuensi untuk masing-masing kategori dalam variabel X.

Secara matematis, P(X) dapat dihitung dengan rumus:

\[ P(X) = \frac{n_{X}}{N} \]

Dimana: - \(n_{X}\) adalah jumlah kejadian untuk kategori tertentu pada variabel X, - \(N\) adalah total jumlah kejadian dalam seluruh populasi.


Marginal Y

Tabel marginal Y menunjukkan distribusi frekuensi untuk variabel Y tanpa mempertimbangkan variabel lainnya. Tabel ini memberikan informasi tentang total frekuensi untuk masing-masing kategori dalam variabel Y.

Secara matematis, P(Y) dapat dihitung dengan rumus:

\[ P(Y) = \frac{n_{Y}}{N} \]

Dimana: - \(n_{Y}\) adalah jumlah kejadian untuk kategori tertentu pada variabel Y, - \(N\) adalah total jumlah kejadian dalam seluruh populasi.


Menghitung Marginal X dan Y dalam Tabel Kontingensi

Misalkan kita memiliki data berikut mengenai Jenis Kelamin dan Preferensi Produk dalam tabel kontingensi dua arah:

Jenis Kelamin Produk A Produk B Total
Laki-laki 80 120 200
Perempuan 100 100 200
Total 180 220 400

Untuk menghitung marginal X (Jenis Kelamin) dan marginal Y (Preferensi Produk), kita akan menjumlahkan kolom dan baris sesuai kebutuhan.

# Data Observasi
data <- matrix(c(80, 120, 100, 100), nrow = 2, byrow = TRUE)
colnames(data) <- c("Produk A", "Produk B")
rownames(data) <- c("Laki-laki", "Perempuan")

# Menghitung tabel marginal untuk X (Jenis Kelamin)
marginal_X <- margin.table(data, 1) / sum(data)

# Menghitung tabel marginal untuk Y (Preferensi Produk)
marginal_Y <- margin.table(data, 2) / sum(data)

# Menampilkan hasil
list(
  "Marginal X (Jenis Kelamin)" = marginal_X,
  "Marginal Y (Preferensi Produk)" = marginal_Y
)
## $`Marginal X (Jenis Kelamin)`
## Laki-laki Perempuan 
##       0.5       0.5 
## 
## $`Marginal Y (Preferensi Produk)`
## Produk A Produk B 
##     0.45     0.55

Interpretasi Tabel Marginal X dan Y

  • Tabel Marginal X (Jenis Kelamin) memberikan informasi tentang distribusi frekuensi Laki-laki dan Perempuan dalam data, tanpa memperhatikan Preferensi Produk. Ini menunjukkan proporsi total untuk masing-masing kategori jenis kelamin.

  • Tabel Marginal Y (Preferensi Produk) memberikan informasi tentang distribusi frekuensi Produk A dan Produk B, tanpa memperhatikan Jenis Kelamin. Ini menunjukkan proporsi total untuk masing-masing kategori produk.

Kesimpulan

  • Tabel Marginal sangat berguna untuk mendapatkan gambaran umum tentang distribusi kategori dalam satu variabel tanpa mempertimbangkan variabel lainnya.

  • Tabel Marginal X menunjukkan distribusi frekuensi untuk Jenis Kelamin, sedangkan Tabel Marginal Y menunjukkan distribusi frekuensi untuk Preferensi Produk.

  • Dengan menggunakan tabel marginal, kita bisa memeriksa distribusi keseluruhan dari setiap variabel dalam data dan memahami proporsi total yang ada.

7.7 Inferensi Tabel Kontingensi Tiga Arah

Inferensi Tabel Kontingensi Tiga Arah digunakan untuk menguji hubungan antara tiga variabel kategori dalam tabel kontingensi. Ketika kita bekerja dengan tabel tiga arah, kita berusaha untuk menentukan apakah ada hubungan yang signifikan antara tiga variabel atau apakah ada interaksi antara dua variabel setelah mengontrol variabel ketiga.

Dalam tabel kontingensi tiga arah, kita sering melakukan inferensi untuk melihat apakah hubungan antar dua variabel tetap ada setelah mengendalikan variabel ketiga. Inferensi ini juga membantu untuk menentukan apakah hubungan yang diamati disebabkan oleh interaksi antar variabel atau apakah hubungan tersebut tetap ada meskipun kita mengontrol variabel ketiga.


7.7.1 Uji Chi-Square untuk Tabel Kontingensi Tiga Arah

Untuk tabel kontingensi tiga arah, kita dapat menggunakan Uji Chi-Square untuk menguji apakah ada hubungan yang signifikan antara tiga variabel. Uji ini melibatkan perhitungan statistik uji berdasarkan frekuensi yang diamati dan frekuensi yang diharapkan.

Langkah-langkah Uji Chi-Square untuk Tabel Kontingensi Tiga Arah:

  1. Menentukan Hipotesis:

    • Hipotesis Nol (H₀): Tidak ada hubungan antara tiga variabel kategori (tiga variabel independen satu sama lain).
    • Hipotesis Alternatif (H₁): Ada hubungan antara tiga variabel kategori (setidaknya ada asosiasi antara dua variabel setelah mengontrol variabel ketiga).
  2. Menghitung Statistik Uji Chi-Square: Statistik uji Chi-Square untuk tabel kontingensi tiga arah dihitung dengan rumus yang sama seperti pada tabel dua arah, tetapi dengan memperhitungkan tiga variabel dalam perhitungan.

  3. Menentukan Nilai P dan Keputusan:

    • Jika nilai p < 0.05, kita menolak hipotesis nol dan menyimpulkan bahwa ada hubungan signifikan antara tiga variabel.
    • Jika nilai p ≥ 0.05, kita gagal menolak hipotesis nol dan menyimpulkan bahwa ketiga variabel independen satu sama lain.

7.7.2 Menghitung Inferensi Tabel Kontingensi Tiga Arah dalam R

Misalkan kita memiliki data mengenai Jenis Kelamin, Preferensi Produk, dan Usia, seperti yang kita gunakan dalam contoh sebelumnya. Kita ingin menguji apakah ada hubungan antara ketiga variabel ini.

Jenis Kelamin Produk A Produk B Usia < 30 Usia ≥ 30 Total
Laki-laki 50 30 40 40 80
Perempuan 70 50 60 60 120
Total 120 80 100 100 200

Untuk menguji hubungan antara Jenis Kelamin, Preferensi Produk, dan Usia, kita dapat menggunakan Uji Chi-Square untuk tabel kontingensi tiga arah.

8 Generalized Linear Model (GLM)

8.1 Exponential Family

Generalized Linear Model (GLM) adalah jenis model statistik yang memperluas Regresi Linear untuk menangani data non-normal atau data yang tidak dapat dijelaskan dengan asumsi distribusi normal. GLM memungkinkan kita untuk menganalisis data dengan berbagai distribusi, yang mencakup binomial, Poisson, Gamma, dan normal, di antara yang lainnya.

Model ini memiliki tiga komponen utama: 1. Distribusi probabilitas dari variabel dependen (Y). 2. Linear predictor yang menghubungkan variabel independen (X) dengan distribusi. 3. Link function yang menghubungkan parameter distribusi dengan prediktor linear.

Dalam GLM, kita sering berhadapan dengan Exponential Family sebagai jenis distribusi yang digunakan untuk berbagai jenis model. Exponential Family mencakup banyak distribusi probabilitas yang umum digunakan dalam GLM.

Definisi Exponential Family

Distribusi dalam Exponential Family adalah kelas distribusi probabilitas yang memiliki bentuk umum berikut:

\[ f(y | \theta) = \exp\left( \frac{y \cdot \eta - b(\eta)}{\phi} + c(y, \phi) \right) \]

Dimana: - \(y\) adalah variabel acak (data), - \(\eta\) adalah linear predictor, - \(\phi\) adalah parameter skala, - \(b(\eta)\) adalah fungsi yang terkait dengan parameter distribusi, - \(c(y, \phi)\) adalah fungsi normalisasi untuk memastikan bahwa distribusi adalah probabilitas yang valid.

Jenis-jenis Distribusi dalam Exponential Family

Distribusi dalam Exponential Family mencakup berbagai distribusi probabilitas yang umum digunakan dalam analisis statistik, seperti:

  1. Distribusi Normal (untuk regresi linier).
  2. Distribusi Binomial (untuk data biner atau proporsi).
  3. Distribusi Poisson (untuk menghitung jumlah kejadian dalam waktu atau ruang tetap).
  4. Distribusi Gamma (untuk data yang positif dan kontinu).

Distribusi Binomial

Distribusi Binomial digunakan untuk model regresi logistik, di mana variabel dependen adalah biner (misalnya ya/tidak). Dalam GLM, link function untuk distribusi binomial biasanya adalah logit.

\[ f(y | \theta) = \binom{n}{y} p^y (1-p)^{n-y} \]

Dengan \(p = \frac{1}{1 + \exp(-\eta)}\), di mana \(\eta\) adalah prediktor linear dan fungsi link logit digunakan.

Distribusi Poisson

Distribusi Poisson digunakan untuk model data hitungan, seperti jumlah kejadian dalam interval waktu atau ruang tertentu. Fungsi link untuk distribusi Poisson biasanya adalah log.

\[ f(y | \theta) = \frac{\lambda^y \exp(-\lambda)}{y!} \]

Dengan \(\lambda = \exp(\eta)\), di mana \(\eta\) adalah prediktor linear dan fungsi link log digunakan.

Distribusi Normal

Distribusi Normal digunakan untuk model regresi linier klasik. Dalam hal ini, link function biasanya adalah identitas:

\[ f(y | \theta) = \frac{1}{\sqrt{2 \pi \sigma^2}} \exp\left( - \frac{(y - \mu)^2}{2\sigma^2} \right) \]

Dimana \(\mu = \eta\), di mana \(\eta\) adalah prediktor linear dan fungsi link identitas digunakan.


Menggunakan GLM dengan Exponential Family di R

Misalkan kita ingin membangun Generalized Linear Model menggunakan distribusi Poisson untuk model data hitungan. Kita bisa menggunakan fungsi glm() di R dengan family = poisson() untuk menentukan distribusi yang sesuai.

Contoh penggunaan GLM dengan distribusi Poisson:

# Contoh data: jumlah kejadian (count data) dalam waktu tertentu
set.seed(123)
data <- data.frame(
  x = rnorm(100),  # Variabel independen
  y = rpois(100, lambda = exp(0.5 + 0.3 * rnorm(100)))  # Variabel dependen, count data (Poisson)
)

# Fit model GLM dengan distribusi Poisson
model <- glm(y ~ x, family = poisson(link = "log"), data = data)

# Menampilkan hasil model
summary(model)
## 
## Call:
## glm(formula = y ~ x, family = poisson(link = "log"), data = data)
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept)  0.55149    0.07615   7.242 4.41e-13 ***
## x           -0.04760    0.08383  -0.568     0.57    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for poisson family taken to be 1)
## 
##     Null deviance: 131.13  on 99  degrees of freedom
## Residual deviance: 130.81  on 98  degrees of freedom
## AIC: 341.32
## 
## Number of Fisher Scoring iterations: 5

8.2 Model Regresi Logistik

Regresi Logistik adalah salah satu jenis model Generalized Linear Model (GLM) yang digunakan untuk memodelkan hubungan antara satu variabel dependen biner (misalnya, ya/tidak, 1/0) dengan satu atau lebih variabel independen. Regresi logistik mengasumsikan bahwa hubungan antara variabel dependen dan independen diwakili oleh fungsi logit, yang merupakan log odds.

Model regresi logistik sangat berguna ketika variabel dependen kita adalah biner (dua kategori), seperti dalam analisis klasifikasi, diagnosis medis, analisis risiko, dan berbagai aplikasi lainnya.

Fungsi Link Logit

Pada regresi logistik, fungsi link yang digunakan adalah logit. Fungsi logit menghubungkan odds dari probabilitas kejadian (yaitu, kemungkinan hasil positif) dengan prediktor linear yang mencakup variabel independen.

Fungsi logit dapat didefinisikan sebagai berikut:

\[ \text{logit}(P) = \ln \left( \frac{P}{1 - P} \right) = \eta \]

Dimana: - \(P\) adalah probabilitas terjadinya peristiwa positif (misalnya, hasil = 1), - \(\eta\) adalah prediktor linear yang menghubungkan variabel independen dengan log odds.

Model regresi logistik kemudian dapat dituliskan sebagai berikut:

\[ \ln \left( \frac{P}{1 - P} \right) = \beta_0 + \beta_1 X_1 + \beta_2 X_2 + \dots + \beta_k X_k \]

Dimana: - \(P\) adalah probabilitas kejadian (hasil positif), - \(\beta_0\) adalah intersep, - \(\beta_1, \beta_2, \dots, \beta_k\) adalah koefisien untuk variabel independen \(X_1, X_2, \dots, X_k\).

Estimasi Koefisien dengan Maximum Likelihood

Pada regresi logistik, estimasi koefisien dilakukan dengan menggunakan metode Maximum Likelihood Estimation (MLE). Metode ini mencari koefisien yang memaksimalkan kemungkinan (likelihood) data yang diamati, yaitu nilai koefisien yang membuat probabilitas data yang diamati sebesar mungkin.


Contoh Model Regresi Logistik dalam R

Misalkan kita memiliki dataset yang mencakup informasi tentang umur, jenis kelamin, dan status merokok, serta variabel dependen yang menunjukkan apakah seseorang mengalami penyakit jantung (0 = Tidak, 1 = Ya). Berikut adalah langkah-langkah untuk membangun model regresi logistik menggunakan R.

Contoh Data:

Umur Jenis Kelamin Status Merokok Penyakit Jantung
45 Laki-laki Ya 1
60 Perempuan Tidak 0
50 Laki-laki Ya 1
30 Perempuan Tidak 0
55 Laki-laki Ya 1

Langkah-langkah di R:

# Contoh data
data <- data.frame(
  umur = c(45, 60, 50, 30, 55),
  jenis_kelamin = c("Laki-laki", "Perempuan", "Laki-laki", "Perempuan", "Laki-laki"),
  status_merokok = c("Ya", "Tidak", "Ya", "Tidak", "Ya"),
  penyakit_jantung = c(1, 0, 1, 0, 1)
)

# Mengonversi variabel kategori menjadi faktor
data$jenis_kelamin <- factor(data$jenis_kelamin, levels = c("Laki-laki", "Perempuan"))
data$status_merokok <- factor(data$status_merokok, levels = c("Ya", "Tidak"))

# Membuat model regresi logistik
model_logistik <- glm(penyakit_jantung ~ umur + jenis_kelamin + status_merokok, 
                      data = data, 
                      family = binomial(link = "logit"))

# Menampilkan hasil model
summary(model_logistik)
## 
## Call:
## glm(formula = penyakit_jantung ~ umur + jenis_kelamin + status_merokok, 
##     family = binomial(link = "logit"), data = data)
## 
## Coefficients: (1 not defined because of singularities)
##                          Estimate Std. Error z value Pr(>|z|)
## (Intercept)             2.457e+01  3.026e+05       0        1
## umur                    4.010e-15  5.859e+03       0        1
## jenis_kelaminPerempuan -4.913e+01  1.231e+05       0        1
## status_merokokTidak            NA         NA      NA       NA
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 6.7301e+00  on 4  degrees of freedom
## Residual deviance: 2.1434e-10  on 2  degrees of freedom
## AIC: 6
## 
## Number of Fisher Scoring iterations: 23

8.3 Model Regresi Poisson

Model Regresi Poisson adalah jenis Generalized Linear Model (GLM) yang digunakan untuk memodelkan data hitungan (count data), seperti jumlah kejadian per unit waktu atau ruang, di mana variabel dependen berupa data diskrit yang positif (0, 1, 2, …). Model ini digunakan untuk situasi di mana kita ingin menghubungkan variabel independen dengan jumlah kejadian (misalnya jumlah kecelakaan, jumlah penyakit, atau jumlah pembelian produk) dalam waktu atau ruang tertentu.

Distribusi Poisson digunakan dalam model ini untuk menangani data hitungan yang mengikuti distribusi Poisson, yang memiliki parameter \(\lambda\) (rata-rata jumlah kejadian) yang sama dengan variansnya.

Fungsi Link Log

Pada regresi Poisson, fungsi link yang digunakan adalah log link, yang menghubungkan rata-rata kejadian (rate) dengan prediktor linear. Dengan kata lain, model regresi Poisson mengasumsikan bahwa log dari rata-rata kejadian adalah fungsi linear dari variabel independen.

Model regresi Poisson dapat dituliskan sebagai berikut:

\[ \log(\lambda) = \beta_0 + \beta_1 X_1 + \beta_2 X_2 + \dots + \beta_k X_k \]

Dimana: - \(\lambda\) adalah rata-rata kejadian dalam unit waktu atau ruang, - \(\beta_0, \beta_1, \dots, \beta_k\) adalah koefisien yang akan diestimasi untuk variabel independen \(X_1, X_2, \dots, X_k\), - Fungsi link adalah log, sehingga \(\log(\lambda)\) adalah fungsi linear dari \(X_1, X_2, \dots, X_k\).

Menggunakan Model Regresi Poisson di R

Misalkan kita memiliki data yang mencatat jumlah kecelakaan mobil yang terjadi dalam satu bulan untuk berbagai kota, dengan variabel independen seperti jumlah kendaraan dan ukuran populasi kota.

Berikut adalah contoh model regresi Poisson yang dibangun menggunakan data kecelakaan mobil.

Contoh Data:

Jumlah Kendaraan Ukuran Populasi Jumlah Kecelakaan
2000 50000 5
3000 60000 6
4000 80000 8
5000 100000 10

Langkah-langkah di R:

# Contoh data
data <- data.frame(
  jumlah_kendaraan = c(2000, 3000, 4000, 5000),
  ukuran_populasi = c(50000, 60000, 80000, 100000),
  jumlah_kecelakaan = c(5, 6, 8, 10)
)

# Membuat model regresi Poisson
model_poisson <- glm(jumlah_kecelakaan ~ jumlah_kendaraan + ukuran_populasi, 
                     data = data, 
                     family = poisson(link = "log"))

# Menampilkan hasil model
summary(model_poisson)
## 
## Call:
## glm(formula = jumlah_kecelakaan ~ jumlah_kendaraan + ukuran_populasi, 
##     family = poisson(link = "log"), data = data)
## 
## Coefficients:
##                   Estimate Std. Error z value Pr(>|z|)
## (Intercept)      1.048e+00  1.078e+00   0.972    0.331
## jumlah_kendaraan 1.397e-04  1.297e-03   0.108    0.914
## ukuran_populasi  5.646e-06  7.379e-05   0.077    0.939
## 
## (Dispersion parameter for poisson family taken to be 1)
## 
##     Null deviance: 2.0201741  on 3  degrees of freedom
## Residual deviance: 0.0054154  on 1  degrees of freedom
## AIC: 21.239
## 
## Number of Fisher Scoring iterations: 3

9 Inferensi Generalized Linear Model (GLM)

Inferensi Generalized Linear Model (GLM) digunakan untuk menguji hubungan statistik antara variabel dependen dan satu atau lebih variabel independen menggunakan model GLM. Inferensi ini melibatkan penggunaan statistik uji dan interval kepercayaan untuk mengukur seberapa kuat hubungan tersebut dan untuk menarik kesimpulan dari data.

Generalized Linear Models memperluas regresi linear untuk menangani berbagai jenis data dan distribusi, termasuk distribusi binomial, Poisson, dan Gamma.

9.1 Langkah-langkah Inferensi dalam GLM

  1. Menentukan Hipotesis:
    • Hipotesis Nol (H₀): Tidak ada hubungan antara variabel independen dan dependen (koefisien regresi sama dengan nol).
    • Hipotesis Alternatif (H₁): Ada hubungan yang signifikan antara variabel independen dan dependen (koefisien regresi tidak sama dengan nol).
  2. Mengestimasi Koefisien Model:
    • Dalam GLM, koefisien model diestimasi menggunakan metode estimasi maksimum likelihood (MLE), yang berusaha memaksimalkan kemungkinan data yang diamati.
  3. Uji Signifikansi (p-value):
    • Uji Wald dan Uji Likelihood Ratio (LR) adalah dua uji yang sering digunakan untuk menguji signifikansi koefisien dalam model GLM.
      • p-value kecil (biasanya < 0.05) menunjukkan bahwa koefisien adalah signifikan secara statistik.
  4. Menguji Goodness-of-Fit:
    • Goodness-of-fit digunakan untuk mengevaluasi sejauh mana model cocok dengan data yang diamati. Pada GLM, uji Deviance atau AIC (Akaike Information Criterion) sering digunakan untuk menilai kecocokan model.
    • Deviance mengukur perbedaan antara log-likelihood dari model yang diestimasi dengan model yang lebih sederhana (model nol).

Inferensi dalam Regresi Logistik

Regresi Logistik adalah salah satu jenis GLM yang sering digunakan untuk memodelkan data biner (0/1). Dalam inferensi regresi logistik, kita menguji apakah koefisien dari variabel independen signifikan dalam memprediksi hasil biner.

Langkah-langkah Inferensi Regresi Logistik:

  1. Estimasi Koefisien dan Nilai p:
    • Estimasi koefisien menggunakan Maximum Likelihood Estimation (MLE).
    • Nilai p digunakan untuk menguji apakah koefisien masing-masing variabel independen signifikan.
  2. Uji Wald dan Uji Likelihood Ratio (LR):
    • Uji Wald digunakan untuk menguji signifikansi koefisien. Ini menguji apakah koefisien berbeda signifikan dari nol.
    • Uji LR membandingkan model yang lebih kompleks dengan model yang lebih sederhana.

9.3 Inferensi dalam Regresi Poisson

Regresi Poisson digunakan untuk memodelkan data hitungan atau jumlah kejadian, seperti jumlah kecelakaan atau jumlah penyakit. Inferensi dalam regresi Poisson juga dilakukan dengan uji signifikansi koefisien dan menguji kecocokan model.

Langkah-langkah Inferensi Regresi Poisson:

  1. Estimasi Koefisien dan Nilai p:
    • Seperti regresi logistik, Maximum Likelihood Estimation (MLE) digunakan untuk mengestimasi koefisien dalam regresi Poisson.
  2. Uji Wald:
    • Uji Wald digunakan untuk menguji apakah koefisien regresi dalam model Poisson signifikan. Jika nilai p koefisien kecil (misalnya < 0.05), kita dapat menyimpulkan bahwa variabel tersebut berpengaruh signifikan terhadap jumlah kejadian.
  3. Uji Likelihood Ratio (LR):
    • Uji LR digunakan untuk membandingkan dua model: satu model lengkap dan satu model nol, untuk melihat apakah variabel independen berpengaruh signifikan terhadap jumlah kejadian.

9.4 Contoh Inferensi GLM di R

Misalkan kita ingin membangun model regresi logistik untuk memprediksi penyakit jantung berdasarkan umur, jenis kelamin, dan status merokok. Berikut adalah contoh kode untuk inferensi GLM menggunakan regresi logistik di R.

# Contoh data
data <- data.frame(
  penyakit_jantung = c(1, 0, 1, 0, 1),
  umur = c(45, 60, 50, 30, 55),
  jenis_kelamin = c("Laki-laki", "Perempuan", "Laki-laki", "Perempuan", "Laki-laki"),
  status_merokok = c("Ya", "Tidak", "Ya", "Tidak", "Ya")
)

# Mengonversi variabel kategori menjadi faktor
data$jenis_kelamin <- factor(data$jenis_kelamin, levels = c("Laki-laki", "Perempuan"))
data$status_merokok <- factor(data$status_merokok, levels = c("Ya", "Tidak"))

# Membuat model regresi logistik
model_logistik <- glm(penyakit_jantung ~ umur + jenis_kelamin + status_merokok, 
                      data = data, 
                      family = binomial(link = "logit"))

# Menampilkan hasil model
summary(model_logistik)
## 
## Call:
## glm(formula = penyakit_jantung ~ umur + jenis_kelamin + status_merokok, 
##     family = binomial(link = "logit"), data = data)
## 
## Coefficients: (1 not defined because of singularities)
##                          Estimate Std. Error z value Pr(>|z|)
## (Intercept)             2.457e+01  3.026e+05       0        1
## umur                    4.010e-15  5.859e+03       0        1
## jenis_kelaminPerempuan -4.913e+01  1.231e+05       0        1
## status_merokokTidak            NA         NA      NA       NA
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 6.7301e+00  on 4  degrees of freedom
## Residual deviance: 2.1434e-10  on 2  degrees of freedom
## AIC: 6
## 
## Number of Fisher Scoring iterations: 23

Output dari summary(model_logistik) memberikan koefisien estimasi, nilai p untuk masing-masing koefisien, serta statistik uji yang digunakan untuk mengevaluasi signifikansi koefisien.

9.5 Goodness-of-Fit pada GLM

Goodness-of-fit adalah prosedur untuk mengevaluasi seberapa baik model yang telah dibangun menggambarkan data yang diamati. Dalam konteks Generalized Linear Models (GLM), kita menggunakan berbagai metode untuk menilai apakah model kita cocok dengan data. Salah satu pendekatan umum adalah dengan menggunakan Deviance.

Deviance mengukur perbedaan antara log-likelihood model yang diestimasi dengan log-likelihood model nol (model yang tidak ada prediktornya). Deviance dapat digunakan untuk menilai fit model dan digunakan dalam uji likelihood ratio.

Menghitung Deviance pada GLM

Pada GLM, deviance dihitung sebagai:

\[ D = 2 \left[ \text{log-likelihood(model terbaik)} - \text{log-likelihood(model nol)} \right] \]

Dalam regresi logistik dan regresi Poisson, kita sering menggunakan Deviance untuk menguji goodness-of-fit model.

Menghitung Deviance di R

Misalkan kita sudah membuat model GLM menggunakan regresi logistik atau regresi Poisson di R. Kita dapat menghitung Deviance model dengan menggunakan fungsi deviance().

Contoh:

# Model regresi logistik
model_logistik <- glm(penyakit_jantung ~ umur + jenis_kelamin + status_merokok, 
                      data = data, 
                      family = binomial(link = "logit"))

# Menghitung Deviance dari model
deviance_model_logistik <- deviance(model_logistik)

# Menampilkan hasil Deviance
deviance_model_logistik
## [1] 2.143352e-10

Kesimpulan

Generalized Linear Models (GLM) merupakan alat yang sangat fleksibel dalam analisis statistik, yang memungkinkan kita untuk memodelkan hubungan antara variabel dependen dan variabel independen dengan menggunakan berbagai distribusi probabilitas yang sesuai dengan jenis data yang kita miliki. GLM menggabungkan model regresi linear dengan distribusi yang lebih beragam untuk menangani data yang tidak memenuhi asumsi normalitas.

Poin-poin Utama:

  1. Fleksibilitas dalam Model:
    • GLM dapat digunakan untuk berbagai jenis distribusi data, seperti binomial (regresi logistik), Poisson (regresi Poisson), dan normal, antara lain. Ini memungkinkan kita untuk melakukan analisis pada data dengan distribusi yang berbeda.
  2. Estimasi Koefisien:
    • Maximum Likelihood Estimation (MLE) digunakan untuk mengestimasi koefisien dalam GLM. MLE mencari koefisien yang memaksimalkan kemungkinan data yang diamati.
  3. Pengujian Signifikansi:
    • Uji Wald dan Uji Likelihood Ratio (LR) digunakan untuk menguji apakah koefisien dalam model signifikan. Nilai p-value kecil menunjukkan bahwa koefisien tersebut signifikan.
  4. Goodness-of-Fit:
    • Deviance digunakan untuk menilai seberapa baik model cocok dengan data yang diamati. Deviance kecil menunjukkan bahwa model sesuai dengan data, sementara Deviance besar menunjukkan bahwa model mungkin tidak sesuai dengan data.
  5. Model untuk Data Biner dan Hitungan:
    • GLM memberikan fleksibilitas untuk memodelkan data biner menggunakan regresi logistik (dengan distribusi binomial), dan data hitungan menggunakan regresi Poisson (dengan distribusi Poisson).
  6. Prediksi dan Interpretasi:
    • Setelah model GLM dibangun, kita dapat memprediksi hasil dan menginterpretasikan koefisien regresi. Untuk model logistik, koefisien diinterpretasikan dalam bentuk log-odds dan eksponen koefisien memberikan rasio odds.
    • Untuk model Poisson, koefisien diinterpretasikan dalam bentuk log rate dan eksponen koefisien memberikan rasio rate.

Kesimpulan Akhir:


10. Contoh Studi Kasus Regresi Logistik Biner dengan Data Rill

10.1 Latar Belakang

Tujuan dari analisis ini adalah untuk mempelajari hubungan antara karakteristik fisik biji labu (pumpkin seeds) dan klasifikasi jenis biji tersebut berdasarkan variabel-variabel pengukuran yang tersedia dalam dataset. Dalam dunia pertanian dan industri pangan, klasifikasi kualitas atau varietas biji labu sangat penting untuk menentukan potensi produksi, kualitas hasil, serta nilai jual.

Analisis statistik, khususnya regresi dan teknik klasifikasi, dapat digunakan untuk memahami faktor-faktor apa saja yang paling memengaruhi jenis atau kelas biji labu. Dengan memahami pola-pola dari data fisik yang dikumpulkan, diharapkan kita mampu mengembangkan model prediksi yang dapat mengklasifikasikan jenis biji labu secara otomatis dan akurat, yang pada akhirnya dapat membantu efisiensi dalam proses seleksi dan pengolahan produk pertanian.

10.2 Deskripsi Data

Dataset yang digunakan dalam analisis ini diunduh dari Kaggle dengan judul Pumpkin Seeds Dataset (sumber), yang dikumpulkan oleh Murat Koklu. Dataset ini berisi data pengukuran berbagai karakteristik fisik dari biji labu, yang kemudian diklasifikasikan ke dalam dua kategori: Çerçevelik dan Ürgüp Sivrisi (dua varietas biji labu).

Setiap baris pada dataset merepresentasikan satu sampel biji labu, dengan variabel-variabel pengukuran sebagai berikut:

Variabel Deskripsi Tipe
Area Luas area biji labu (dalam pixel) Numeric
Perimeter Keliling biji labu (dalam pixel) Numeric
Major_Axis_Length Panjang sumbu utama biji labu (dalam pixel) Numeric
Minor_Axis_Length Panjang sumbu minor biji labu (dalam pixel) Numeric
Convex_Area Area cembung (convex area) biji labu (dalam pixel) Numeric
Equiv_Diameter Diameter ekuivalen (equivalent diameter) biji labu (dalam pixel) Numeric
Eccentricity Nilai eksentrisitas (rasio antara sumbu utama dan sumbu minor) Numeric
Solidity Rasio antara area biji labu dan area cembung Numeric
Extent Rasio area biji terhadap bounding box Numeric
Roundness Tingkat kebulatan biji labu Numeric
Aspect_Ration Rasio antara panjang dan lebar biji labu Numeric
Compactness Tingkat kekompakan bentuk biji labu Numeric
Class Kategori/label jenis biji labu (Çerçevelik atau Ürgüp Sivrisi) Categorical

10.3 Hasil & Pembahasan

10.3.1 Input Data

# Input Data
library(readr)

# Ganti path di bawah dengan lokasi file Anda
file_path <- file.choose()   # atau tulis langsung: "Data ADK Studi Kasus 1 - Pumpkin Seeds Dataset.csv"

# Baca file dengan delimiter TAB dan encoding Latin1
pumpkin_data <- read_delim(file_path,
                           delim = ";",
                           locale = locale(encoding = "latin1"))
## Rows: 2500 Columns: 13
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ";"
## chr (6): Eccentricity, Solidity, Extent, Roundness, Compactness, Class
## dbl (2): Area, Convex_Area
## num (5): Perimeter, Major_Axis_Length, Minor_Axis_Length, Equiv_Diameter, As...
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
# Lihat struktur dan ringkasan
str(pumpkin_data)
## spc_tbl_ [2,500 × 13] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ Area             : num [1:2500] 56276 76631 71623 66458 66107 ...
##  $ Perimeter        : num [1:2500] 888242 1068146 1082987 992051 998146 ...
##  $ Major_Axis_Length: num [1:2500] 3261485 4171932 4358328 3815638 3838883 ...
##  $ Minor_Axis_Length: num [1:2500] 2202388 2342289 2110457 2225322 2204545 ...
##  $ Convex_Area      : num [1:2500] 56831 77280 72663 67118 67117 ...
##  $ Equiv_Diameter   : num [1:2500] 2676805 3123614 3019822 2908899 2901207 ...
##  $ Eccentricity     : chr [1:2500] "0,7376" "0,8275" "0,8749" "0,8123" ...
##  $ Solidity         : chr [1:2500] "0,9902" "0,9916" "0,9857" "0,9902" ...
##  $ Extent           : chr [1:2500] "0,7453" "0,7151" "0,74" "0,7396" ...
##  $ Roundness        : chr [1:2500] "0,8963" "0,844" "0,7674" "0,8486" ...
##  $ Aspect_Ration    : num [1:2500] 14809 17811 20651 17146 17413 ...
##  $ Compactness      : chr [1:2500] "0,8207" "0,7487" "0,6929" "0,7624" ...
##  $ Class            : chr [1:2500] "Çerçevelik" "Çerçevelik" "Çerçevelik" "Çerçevelik" ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   Area = col_double(),
##   ..   Perimeter = col_number(),
##   ..   Major_Axis_Length = col_number(),
##   ..   Minor_Axis_Length = col_number(),
##   ..   Convex_Area = col_double(),
##   ..   Equiv_Diameter = col_number(),
##   ..   Eccentricity = col_character(),
##   ..   Solidity = col_character(),
##   ..   Extent = col_character(),
##   ..   Roundness = col_character(),
##   ..   Aspect_Ration = col_number(),
##   ..   Compactness = col_character(),
##   ..   Class = col_character()
##   .. )
##  - attr(*, "problems")=<externalptr>
head(pumpkin_data)

10.3.2 Membuat Variabel Target Biner

Misal, ingin memodelkan probabilitas Class = “Çerçevelik” (1) vs “Ürgüp Sivrisi” (0):

pumpkin_data$Class_bin <- ifelse(pumpkin_data$Class == "Çerçevelik", 1, 0)
pumpkin_data$Eccentricity <- as.numeric(gsub(",", ".", pumpkin_data$Eccentricity))
pumpkin_data$Solidity <- as.numeric(gsub(",", ".", pumpkin_data$Solidity))
pumpkin_data$Extent <- as.numeric(gsub(",", ".", pumpkin_data$Extent))
pumpkin_data$Roundness <- as.numeric(gsub(",", ".", pumpkin_data$Roundness))
pumpkin_data$Compactness <- as.numeric(gsub(",", ".", pumpkin_data$Compactness))

10.3.3 Model Logistik

model_logit <- glm(Class_bin ~ Area + Perimeter + Major_Axis_Length + 
                   Minor_Axis_Length + Eccentricity + Solidity + 
                   Extent + Roundness + Aspect_Ration + Compactness, 
                   data = pumpkin_data, family = binomial)
summary(model_logit)
## 
## Call:
## glm(formula = Class_bin ~ Area + Perimeter + Major_Axis_Length + 
##     Minor_Axis_Length + Eccentricity + Solidity + Extent + Roundness + 
##     Aspect_Ration + Compactness, family = binomial, data = pumpkin_data)
## 
## Coefficients:
##                     Estimate Std. Error z value Pr(>|z|)    
## (Intercept)        3.077e+01  3.031e+01   1.015   0.3100    
## Area              -1.299e-05  5.638e-06  -2.304   0.0212 *  
## Perimeter         -9.960e-08  2.067e-07  -0.482   0.6299    
## Major_Axis_Length  6.304e-08  5.176e-08   1.218   0.2232    
## Minor_Axis_Length  1.812e-07  9.990e-08   1.813   0.0698 .  
## Eccentricity       7.357e+01  1.475e+01   4.988 6.09e-07 ***
## Solidity          -1.812e+02  2.529e+01  -7.166 7.70e-13 ***
## Extent            -9.836e-01  1.280e+00  -0.769   0.4421    
## Roundness          6.324e+00  4.391e+00   1.440   0.1498    
## Aspect_Ration     -3.629e-06  1.234e-05  -0.294   0.7687    
## Compactness        1.154e+02  1.436e+01   8.034 9.43e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 3461.7  on 2499  degrees of freedom
## Residual deviance: 1547.7  on 2489  degrees of freedom
## AIC: 1569.7
## 
## Number of Fisher Scoring iterations: 7

Penjelasan dan Intepretasi

  • Area: Koefisien negatif dan signifikan (p = 0.0212). Artinya, semakin besar area biji, peluang untuk diklasifikasikan sebagai Çerçevelik cenderung menurun, setelah variabel lain dikontrol.
  • Eccentricity: Koefisien positif dan sangat signifikan (p < 0.001). Semakin tinggi nilai eksentrisitas, semakin besar peluang biji masuk kelas Çerçevelik.
  • Solidity: Koefisien negatif dan sangat signifikan (p < 0.001). Bijian dengan tingkat kekompakan lebih tinggi justru cenderung bukan Çerçevelik.
  • Compactness: Koefisien positif dan sangat signifikan (p < 0.001). Semakin kompak bentuk biji, semakin tinggi peluang masuk kelas Çerçevelik.
  • Minor_Axis_Length: Hampir signifikan (p = 0.0698), koefisien positif.
  • Variabel lain seperti Perimeter, Major_Axis_Length, Extent, Roundness, Aspect_Ration tidak signifikan secara statistik (p > 0.05).

Goodness of Fit Model

  • Null deviance: 3461.7 (tanpa prediktor)
  • Residual deviance: 1547.7 (dengan prediktor)
  • AIC: 1569.7
    Penurunan deviance yang besar dari model null ke model penuh menunjukkan model mampu menjelaskan variasi data dengan baik.

Kesimpulan

Model logistik menunjukkan bahwa variabel Area, Eccentricity, Solidity, dan Compactness berpengaruh signifikan terhadap klasifikasi jenis biji labu. Odds ratio dari koefisien signifikan dapat diinterpretasikan untuk memahami kekuatan dan arah pengaruh prediktor. Model ini layak digunakan untuk prediksi jenis biji labu berdasarkan morfometri, namun evaluasi lebih lanjut tetap diperlukan.

10.3.4 Uji Signifikansi Model (G² atau Likelihood Ratio Test)

Bandingkan model penuh dengan model null:

model_null <- glm(Class_bin ~ 1, data = pumpkin_data, family = binomial)
anova(model_null, model_logit, test = "Chisq")

Intepretasi

  • Nilai p yang sangat kecil menunjukkan bahwa model penuh dengan seluruh prediktor secara signifikan lebih baik dibandingkan model tanpa prediktor sama sekali.
  • Dengan kata lain, kombinasi variabel morfometri yang digunakan berkontribusi nyata dalam menjelaskan variasi klasifikasi jenis biji labu.

Kesimpulan

Uji likelihood ratio test (G²) memberikan bukti statistik yang sangat kuat bahwa model regresi logistik dengan variabel-variabel prediktor yang dipilih secara signifikan lebih baik dibandingkan model tanpa prediktor, sehingga layak digunakan untuk prediksi klasifikasi biji labu.

10.3.5 Statistik Wald untuk Koefisien Individu

library(broom)
tidy(model_logit)

Berdasarkan hasil statistik Wald, dapat disimpulkan beberapa hal berikut:

  • Area memiliki nilai p = 0,0212 (signifikan pada level 5%) dengan koefisien negatif. Artinya, semakin besar area biji labu, peluang untuk diklasifikasikan sebagai “Çerçevelik” cenderung menurun, setelah dikontrol variabel lain.
  • Eccentricity memiliki nilai p = 6,09 × 10⁻⁷ (sangat signifikan) dan koefisien positif yang kuat. Semakin besar nilai eccentricity, peluang untuk masuk kelas “Çerçevelik” semakin meningkat.
  • Solidity (p = 7,70 × 10⁻¹³) juga sangat signifikan, namun dengan koefisien negatif yang berarti biji dengan solidity tinggi cenderung bukan “Çerçevelik”.
  • Compactness (p = 9,43 × 10⁻¹⁶) sangat signifikan dan berkoefisien positif, sehingga semakin kompak bentuk biji, semakin besar peluang diklasifikasikan sebagai “Çerçevelik”.
  • Minor_Axis_Length hampir signifikan (p = 0,0698) dan koefisiennya positif, yang menunjukkan ada kecenderungan (walau belum signifikan secara statistik) bahwa semakin panjang sumbu minor, peluang “Çerçevelik” meningkat.
  • Variabel lain seperti Perimeter, Major_Axis_Length, Extent, Roundness, dan Aspect_Ration tidak signifikan (nilai p > 0,05), sehingga secara statistik tidak berpengaruh nyata terhadap klasifikasi biji labu pada model ini.

Secara keseluruhan, model ini mengidentifikasi beberapa variabel morfometri penting yang signifikan dalam membedakan jenis biji labu, dengan Area, Eccentricity, Solidity, dan Compactness sebagai prediktor utama dalam klasifikasi.

10.3.6 Intepretasi Odds Ratio dan Confidence Interval

coefs <- summary(model_logit)$coefficients
OR <- exp(coefs[, "Estimate"])
CI_lower <- exp(coefs[, "Estimate"] - 1.96 * coefs[, "Std. Error"])
CI_upper <- exp(coefs[, "Estimate"] + 1.96 * coefs[, "Std. Error"])
odds_ratio_table <- cbind(OR, CI_lower, CI_upper)
round(odds_ratio_table, 3)
##                             OR     CI_lower     CI_upper
## (Intercept)       2.309477e+13 0.000000e+00 1.464551e+39
## Area              1.000000e+00 1.000000e+00 1.000000e+00
## Perimeter         1.000000e+00 1.000000e+00 1.000000e+00
## Major_Axis_Length 1.000000e+00 1.000000e+00 1.000000e+00
## Minor_Axis_Length 1.000000e+00 1.000000e+00 1.000000e+00
## Eccentricity      8.936138e+31 2.495654e+19 3.199744e+44
## Solidity          0.000000e+00 0.000000e+00 0.000000e+00
## Extent            3.740000e-01 3.000000e-02 4.593000e+00
## Roundness         5.578420e+02 1.020000e-01 3.048166e+06
## Aspect_Ration     1.000000e+00 1.000000e+00 1.000000e+00
## Compactness       1.265753e+50 7.574051e+37 2.115291e+62

Odds Ratio (OR) dan Confidence Interval (CI) memberikan gambaran kekuatan dan arah pengaruh masing-masing variabel terhadap peluang sebuah biji labu diklasifikasikan sebagai “Çerçevelik”. Berikut interpretasinya:

  • Eccentricity memiliki OR sebesar 8,94 × 10³¹ (CI: 2,50 × 10¹⁹ – 3,20 × 10⁴⁴), yang sangat besar dan CI tidak melewati 1, menandakan bahwa peningkatan satu satuan eccentricity sangat meningkatkan peluang klasifikasi “Çerçevelik”.
  • Solidity memiliki OR mendekati nol (CI: 0 – 0), artinya peningkatan solidity sangat menurunkan peluang menjadi “Çerçevelik”.
  • Compactness juga memiliki OR yang sangat besar (1,27 × 10⁵⁰; CI: 7,57 × 10³⁷ – 2,12 × 10⁶²), menunjukkan compactness adalah prediktor yang sangat kuat dan positif untuk klasifikasi “Çerçevelik”.
  • Roundness memiliki OR 557,84 (CI: 0,102 – 3.048.166), meskipun CI sangat lebar dan melintasi 1, sehingga kurang pasti secara statistik.
  • Extent memiliki OR 0,374 (CI: 0,03 – 4,59), juga CI yang melintasi 1, sehingga tidak signifikan.
  • Area, Perimeter, Major_Axis_Length, Minor_Axis_Length, dan Aspect_Ration memiliki OR mendekati 1 dengan CI sangat sempit di sekitar 1, menunjukkan tidak ada efek yang berarti atau signifikan pada klasifikasi.
  • (Intercept) memiliki OR dan CI yang sangat besar dan sangat lebar; nilainya tidak diinterpretasikan secara substantif.

Dengan demikian, eccentricity, solidity, dan compactness adalah prediktor yang sangat kuat dalam membedakan jenis biji labu pada dataset ini. Nilai odds ratio yang sangat besar/kecil mencerminkan pengaruh yang sangat besar terhadap perubahan peluang klasifikasi.

10.3.7 Goodness of Fit: Hosmer-Lemeshow Test

library(ResourceSelection)
## ResourceSelection 0.3-6   2023-06-27
hoslem.test(pumpkin_data$Class_bin, fitted(model_logit), g=10)
## 
##  Hosmer and Lemeshow goodness of fit (GOF) test
## 
## data:  pumpkin_data$Class_bin, fitted(model_logit)
## X-squared = 15.686, df = 8, p-value = 0.0471

Hasil uji Hosmer-Lemeshow goodness of fit menunjukkan nilai statistik chi-squared sebesar 15,686 dengan derajat kebebasan 8 dan nilai p = 0,0471.

Karena nilai p < 0,05, maka dapat disimpulkan bahwa terdapat perbedaan yang signifikan antara prediksi model dengan data aktual. Hal ini menandakan bahwa model regresi logistik yang dibangun kurang baik dalam menyesuaikan data (kurang fit). Dengan kata lain, masih terdapat ketidaksesuaian antara hasil predi

10.4 Kesimpulan

  • Model logistik yang dibangun pada dataset Pumpkin Seeds menunjukkan bahwa variabel Area, Eccentricity, Solidity, dan Compactness berpengaruh signifikan terhadap peluang sebuah biji labu diklasifikasikan sebagai “Çerçevelik”.

  • Odds ratio memberikan interpretasi intuitif terkait kekuatan dan arah pengaruh setiap prediktor, di mana nilai odds ratio yang sangat besar atau sangat kecil menandakan pengaruh yang dominan terhadap hasil klasifikasi.

  • Hasil uji Hosmer-Lemeshow menunjukkan nilai p sebesar 0,0471 (p < 0,05), sehingga terdapat perbedaan signifikan antara prediksi model dengan data aktual. Dengan demikian, model ini dinilai kurang fit terhadap data.

  • Walaupun demikian, model logistik yang dibangun tetap mampu mengidentifikasi variabel-variabel utama yang penting untuk klasifikasi jenis biji labu. Model ini dapat digunakan sebagai dasar untuk klasifikasi otomatis varietas biji labu berdasarkan karakteristik fisik yang terukur, namun perlu dilakukan evaluasi dan penyempurnaan lebih lanjut agar prediksi yang dihasilkan dapat lebih akurat dan sesuai dengan data observasi.

10.5 Sumber

11 Regresi Logistik dengan Prediktor Nominal, Ordinal, dan Rasio

Regresi logistik adalah metode analisis statistik yang digunakan untuk memodelkan hubungan antara variabel respons biner—yang hanya memiliki dua kategori dengan satu atau lebih variabel prediktor. Dalam penerapannya, variabel prediktor dapat memiliki berbagai jenis skala pengukuran, yaitu:

  1. Nominal: Variabel yang terdiri dari kategori yang tidak memiliki urutan atau ranking tertentu. Sebagai contoh, jenis kelamin (laki-laki dan perempuan). Dalam regresi logistik, variabel nominal biasanya dikonversi menjadi variabel dummy (misalnya, perempuan = 1, laki-laki = 0).

  2. Ordinal: Variabel yang memiliki urutan atau peringkat antara kategori, meskipun jarak antar kategori tidak selalu sama. Contoh dari variabel ordinal adalah tingkat pendidikan (SMA, Sarjana, Magister, Doktor). Dalam regresi logistik, variabel ordinal bisa diperlakukan baik sebagai nominal (dengan dummy untuk setiap kategori) atau sebagai rasio dengan memberikan nilai tertentu yang mencerminkan urutan atau jarak antar tingkatannya.

  3. Rasio: Variabel numerik kontinu yang memiliki nol absolut dan rasio yang bermakna. Contoh yang umum adalah pendapatan yang dapat langsung dimasukkan dalam model regresi logistik tanpa perlu transformasi khusus.

Bab ini akan mengeksplorasi bagaimana regresi logistik dapat diterapkan dengan berbagai jenis prediktor, baik nominal, ordinal, maupun rasio, melalui simulasi data dan analisis eksplorasi yang melibatkan dataset fiktif.

11.1 Simulasi Data

Kita membuat dataset simulasi baru dengan 500 observasi, relevan untuk mahasiswa. Variabel-variabel yang digunakan adalah:

  • campus: Nominal (On-Campus, Off-Campus). Tempat tinggal mahasiswa apakah di kampus (On-Campus) atau di luar kampus (Off-Campus)

  • study_effort: Ordinal (Low, Medium, High)

  • study_hours: Rasio (jam belajar per minggu, distribusi normal)

  • pass_exam: Respons biner (0 = tidak lulus, 1 = lulus)

library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ purrr     1.0.4
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.2     ✔ tibble    3.3.0
## ✔ lubridate 1.9.4     ✔ tidyr     1.3.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter()     masks stats::filter()
## ✖ dplyr::group_rows() masks kableExtra::group_rows()
## ✖ dplyr::lag()        masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(broom)
library(knitr)
library(kableExtra)
set.seed(1234)
n <- 500
campus <- sample(c("On-Campus", "Off-Campus"), n, replace = TRUE)
study_effort <- sample(c("Low", "Medium", "High"), n, replace = TRUE)
study_hours <- rnorm(n, mean = 15, sd = 5)

logit_p <- -3 + 0.8 * (campus == "On-Campus") + 1.2 * as.numeric(factor(study_effort, ordered = TRUE)) + 0.1 * study_hours
p <- 1 / (1 + exp(-logit_p))

pass_exam <- rbinom(n, 1, p)

sim_data <- tibble(pass_exam, campus, study_effort, study_hours)

head(sim_data)

Interpretasi: Dataset berisi 500 observasi mahasiswa dengan kolom pass_exam (biner), campus (On-Campus/Off-Campus), study_effort (Low/Medium/High), dan study_hours (jam belajar per minggu). Probabilitas lulus ujian dihasilkan dari kombinasi linier prediktor dengan koefisien tertentu.

11.2 Eksplorasi Data

Kita mengeksplorasi distribusi pass_exam dan rata-rata study_hours untuk setiap kelompok pass_exam.

sim_data %>% 
  dplyr::group_by(pass_exam) %>% 
  dplyr::summarise(
    Jumlah = dplyr::n(),
    Rata2_Study_Hours = mean(study_hours)
  )

Interpretasi: Tabel menunjukkan jumlah mahasiswa yang lulus (pass_exam = 1) dan tidak lulus (pass_exam = 0), serta rata-rata jam belajar per minggu untuk masing-masing kelompok. Ini memberikan gambaran awal tentang hubungan antara jam belajar dan kelulusan ujian.

11.3 Perlakuan Variabel Ordinal

Kita akan memodelkan study_effort dengan dua pendekatan: (1) sebagai nominal (dummy variables) dan (2) sebagai numerik (mencerminkan urutan ordinal).

11.3.1 Treat sebagai Nominal (Dummy)

Kita mengubah study_effort menjadi faktor dengan Low sebagai baseline.

sim_data_nominal <- sim_data %>% 
  mutate(
    study_effort = factor(study_effort, levels = c("Low", "Medium", "High"))
  )

model_nominal <- glm(pass_exam ~ campus + study_effort + study_hours, data = sim_data_nominal, family = binomial)
summary(model_nominal)
## 
## Call:
## glm(formula = pass_exam ~ campus + study_effort + study_hours, 
##     family = binomial, data = sim_data_nominal)
## 
## Coefficients:
##                    Estimate Std. Error z value Pr(>|z|)    
## (Intercept)        -0.16323    0.38133  -0.428  0.66861    
## campusOn-Campus     0.25366    0.21307   1.190  0.23385    
## study_effortMedium  1.43618    0.34161   4.204 2.62e-05 ***
## study_effortHigh   -0.92388    0.23204  -3.982 6.85e-05 ***
## study_hours         0.06865    0.02284   3.006  0.00265 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 609.16  on 499  degrees of freedom
## Residual deviance: 526.94  on 495  degrees of freedom
## AIC: 536.94
## 
## Number of Fisher Scoring iterations: 5

Interpretasi Koefisien:

  • Intercept (-0.16323)

    • Log-odds dasar untuk mahasiswa Off-Campus dengan usaha belajar Low dan study_hours = 0.

    • Tidak signifikan (p = 0.66861 > alpha = 0.05), artinya baseline ini tidak berbeda secara signifikan dari probabilitas 50%.

    • Odds Ratio = 0.85: Peluang lulus sedikit lebih rendah daripada baseline, namun tidak signifikan.

  • campusOn-Campus (0.25366):

    • Mahasiswa yang tinggal di lingkungan kampus memiliki log-odds lulus lebih tinggi sebesar 0.25 dibandingkan yang tinggal di luar kampus (referensi).

    • Tidak signifikan (p = 0.23385 > alpha = 0.05), artinya tinggal di kampus memiliki peluang lulus yang lebih tinggi tetapi tidak secara signifikan dibandingkan tinggal di luar kampus.

    • Odds Ratio = 1.29: Peluang lulus tinggal di kampus sedikit lebih besar daripada tinggal di luar kampus, namun tidak signifikan.

  • study_effort

    • Medium (1.43618):

      • Mahasiswa dengan usaha belajar medium memiliki log-odds lulus yang lebih tinggi sebesar 1.44 dibandingkan dengan yang usaha belajarnya rendah.

      • Signifikan (p = \(2.62 \times 10^{-5}\)< alpha = 0.05), artinya usaha belajar medium meningkatkan peluang lulus dibanding usaha belajar rendah.

      • Odds Ratio = 4.2: Peluang lulus usaha belajar medium 4.2 kali lebih besar dibanding usaha belajar rendah.

    • High (-0.92388):

      • Mahasiswa dengan usaha belajar tinggi memiliki log-odds lulus lebih rendah sebesar -0.92 dibandingkan dengan yang usaha belajarnya rendah.

      • Signifikan (p = \(6.85 \times 10^{-5}\) < alpha = 0.05), artinya usaha belajar tinggi menurunkan peluang lulus dibanding usaha belajar rendah.

      • Odds Ratio = 0.4: Peluang lulus usaha belajar tinggi hanya 40% dari peluang lulus usaha belajar rendah.

  • study_hours (0.06865):

    • Setiap kenaikan 1 satuan jam belajar per minggu (misal 1 jam), meningkatkan log-odds lulus sebesar 0.07.

    • Signifikan (p = 0.00265< alpha = 0.05), artinya jam belajar berhubungan positif dengan peluang lulus.

    • Odds Ratio = 1.07: Setiap kenaikan 1 jam meningkatkan peluang lulus sekitar 7%.

Intepretasi Goodness-of-Fit:

  • Null deviance (609.16): Deviance model tanpa prediktor.

  • Residual deviance (526.94): Deviance model dengan prediktor. Penurunan dari null ke residual deviance menunjukkan model memberikan informasi yang baik.

  • AIC (536.94): Nilai AIC yang lebih kecil menunjukkan model yang lebih baik dalam menyeimbangkan kecocokan dan kompleksitas.

Signifikansi Model

  • Variabel tingkat usaha belajar (Medium dan Tinggi) dan jam belajar signifikan meningkatkan peluang lulus.

  • Variabel tempat tinggal tidak signifikan pada taraf 5%.

  • Usaha belajar Tinggi justru berhubungan dengan penurunan peluang lulus dibandingkan usaha belajar rendah dalam data ini, yang bisa diakibatkan oleh hasil data simulasi.

Kesimpulan Praktis

  • Usaha Belajar dan Jam Belajar adalah prediktor kuat untuk peluang kelulusan, dengan usaha belajar Medium meningkatkan peluang lulus, sementara High justru menurunkan peluang.

  • Tempat Tinggal tidak berpengaruh signifikan, meskipun mahasiswa On-Campus sedikit lebih berpeluang lulus.

  • Model cukup baik dalam memprediksi kelulusan dibandingkan model tanpa prediktor, namun dapat lebih ditingkatkan dengan menambahkan variabel lain seperti faktor sosial atau psikologis.

11.3.2 Treat sebagai Rasio (Skor)

Kita mengkodekan study_effort sebagai numerik: Low = 1, Medium = 2, High = 3.

sim_data_numeric <- sim_data %>% 
  mutate(
    study_effort_numeric = case_when(
      study_effort == "Low" ~ 1,
      study_effort == "Medium" ~ 2,
      study_effort == "High" ~ 3
    )
  )

model_numeric <- glm(pass_exam ~ campus + study_effort_numeric + study_hours, data = sim_data_numeric, family = binomial)
summary(model_numeric)
## 
## Call:
## glm(formula = pass_exam ~ campus + study_effort_numeric + study_hours, 
##     family = binomial, data = sim_data_numeric)
## 
## Coefficients:
##                      Estimate Std. Error z value Pr(>|z|)    
## (Intercept)           1.01770    0.42739   2.381  0.01726 *  
## campusOn-Campus       0.29906    0.20250   1.477  0.13971    
## study_effort_numeric -0.56044    0.12524  -4.475 7.64e-06 ***
## study_hours           0.06119    0.02140   2.860  0.00424 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 609.16  on 499  degrees of freedom
## Residual deviance: 577.41  on 496  degrees of freedom
## AIC: 585.41
## 
## Number of Fisher Scoring iterations: 4

Intepretasi Koefisien:

  • Intercept (1.0177)

    • Ini adalah log-odds dasar untuk mahasiswa Off-Campus dengan study_effort = Low (nilai 1) dan study_hours = 0.

    • Signifikan (p = 0.01726 < 0.05), artinya baseline ini berbeda signifikan dari probabilitas 50%.

    • Odds Ratio = 2.77: Peluang lulus lebih besar dibandingkan dengan baseline.

  • campusOn-Campus (0.2991)

    • Mahasiswa yang tinggal di kampus (On-Campus) memiliki log-odds lulus lebih tinggi sebesar 0.2991 dibandingkan dengan mahasiswa yang tinggal di luar kampus (Off-Campus).

    • Tidak signifikan (p = 0.1397 > 0.05), artinya tinggal di kampus memiliki peluang lulus yang lebih tinggi, tetapi tidak signifikan dibandingkan tinggal di luar kampus.

    • Odds Ratio = 1.35: Peluang lulus mahasiswa On-Campus 1.35 kali lebih besar daripada yang tinggal di luar kampus, namun perbedaannya tidak signifikan.

  • study_effort_numeric (-0.5604)

    • Setiap kenaikan satu tingkat study_effort, mengurangi log-odds kelulusan.

    • SIgnifikan (p = \(7.64 \times 10^{-6}\)< 0.05), artinya usaha belajar yang lebih tinggi menurunkan peluang kelulusan dibandingkan usaha belajar rendah.

    • Odds Ratio = 0.57: Peluang lulus dengan usaha belajar Medium/High hanya 57% dari peluang lulus dennga usaha belajar low.

  • study_hours (0.06119)

    • Setiap tambahan satu jam belajar per minggu meningkatkan log-odds kelulusan sebesar 0.06119.

    • Signifikan (p = 0.00424 < 0.05), artinya jam belajar berhubungan positif dengan peluang lulus.

    • Odds Ratio = 1.06: Setiap tambahan 1 jam belajar per minggu meningkatkan peluang lulus sekitar 6%.

Goodness of Fit

  • Null deviance: 609.16 (model tanpa prediktor).

  • Residual deviance: 577.41 (model dengan prediktor).

  • AIC: 585.41, menunjukkan model ini memberikan kecocokan yang baik.

Signifikansi Model

  • study_effort_numeric dan study_hours sangat signifikan (p < 0.05), dengan study_effort_numeric menurunkan peluang kelulusan sedangkan study_hours meningkatkan peluang kelulusan.

  • campusOn-Campus tidak signifikan (p = 0.1397), menunjukkan tempat tinggal tidak mempengaruhi peluang kelulusan secara signifikan.

Kesimpulan Praktis

  • Usaha belajar yang lebih tinggi mengurangi peluang kelulusan, sementara lebih banyak jam belajar meningkatkan peluang lulus.

  • Tempat tinggal (kampus atau luar kampus) tidak memiliki pengaruh signifikan terhadap kelulusan.

  • Model memiliki kecocokan yang cukup baik, tetapi masih bisa ditingkatkan dengan variabel tambahan.

Perbandingan Model berdasarkan AIC

list(
  AIC_Nominal = AIC(model_nominal),
  AIC_Numeric = AIC(model_numeric)
)
## $AIC_Nominal
## [1] 536.942
## 
## $AIC_Numeric
## [1] 585.4116

Interpretasi: Model dengan AIC lebih kecil lebih disukai karena menyeimbangkan kecocokan dan kompleksitas dengan lebih baik.

Goodness-of-Fit Model

Kita menghitung McFadden’s R² untuk mengevaluasi kecocokan model.

nullmod <- glm(pass_exam ~ 1, data = sim_data, family = binomial)
r2_nominal <- 1 - (logLik(model_nominal)/logLik(nullmod))
r2_numeric <- 1 - (logLik(model_numeric)/logLik(nullmod))

list(
  McFadden_R2_Nominal = r2_nominal,
  McFadden_R2_Numeric = r2_numeric
)
## $McFadden_R2_Nominal
## 'log Lik.' 0.1349697 (df=5)
## 
## $McFadden_R2_Numeric
## 'log Lik.' 0.05211861 (df=4)

Interpretasi: McFadden’s R² mengukur seberapa baik model memprediksi dibandingkan model null. Nilai yang lebih besar menunjukkan model yang lebih baik.

Visualisasi Prediksi: Kita memvisualisasikan probabilitas prediksi lulus ujian berdasarkan jam belajar dan usaha belajar.

sim_data_nominal <- sim_data_nominal %>% 
  mutate(predicted = predict(model_nominal, type = "response"))
sim_data_numeric <- sim_data_numeric %>% 
  mutate(predicted = predict(model_numeric, type = "response"))

# Plot untuk model nominal
sim_data_nominal %>% 
  ggplot(aes(x = study_hours, y = predicted, color = study_effort)) + 
  geom_point(alpha = 0.6) + 
  labs(title = "Prediksi Probabilitas Lulus (Ordinal sebagai Nominal)", 
       x = "Jam Belajar per Minggu", y = "Prediksi Probabilitas Lulus") +
  theme_minimal()

# Plot untuk model numeric
sim_data_numeric %>% 
  ggplot(aes(x = study_hours, y = predicted, color = as.factor(study_effort_numeric))) + 
  geom_point(alpha = 0.6) + 
  labs(title = "Prediksi Probabilitas Lulus (Ordinal sebagai Numerik)", 
       x = "Jam Belajar per Minggu", y = "Prediksi Probabilitas Lulus") +
  theme_minimal()

Interpretasi: Visualisasi menunjukkan hubungan antara jam belajar dan probabilitas lulus, dengan warna berbeda untuk tingkat usaha belajar. Pendekatan nominal dan numerik dibandingkan untuk melihat perbedaan pola prediksi.

Ringkasan Koefisien Model

# Ringkasan model nominal
tidy(model_nominal) %>% 
  kable(format = "latex", booktabs = TRUE, caption = "Ringkasan Koefisien Model dengan Ordinal sebagai Nominal") %>%
  kable_styling(latex_options = c("hold_position", "striped"))
# Ringkasan model numeric
tidy(model_numeric) %>% 
  kable(format = "latex", booktabs = TRUE, caption = "Ringkasan Koefisien Model dengan Ordinal sebagai Numerik") %>%
  kable_styling(latex_options = c("hold_position", "striped"))

Interpretasi: Tabel menunjukkan estimasi koefisien, standar error, nilai z, dan p-value. Koefisien positif meningkatkan log-odds kelulusan, sedangkan koefisien negatif menurunkannya.

Kesimpulan

  • campus: Mahasiswa On-Campus memiliki peluang lulus lebih tinggi dibandingkan Off-Campus, tetapi tidak signifikan.

  • study_effort:

    • Sebagai dummy: Medium dan High dibandingkan dengan Low, menunjukkan efek spesifik setiap tingkat usaha belajar.

    • Sebagai numerik: Setiap kenaikan tingkat usaha belajar justru menurunkan peluang lulus secara linier.

  • study_hours: Jam belajar yang lebih banyak meningkatkan peluang lulus ujian.

  • Perbandingan Model: Model dengan AIC lebih kecil lebih disukai.

  • McFadden’s R² menunjukkan seberapa baik model menjelaskan data dibandingkan model null.

Model Perlakuan Ordinal Sebagai Numeric: Model dengan perlakuan ordinal sebagai numeric memberikan interpretasi yang lebih sederhana, selama asumsi jarak antar tingkat usaha belajar konsisten.

12 Pemilihan Model Regresi Logistik dan Evaluasi

12.1 Membangun Model Regresi Logistik: Pendekatan Confirmatory dan Exploratory

Dalam analisis regresi logistik, pemilihan model yang tepat sangat penting untuk menghasilkan model yang efektif dalam memprediksi probabilitas terjadinya suatu peristiwa (respons biner). Terdapat dua pendekatan utama dalam pengembangan model ini, yaitu Pendekatan Konfirmatori dan Pendekatan Eksploratori, yang masing-masing memiliki tujuan dan cara yang berbeda dalam membangun model.

12.1.1 Confirmatory (Pendekatan Konfirmatori)

Pendekatan ini digunakan ketika peneliti sudah memiliki teori atau hipotesis yang jelas mengenai hubungan antara variabel prediktor dan respons. Dalam pendekatan ini, peneliti berfokus untuk menguji teori atau hipotesis yang telah ada.

Ciri-ciri:

  • Berbasis Teori: Model dikembangkan dengan merujuk pada teori yang sudah ada atau temuan penelitian sebelumnya.

  • Tujuan Utama: Fokus utama adalah menguji validitas teori atau hipotesis yang diajukan, bukan sekadar mencari model terbaik. Peneliti ingin memastikan bahwa hubungan yang dihipotesiskan memang benar-benar signifikan.

  • Pengujian Efek: Peneliti mulai dengan model yang komprehensif dan menguji apakah penambahan atau pengurangan suatu variabel (misalnya, variabel interaksi) membawa peningkatan signifikan terhadap model.

  • Uji Signifikansi: Signifikansi diuji dengan membandingkan model yang mengandung efek tertentu dengan model yang tidak mengandung efek tersebut. Salah satu metode yang sering digunakan adalah Likelihood Ratio Test.

Contoh penggunaan: Misalnya, teori yang ada menyatakan bahwa faktor x1 dan x2 berpengaruh terhadap probabilitas seseorang membeli produk. Berdasarkan teori tersebut, model logistik dibangun dengan memasukkan variabel x1 dan x2, lalu diuji untuk melihat apakah kontribusi x2 memang memberikan pengaruh yang signifikan.

12.1.2 Exploratory (Pendekatan Eksploratori)

Pendekatan ini digunakan ketika peneliti tidak memiliki teori yang pasti atau bertujuan untuk mengeksplorasi hubungan yang mungkin ada antara variabel-variabel. Pendekatan ini lebih fleksibel dan berfokus pada pencarian pola atau hubungan yang tidak terduga dalam data.

Ciri-ciri:

  • Pembangunan Bertahap: Model dibangun secara bertahap dengan tujuan untuk menemukan kombinasi prediktor terbaik berdasarkan data yang ada.

  • Pemilihan Variabel Berdasarkan Statistik: Variabel-variabel dipilih berdasarkan kriteria statistik, seperti AIC, deviance, atau log-likelihood, yang mengukur kesesuaian model dengan data.

Metode Seleksi Variabel

Pemilihan variabel dilakukan melalui berbagai pendekatan, seperti:

  • Forward Selection: Dimulai dengan model yang kosong, kemudian variabel-variabel dimasukkan satu per satu jika mereka terbukti signifikan.

  • Backward Elimination: Dimulai dengan model yang sudah penuh, kemudian variabel yang tidak signifikan dikeluarkan.

  • Stepwise Selection: Gabungan dari kedua metode di atas, di mana variabel dapat dimasukkan atau dikeluarkan secara dinamis berdasarkan signifikansi mereka.

Proses seleksi dilakukan melalui: - Forward Selection: Mulai dari model kosong, satu per satu variabel dimasukkan jika signifikan. - Backward Elimination: Mulai dari model penuh, variabel yang tidak signifikan dikeluarkan. - Stepwise Selection: Gabungan dari keduanya, variabel dapat masuk dan keluar secara dinamis.

Tujuan: Pendekatan ini bertujuan untuk menemukan model yang sederhana namun efektif, yang dikenal dengan istilah parsimonious model. Model ini cukup sederhana tetapi mampu memberikan performa prediksi yang baik, menghindari overfitting atau kompleksitas yang tidak perlu.

Pemilihan Pendekatan

Pemilihan antara pendekatan konfirmatori dan eksploratori sangat bergantung pada tujuan penelitian. Jika tujuan penelitian adalah untuk menguji hipotesis tertentu yang sudah didasarkan pada teori yang jelas, maka pendekatan konfirmatori lebih tepat digunakan. Namun, jika tujuan penelitian adalah untuk menemukan model terbaik yang berdasarkan data, tanpa teori yang jelas, maka pendekatan eksploratori lebih cocok.

Dalam banyak kasus, kedua pendekatan ini digunakan secara bersamaan: teori menjadi dasar untuk membangun model, sementara eksplorasi data digunakan untuk menyempurnakan model tersebut. Dengan demikian, kedua pendekatan ini saling melengkapi dan memungkinkan peneliti untuk mendapatkan hasil yang lebih komprehensif.

12.1.3 Simulasi Data

library(knitr)
library(dplyr)
library(ggplot2)
library(MASS)
## 
## Attaching package: 'MASS'
## The following object is masked from 'package:dplyr':
## 
##     select
library(caret)
## Loading required package: lattice
## 
## Attaching package: 'caret'
## The following object is masked from 'package:purrr':
## 
##     lift
library(pROC)
## Type 'citation("pROC")' for a citation.
## 
## Attaching package: 'pROC'
## The following objects are masked from 'package:stats':
## 
##     cov, smooth, var
library(DescTools)
## 
## Attaching package: 'DescTools'
## The following objects are masked from 'package:caret':
## 
##     MAE, RMSE
set.seed(79)
n <- 200
x1 <- rnorm(n)
x2 <- rbinom(n, 1, 0.5)
x3 <- rnorm(n)
lin_pred <- -0.5 + 1.2 * x1 - 0.8 * x2 + 0.5 * x3
p <- 1 / (1 + exp(-lin_pred))
y <- rbinom(n, 1, p)
df <- data.frame(y = as.factor(y), x1, x2, x3)
head(df)

12.1.4 Pemilihan Model

Model Full

model_full <- glm(y ~ x1 + x2 + x3, data = df, family = binomial)
summary(model_full)
## 
## Call:
## glm(formula = y ~ x1 + x2 + x3, family = binomial, data = df)
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept)  -0.5008     0.2402  -2.085   0.0371 *  
## x1            0.8868     0.1760   5.039 4.67e-07 ***
## x2           -0.5481     0.3293  -1.664   0.0960 .  
## x3            0.3852     0.1783   2.160   0.0307 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 260.19  on 199  degrees of freedom
## Residual deviance: 220.58  on 196  degrees of freedom
## AIC: 228.58
## 
## Number of Fisher Scoring iterations: 4

12.2 Metode Stepwise: Forward, Backward, dan Kedua Arah

null_model <- glm(y ~ 1, data = df, family = binomial)
step_forward <- step(null_model, direction = "forward", scope = formula(model_full), trace = FALSE)
step_backward <- step(model_full, direction = "backward", trace = FALSE)
step_both <- step(null_model, direction = "both", scope = formula(model_full), trace = FALSE)

AIC(model_full, step_forward, step_backward, step_both)

12.3 Evaluasi Model: ROC dan AUC

pred_prob <- predict(step_both, type = "response")
roc_obj <- roc(df$y, pred_prob)
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
plot(roc_obj, main = "Kurva ROC", col = "blue")

auc(roc_obj)
## Area under the curve: 0.7648

12.4 Pseudo R-Squared

PseudoR2(step_both, which = c("CoxSnell", "Nagelkerke", "McFadden"))
##   CoxSnell Nagelkerke   McFadden 
##  0.1796728  0.2468937  0.1522336

12.5 Tabel Klasifikasi dan Evaluasi

pred_class <- ifelse(pred_prob >= 0.5, 1, 0)
conf_matrix <- confusionMatrix(factor(pred_class), df$y, positive = "1")
conf_matrix
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction   0   1
##          0 115  36
##          1  14  35
##                                          
##                Accuracy : 0.75           
##                  95% CI : (0.684, 0.8084)
##     No Information Rate : 0.645          
##     P-Value [Acc > NIR] : 0.000956       
##                                          
##                   Kappa : 0.4132         
##                                          
##  Mcnemar's Test P-Value : 0.002979       
##                                          
##             Sensitivity : 0.4930         
##             Specificity : 0.8915         
##          Pos Pred Value : 0.7143         
##          Neg Pred Value : 0.7616         
##              Prevalence : 0.3550         
##          Detection Rate : 0.1750         
##    Detection Prevalence : 0.2450         
##       Balanced Accuracy : 0.6922         
##                                          
##        'Positive' Class : 1              
## 
conf_matrix$byClass[c("Sensitivity", "Specificity")]
## Sensitivity Specificity 
##   0.4929577   0.8914729

Kesimpulan: Model terbaik berdasarkan AIC tidak ada karena keempat model menunjukkan nilai AIC = 228.5844 karena keempat parameter (intercept, x1, x2, dan x3 signifikan). ROC menunjukkan AUC sebesar 0.77 yang cukup baik. Pseudo-R² dan hasil klasifikasi juga menunjukkan model cukup akurat.

12.6 Metode Perbandingan Model dalam Regresi Logistik

Tujuan Memberikan cara membandingkan model regresi logistik menggunakan ukuran:

  • Deviance

  • AIC (Akaike Information Criterion)

  • Likelihood-Ratio

serta menjelaskan prinsip Parsimony dalam pemilihan model.

library(MASS)
library(broom)
library(DescTools)
set.seed(79)

Simulasi Data

n <- 300
x1 <- rnorm(n)
x2 <- rbinom(n, 1, 0.5)
x3 <- rnorm(n)
lin_pred <- -1 + 1.2 * x1 - 0.6 * x2 + 0.8 * x3
p <- 1 / (1 + exp(-lin_pred))
y <- rbinom(n, 1, p)
data <- data.frame(y = as.factor(y), x1, x2, x3)

Pembuatan Model

model1 <- glm(y ~ x1, data = data, family = binomial)
model2 <- glm(y ~ x1 + x2, data = data, family = binomial)
model3 <- glm(y ~ x1 + x2 + x3, data = data, family = binomial)

Perbandingan AIC dan Deviance

model_comp <- data.frame(
  Model = c("Model 1", "Model 2", "Model 3"),
  AIC = c(AIC(model1), AIC(model2), AIC(model3)),
  Deviance = c(deviance(model1), deviance(model2), deviance(model3))
)
model_comp

12.7 Likelihood-Ratio Test

anova(model1, model2, test = "LRT")
anova(model2, model3, test = "LRT")

12.8 Prinsip Parsimony

Model yang lebih kompleks sering kali memiliki nilai AIC dan deviance yang lebih rendah karena model tersebut lebih mampu menangkap variasi dalam data. Namun, ada beberapa pertimbangan penting yang perlu diperhatikan:

  • Kemudahan Interpretasi: Model yang lebih sederhana cenderung lebih mudah dipahami dan lebih mudah untuk diinterpretasikan, terutama ketika digunakan untuk membuat keputusan praktis.

  • AIC Tidak Signifikan: Jika penurunan AIC dari model yang lebih kompleks ke model yang lebih sederhana tidak signifikan, maka sebaiknya pilih model yang lebih sederhana.

  • Parsimony: Prinsip parsimony mengutamakan kesederhanaan dalam model. Model yang lebih sederhana, meskipun mungkin sedikit lebih buruk dalam hal goodness-of-fit, dapat menghindari overfitting, di mana model terlalu sesuai dengan data pelatihan dan kurang dapat menggeneralisasi data baru.

Rumus AIC

\[ \mathrm{AIC} = -2(\log L - k) = -2 \log L + 2k \]

Penjelasan: AIC adalah ukuran untuk menilai kualitas model berdasarkan dua aspek: goodness-of-fit (melalui log-likelihood atau seberapa baik model memprediksi data) dan kompleksitas model (melalui jumlah parameter 𝑘k). AIC memberikan penalti pada model yang terlalu kompleks, meskipun model tersebut memiliki likelihood yang tinggi. Model dengan AIC yang lebih kecil dianggap lebih baik karena lebih sederhana namun tetap memadai dalam memodelkan data.

Rumus Deviance

\[ D = -2[\log L(\text{model}) - \log L(\text{model saturasi})] \]

Penjelasan: Deviance mengukur sejauh mana model saat ini menyimpang dari model saturasi (model yang sempurna, yang dapat menjelaskan semua variasi dalam data). Deviance yang kecil menunjukkan bahwa model yang digunakan sudah cukup baik dalam memprediksi data yang diamati, mendekati hasil yang diperoleh dari model saturasi. Ini berarti model sudah cocok dengan data yang ada dan memberikan prediksi yang sesuai.

Rumus Likelihood-Ratio

\[ G^2 = -2(\log L_0 - \log L_1) \]

Penjelasan: Statistik Likelihood Ratio (LRT) digunakan untuk menguji apakah penambahan variabel dalam model secara signifikan meningkatkan kecocokan model. Jika nilai G² besar dan p-value kecil (misalnya, kurang dari 0.05), ini menunjukkan bahwa model yang lebih kompleks memberikan kecocokan yang lebih baik dibandingkan dengan model yang lebih sederhana secara statistik, dengan perbedaan yang signifikan. Dengan kata lain, penambahan parameter pada model lebih kompleks memberikan informasi yang berguna untuk menjelaskan data, sehingga model yang lebih kompleks lebih baik dalam hal fit terhadap data.

12.9 Evaluasi Tabel Klasifikasi dan Akurasi Model

pred_prob <- predict(model3, type = "response")
pred_class <- factor(ifelse(pred_prob >= 0.5, 1, 0))
conf_matrix <- confusionMatrix(pred_class, data$y, positive = "1")
conf_matrix
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction   0   1
##          0 176  45
##          1  25  54
##                                           
##                Accuracy : 0.7667          
##                  95% CI : (0.7146, 0.8134)
##     No Information Rate : 0.67            
##     P-Value [Acc > NIR] : 0.0001614       
##                                           
##                   Kappa : 0.4438          
##                                           
##  Mcnemar's Test P-Value : 0.0231510       
##                                           
##             Sensitivity : 0.5455          
##             Specificity : 0.8756          
##          Pos Pred Value : 0.6835          
##          Neg Pred Value : 0.7964          
##              Prevalence : 0.3300          
##          Detection Rate : 0.1800          
##    Detection Prevalence : 0.2633          
##       Balanced Accuracy : 0.7105          
##                                           
##        'Positive' Class : 1               
## 

12.9.1 Sensitivitas dan Spesifisitas

  • Sensitivitas: Kemampuan model mendeteksi kelas positif secara benar (True Positive Rate)

\[ \text{Sensitivity} = \frac{\mathrm{TP}}{\mathrm{TP} + \mathrm{FN}} \]

  • Spesifisitas: Kemampuan model mendeteksi kelas negatif secara benar (True Negative Rate)

\[ \text{Specificity} = \frac{\mathrm{TN}}{\mathrm{TN} + \mathrm{FP}} \]

conf_matrix$byClass[c("Sensitivity", "Specificity")]
## Sensitivity Specificity 
##   0.5454545   0.8756219

Kesimpulan

  • Deviance yang kecil menunjukkan bahwa model lebih baik dalam mencocokkan data, karena perbedaan antara prediksi model dan data yang diamati lebih kecil.

  • AIC yang rendah menunjukkan keseimbangan antara kecocokan model dan jumlah parameter yang digunakan. Model dengan AIC lebih rendah dianggap lebih efisien, karena penalti diberikan untuk kompleksitas model yang lebih tinggi.

  • Likelihood Ratio Test digunakan untuk mengevaluasi apakah model yang lebih kompleks memberikan peningkatan kecocokan yang signifikan dibandingkan dengan model yang lebih sederhana. Jika besar dan p-value kecil, maka model kompleks dianggap lebih baik secara statistik.

  • Tabel klasifikasi membantu menilai seberapa baik model dalam memprediksi hasil aktual dibandingkan dengan hasil yang diprediksi, sehingga mengukur akurasi model secara langsung.

  • Prinsip Parsimony mengutamakan penggunaan model yang lebih sederhana asalkan kinerjanya mirip dengan model yang lebih kompleks, untuk menghindari overfitting dan memastikan model tetap dapat digeneralisasi dengan baik.

12.10 Detail ROC: Penjelasan Kurva ROC (Receiver Operating Characteristic)

Kurva ROC adalah alat visual yang digunakan untuk mengevaluasi performa model klasifikasi biner. Kurva ini menunjukkan trade-off antara True Positive Rate (Sensitivity) dan False Positive Rate (1 - Specificity) pada berbagai threshold klasifikasi.

12.10.1 Definisi

  • Sumbu Y: Sensitivity = True Positive Rate = \(\frac{\mathrm{TP}}{\mathrm{TP} + \mathrm{FN}}\)
  • Sumbu X: 1 - Specificity = False Positive Rate = \(\frac{\mathrm{FP}}{\mathrm{FP} + \mathrm{TN}}\)
  • Garis diagonal (dari kiri bawah ke kanan atas) menunjukkan performa acak (random guess).
  • Kurva yang mendekati pojok kiri atas menunjukkan performa klasifikasi yang lebih baik.

12.10.2. Cut-off dan Pergerakan Kurva

Saat cut-off menurun, model mengklasifikasikan lebih banyak pengamatan sebagai positif:

  • Sensitivitas naik

  • Spesifisitas turun

Saat cut-off naik, model menjadi lebih konservatif:

  • Sensitivitas turun

  • Spesifisitas naik

12.10.3. Kurva ROC Ideal

Kurva ideal memiliki bentuk:

  • Naik tajam secara vertikal hingga mencapai sensitivitas = 1

  • Lalu bergerak secara horizontal menuju 1 - specificity = 1

  • Area under the curve (AUC) mendekati 1

12.10.4. Interpretasi Luas Area (AUC)

  • AUC = 0.5: model tidak lebih baik dari tebak acak
  • AUC > 0.7: model cukup baik
  • AUC > 0.9: model sangat baik
  • AUC dikenal juga sebagai concordance index, yaitu probabilitas bahwa model memberikan nilai skor probabilitas yang lebih tinggi untuk kasus positif daripada kasus negatif.

12.10.5. Kegunaan Kurva ROC

  • Untuk membandingkan performa beberapa model klasifikasi
  • Untuk memilih threshold (cut-off) optimal berdasarkan kebutuhan aplikasi (misalnya: lebih penting menghindari false negative atau false positive?)

12.10.6. Visualisasi dalam R

Kurva ROC dapat dibuat menggunakan package pROC:

set.seed(79)
x1 <- rnorm(200)
x2 <- rbinom(200, 1, 0.5)
x3 <- rnorm(200)
lin_pred <- -1 + 1.5 * x1 - 0.7 * x2 + 0.6 * x3
p <- 1 / (1 + exp(-lin_pred))
y <- rbinom(200, 1, p)
data <- data.frame(y = as.factor(y), x1, x2, x3)
model <- glm(y ~ x1 + x2 + x3, data = data, family = binomial)
pred <- predict(model, type = "response")
roc_obj <- roc(data$y, pred)
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
plot(roc_obj)

auc(roc_obj)
## Area under the curve: 0.8061

12.10.7. Simulasi Pemilihan Threshold Optimal

Dalam memilih threshold terbaik, kita bisa mengevaluasi sensitivitas dan spesifisitas pada berbagai cut-off.

thresholds <- seq(0.1, 0.9, by = 0.05)
results <- data.frame(Threshold = thresholds)
results$Sensitivity <- sapply(thresholds, function(t) {
  pred_class <- ifelse(pred >= t, 1, 0)
  cm <- table(Pred = pred_class, Obs = data$y)
  TP <- cm["1", "1"]
  FN <- cm["0", "1"]
  TP / (TP + FN)
})
results$Specificity <- sapply(thresholds, function(t) {
  pred_class <- ifelse(pred >= t, 1, 0)
  cm <- table(Pred = pred_class, Obs = data$y)
  TN <- cm["0", "0"]
  FP <- cm["1", "0"]
  TN / (TN + FP)
})
print(results)
##    Threshold Sensitivity Specificity
## 1       0.10  0.91666667   0.3428571
## 2       0.15  0.90000000   0.4357143
## 3       0.20  0.88333333   0.5357143
## 4       0.25  0.78333333   0.6357143
## 5       0.30  0.75000000   0.6785714
## 6       0.35  0.66666667   0.7642857
## 7       0.40  0.60000000   0.8571429
## 8       0.45  0.58333333   0.8928571
## 9       0.50  0.51666667   0.9285714
## 10      0.55  0.40000000   0.9428571
## 11      0.60  0.36666667   0.9642857
## 12      0.65  0.26666667   0.9785714
## 13      0.70  0.23333333   0.9857143
## 14      0.75  0.16666667   0.9928571
## 15      0.80  0.08333333   0.9928571
## 16      0.85  0.03333333   0.9928571
## 17      0.90  0.01666667   0.9928571

Cut-off optimal bisa dipilih berdasarkan:

  • Maksimum dari Sensitivity + Specificit atau

  • mempertimbangkan trade-off sesuai tujuan aplikasi (misalnya: jika False Negative harus dihindari, maka prioritaskan sensitivitas tinggi)

12.10.8. Catatan

  • ROC cocok saat proporsi kelas seimbang
  • Untuk data dengan kelas tidak seimbang, precision-recall curve bisa lebih informatif

12.11 Precision-Recall Curve (PR Curve)

Penjelasan Precision-Recall Curve

Kurva Precision-Recall (PR) adalah alat evaluasi performa model klasifikasi, khususnya sangat berguna saat bekerja dengan data yang tidak seimbang (class imbalance).

12.11.1. Definisi

  • Precision (Presisi): Proporsi prediksi positif yang benar-benar positif

\[ \text{Precision} = \frac{\mathrm{TP}}{\mathrm{TP} + \mathrm{FP}} \]

  • Recall (Sensitivitas): Proporsi kasus positif yang berhasil diprediksi positif

\[ \text{Recall} = \frac{\mathrm{TP}}{\mathrm{TP} + \mathrm{FN}} \]

12.11.2. Interpretasi

  • PR Curve menunjukkan bagaimana presisi berubah saat recall meningkat.
  • Idealnya, kita ingin nilai presisi dan recall keduanya tinggi, tetapi biasanya ada trade-off.
  • Model dengan performa baik memiliki PR Curve yang melengkung ke pojok kanan atas.

12.11.3. Area Under PR Curve

  • Luas kurva (AUPRC) mendekati 1 berarti model sangat baik.
  • Baseline AUPRC = prevalensi kelas positif dalam data.

12.11.4. PR Curve vs ROC Curve

Aspek ROC Curve Precision-Recall Curve
Fokus Semua kelas Kelas positif saja
Kuat di Data seimbang Data tidak seimbang
Sumbu Y Sensitivitas (Recall) Precision
Sumbu X 1 - Spesifisitas Recall

12.11.5. Visualisasi PR Curve di R

library(PRROC)
## Loading required package: rlang
## 
## Attaching package: 'rlang'
## The following objects are masked from 'package:purrr':
## 
##     %@%, flatten, flatten_chr, flatten_dbl, flatten_int, flatten_lgl,
##     flatten_raw, invoke, splice
set.seed(79)
x1 <- rnorm(200)
x2 <- rbinom(200, 1, 0.5)
x3 <- rnorm(200)
lin_pred <- -1 + 1.5 * x1 - 0.7 * x2 + 0.6 * x3
p <- 1 / (1 + exp(-lin_pred))
y <- rbinom(200, 1, p)
data <- data.frame(y = y, x1, x2, x3)
model <- glm(y ~ x1 + x2 + x3, data = data, family = binomial)
prob <- predict(model, type = "response")
pr <- pr.curve(scores.class0 = prob[data$y == 1], 
               scores.class1 = prob[data$y == 0], 
               curve = TRUE)
plot(pr)

12.11.6. Catatan

  • PR Curve sangat informatif untuk kasus seperti deteksi penipuan atau diagnosis penyakit langka.
  • Gunakan PR Curve saat:
    • Kelas positif jauh lebih jarang daripada kelas negatif
    • Tujuan kasus lebih mementingkan presisi terhadap kelas minoritas

12.12 Pseudo R-squared pada Regresi Logistik

Tujuan

Dokumen ini menjelaskan dan menghitung pseudo R-squared dalam regresi logistik:
- \(R_{\text{Cox and Snell}}^2\)
- \(R_{\text{McFadden}}^2\)

Simulasi Data

set.seed(79)
n <- 300
x1 <- rnorm(n)
x2 <- rbinom(n, 1, 0.5)
x3 <- rnorm(n)
lin_pred <- -1 + 1.2 * x1 - 0.6 * x2 + 0.8 * x3
p <- 1 / (1 + exp(-lin_pred))
y <- rbinom(n, 1, p)
data <- data.frame(y = as.factor(y), x1, x2, x3)

Model Logistik dan Null Model

model <- glm(y ~ x1 + x2 + x3, data = data, family = binomial)
model_null <- glm(y ~ 1, data = data, family = binomial)

Likelihood dan Rumus \[ R_{\text{Cox and Snell}}^2 = 1 - \left(\frac{L_0}{L_M}\right)^{2/n} \]

\[ R_{\text{McFadden}}^2 = 1 - \frac{\log L_M}{\log L_0} \]

Dengan:
- \(L_0\): likelihood model null (tanpa prediktor)
- \(L_M\): likelihood model penuh

Perhitungan Manual R-squared

logL0 <- logLik(model_null)
logLM <- logLik(model)
L0 <- exp(logL0)
LM <- exp(logLM)
n <- nobs(model)
cox_snell <- 1 - (L0 / LM)^(2 / n)
mcfadden <- 1 - (as.numeric(logLM) / as.numeric(logL0))
r2 <- data.frame(
  R2_Cox_Snell = cox_snell,
  R2_McFadden = mcfadden
)
r2

Perhitungan Otomatis dengan Package Tambahan

Menggunakan pscl

if (!require(pscl)) install.packages("pscl"); library(pscl)
## Loading required package: pscl
## Classes and Methods for R originally developed in the
## Political Science Computational Laboratory
## Department of Political Science
## Stanford University (2002-2015),
## by and under the direction of Simon Jackman.
## hurdle and zeroinfl functions by Achim Zeileis.
pR2(model)
## fitting null model for pseudo-r2
##          llh      llhNull           G2     McFadden         r2ML         r2CU 
## -138.4993722 -190.2535907  103.5084370    0.2720276    0.2917996    0.4060065

Menggunakan rcompanion

if (!require(rcompanion)) install.packages("rcompanion"); library(rcompanion)
## Loading required package: rcompanion
nagelkerke(model)
## $Models
##                                               
## Model: "glm, y ~ x1 + x2 + x3, binomial, data"
## Null:  "glm, y ~ 1, binomial, data"           
## 
## $Pseudo.R.squared.for.model.vs.null
##                              Pseudo.R.squared
## McFadden                             0.272028
## Cox and Snell (ML)                   0.291800
## Nagelkerke (Cragg and Uhler)         0.406006
## 
## $Likelihood.ratio.test
##  Df.diff LogLik.diff  Chisq    p.value
##       -3     -51.754 103.51 2.7352e-22
## 
## $Number.of.observations
##           
## Model: 300
## Null:  300
## 
## $Messages
## [1] "Note: For models fit with REML, these statistics are based on refitting with ML"
## 
## $Warnings
## [1] "None"

Menggunakan DescTools

if (!require(DescTools)) install.packages("DescTools"); library(DescTools)
PseudoR2(model, which = "all")
##        McFadden     McFaddenAdj        CoxSnell      Nagelkerke   AldrichNelson 
##       0.2720276       0.2510030       0.2917996       0.4060065       0.2565211 
## VeallZimmermann           Efron McKelveyZavoina            Tjur             AIC 
##       0.4587679       0.3290930       0.4634930       0.3221756     284.9987444 
##             BIC          logLik         logLik0              G2 
##     299.8138743    -138.4993722    -190.2535907     103.5084370

Interpretasi

  • Nilai \(R^2\) mendekati 1 berarti model memiliki kekuatan prediktif yang baik.

  • McFadden \(R^2 > 0.2\) sering dianggap sebagai model dengan kecocokan yang baik.

  • Cox & Snell \(R^2\) lebih konservatif dan tidak pernah mencapai 1 penuh.

Gunakan beberapa pendekatan ini sebagai pelengkap untuk menilai performa model logistik secara lebih menyeluruh.

13 Apa itu Distribusi Multinomial

Distribusi multinomial adalah pengembangan dari distribusi binomial untuk memodelkan kejadian pada lebih dari dua kategori. Jika \(X_1, X_2, \dots, X_k\) menyatakan jumlah kejadian yang terjadi pada masing-masing kategori dari \(k\) kategori, maka probabilitas terjadinya kombinasi tersebut dihitung dengan rumus sebagai berikut:

\[ P(X_1 = x_1, X_2 = x_2, \dots, X_k = x_k) = \frac{n!}{x_1! x_2! \dots x_k!} \cdot p_1^{x_1} p_2^{x_2} \dots p_k^{x_k} \]

Dengan syarat:

\(\sum_{i=1}^k x_i = n\), yang berarti jumlah total kejadian di semua kategori harus sama dengan jumlah percobaan \(n\).

\(\sum_{i=1}^k p_i = 1\), yang berarti jumlah probabilitas dari semua kategori harus sama dengan 1.

13.1 Studi Kasus

Sebuah survei dilakukan terhadap 15 orang yang diminta untuk memilih warna mobil favorit mereka dari tiga pilihan: Merah (M), Biru (B), dan Hitam (H).

Hasil survei: - Merah: 6 orang - Biru: 5 orang - Hitam: 4 orang

Probabilitas teoretik untuk setiap warna: - \(p_M = 0.4\) (Probabilitas memilih Merah) - \(p_B = 0.33\) (Probabilitas memilih Biru) - \(p_H = 0.27\) (Probabilitas memilih Hitam)

Pertanyaannya: Berapa peluang bahwa dalam 15 orang akan ada 6 yang memilih Merah, 5 memilih Biru, dan 4 memilih Hitam?

13.1.1 Rumus Distribusi Multinomial

Distribusi peluang multinomial dihitung dengan rumus berikut:

\[ P(X_1 = x_1, X_2 = x_2, X_3 = x_3) = \frac{n!}{x_1! x_2! x_3!} \cdot p_1^{x_1} \cdot p_2^{x_2} \cdot p_3^{x_3} \]

Dengan: - \(n = 15\) (jumlah total responden) - \(x_1 = 6, x_2 = 5, x_3 = 4\) (jumlah responden yang memilih Merah, Biru, dan Hitam) - \(p_1 = 0.4, p_2 = 0.33, p_3 = 0.27\) (probabilitas masing-masing warna)

# Menentukan parameter distribusi multinomial
n <- 15
x <- c(6, 5, 4)
p <- c(0.4, 0.33, 0.27)

# Menghitung komponen-koefisien
faktorial_total <- factorial(n)
faktorial_x <- prod(factorial(x))
koefisien <- faktorial_total / faktorial_x

# Menghitung peluang
peluang <- koefisien * prod(p^x)
peluang
## [1] 0.05372289

Ini berarti bahwa probabilitas bahwa 6 orang memilih Merah, 5 orang memilih Biru, dan 4 orang memilih Hitam dalam survei ini adalah 0.0537 atau sekitar 5.37%.

13.2 Multinomial Logistic Regression

Model ini digunakan untuk memodelkan hubungan antara satu variabel respon kategorik (> 2 kategori) dan satu atau lebih variabel prediktor. Misalkan \(Y\) adalah variabel respon yang memiliki \(k\) kategori, dan kita pilih kategori \(k\) sebagai kategori acuan (baseline), maka model logit untuk kategori \(j\) (\(j = 1, 2, ..., k-1\)) adalah:

\[ \text{log} \left( \frac{P(Y = j)}{P(Y = k)} \right) = \beta_{0j} + \beta_{1j} X_1 + \cdots + \beta_{pj} X_p \]

Dimana: - \(P(Y = j)\) adalah probabilitas respon berada di kategori \(j\), - \(P(Y = k)\) adalah probabilitas respon berada di kategori acuan (baseline), - \(X_1, X_2, ..., X_p\) adalah variabel prediktor, - \(\beta_{0j}, \beta_{1j}, ..., \beta_{pj}\) adalah koefisien model untuk kategori \(j\).

Model ini menghasilkan \(k - 1\) fungsi logit, yaitu perbandingan antara setiap kategori selain kategori baseline terhadap kategori baseline.

13.2.1 Baseline-category logit model

Model Baseline-category logit digunakan untuk memodelkan hubungan antara satu variabel respon kategorik dengan lebih dari dua kategori dan satu atau lebih variabel prediktor. Model ini membandingkan kategori lainnya dengan kategori acuan (baseline) dalam bentuk logit.

Persamaan Model Logit

Misalkan \(Y\) adalah variabel respon dengan \(k\) kategori. Jika kita memilih kategori \(k\) sebagai kategori acuan, maka model logit untuk kategori \(j\) (dengan \(j = 1, 2, ..., k-1\)) adalah:

\[ \text{log} \left( \frac{P(Y = j)}{P(Y = k)} \right) = \beta_{0j} + \beta_{1j}X_1 + \cdots + \beta_{pj}X_p \]

Dimana: - \(P(Y = j)\) adalah probabilitas respon berada di kategori \(j\), - \(P(Y = k)\) adalah probabilitas respon berada di kategori acuan (baseline), - \(X_1, X_2, ..., X_p\) adalah variabel prediktor, - \(\beta_{0j}, \beta_{1j}, ..., \beta_{pj}\) adalah koefisien model untuk kategori \(j\).

Contoh Kasus: 3 Kategori Respon

Misalkan respon \(Y\) memiliki tiga kategori, yaitu \(Y \in \{1, 2, 3\}\), dan kita memilih kategori ke-3 sebagai baseline. Maka model logit-nya adalah sebagai berikut:

\[ \text{log} \left( \frac{P(Y = 1)}{P(Y = 3)} \right) = \beta_1 + \beta_1X \] \[ \text{log} \left( \frac{P(Y = 2)}{P(Y = 3)} \right) = \beta_2 + \beta_2X \]

Terdapat dua model logit, yaitu satu untuk perbandingan kategori 1 dengan kategori 3, dan satu lagi untuk perbandingan kategori 2 dengan kategori 3.

Relasi Antar Kategori

Jika kita ingin menghitung logit antara kategori 1 dan 2, maka relasi antar kategori dapat dihitung dengan:

\[ \text{log} \left( \frac{P(Y = 1)}{P(Y = 2)} \right) = \text{log} \left( \frac{P(Y = 1)/P(Y = 3)}{P(Y = 2)/P(Y = 3)} \right) \] \[ = \left( \beta_1 + \beta_1X \right) - \left( \beta_2 + \beta_2X \right) = (\beta_1 - \beta_2) + (\beta_1 - \beta_2)X \]

Jadi, logit antara kategori selain baseline dapat dihitung sebagai selisih dua logit terhadap baseline.

Implementasi di R

Untuk mengimplementasikan model baseline-category logit di R, kita dapat menggunakan fungsi multinom() dari package nnet. Berikut adalah langkah-langkah implementasinya:

# Memasang package nnet jika belum terpasang
# install.packages("nnet")

# Memuat package nnet
library(nnet)

# Contoh data respon dan prediktor
data <- data.frame(
  response = factor(c(1, 2, 3, 2, 1, 1, 3, 2, 3, 1)),
  predictor = c(3.1, 2.5, 1.2, 4.3, 2.8, 3.5, 1.6, 2.0, 3.0, 4.1)
)

# Menggunakan multinom untuk model logit
model <- multinom(response ~ predictor, data = data)
## # weights:  9 (4 variable)
## initial  value 10.986123 
## iter  10 value 8.558681
## iter  20 value 8.541366
## final  value 8.541328 
## converged
# Menampilkan hasil model
summary(model)
## Call:
## multinom(formula = response ~ predictor, data = data)
## 
## Coefficients:
##   (Intercept)  predictor
## 2    1.964609 -0.7127645
## 3    5.873792 -2.3367473
## 
## Std. Errors:
##   (Intercept) predictor
## 2    3.311268  1.023439
## 3    3.838275  1.437008
## 
## Residual Deviance: 17.08266 
## AIC: 25.08266
# Jika ingin menetapkan kategori baseline, gunakan relevel
data$response <- relevel(data$response, ref = "3")
model_relevel <- multinom(response ~ predictor, data = data)
## # weights:  9 (4 variable)
## initial  value 10.986123 
## iter  10 value 8.549806
## final  value 8.541328 
## converged
summary(model_relevel)
## Call:
## multinom(formula = response ~ predictor, data = data)
## 
## Coefficients:
##   (Intercept) predictor
## 1   -5.873725  2.336709
## 2   -3.908934  1.623889
## 
## Std. Errors:
##   (Intercept) predictor
## 1    3.838246  1.436987
## 2    3.229471  1.297405
## 
## Residual Deviance: 17.08266 
## AIC: 25.08266

13.2.2 Estimasi Parameter

Estimasi parameter dalam model logit dapat dilakukan menggunakan metode maximum likelihood estimation (MLE). Dalam pendekatan ini, kita mencari parameter yang memaksimalkan likelihood fungsi, yaitu nilai parameter yang membuat data yang diamati paling mungkin terjadi.

Fungsi Log-Likelihood

Fungsi log-likelihood untuk model logit dengan data respon kategorik \(Y\) dan prediktor \(X\) dapat dituliskan sebagai berikut:

\[ \ell(\theta) = \sum_{i=1}^{n} \sum_{j=1}^{k-1} y_{ij} \log(\hat{p}_{ij}) \]

Dimana: - \(\ell(\theta)\) adalah log-likelihood, - \(n\) adalah jumlah observasi, - \(k\) adalah jumlah kategori respon, - \(y_{ij}\) adalah indikator variabel yang bernilai 1 jika observasi \(i\) berada di kategori \(j\), dan 0 jika tidak, - \(\hat{p}_{ij}\) adalah estimasi probabilitas bahwa observasi \(i\) berada di kategori \(j\) yang dihitung berdasarkan model logit.

Dengan kata lain, \(\hat{p}_{ij} = P(Y = j | X_i)\) adalah probabilitas kategori \(j\) diberikan prediktor \(X_i\).

Algoritma Newton-Raphson

Proses estimasi dilakukan dengan memaksimalkan fungsi log-likelihood tersebut. Salah satu algoritma yang digunakan untuk memaksimalkan fungsi ini adalah Newton-Raphson, yang iteratif. Algoritma ini mengupdate parameter pada setiap iterasi berdasarkan informasi dari gradien dan matriks Hessian (turunan kedua dari log-likelihood).

Langkah-langkah dalam algoritma Newton-Raphson adalah: 1. Menghitung gradien dari log-likelihood, yaitu turunan pertama. 2. Menghitung matriks Hessian, yaitu turunan kedua dari log-likelihood. 3. Mengupdate parameter berdasarkan rumus iteratif: \[ \theta^{(t+1)} = \theta^{(t)} - [H(\theta^{(t)})]^{-1} \nabla \ell(\theta^{(t)}) \] dimana: - \(\theta^{(t)}\) adalah parameter pada iterasi \(t\), - \(\nabla \ell(\theta^{(t)})\) adalah gradien pada iterasi \(t\), - \(H(\theta^{(t)})\) adalah matriks Hessian pada iterasi \(t\).

Implementasi di R

Di R, kita bisa menggunakan fungsi dari package seperti nnet untuk melakukan estimasi parameter dengan metode maximum likelihood. Berikut adalah contoh implementasi untuk model logit menggunakan metode multinom:

# Contoh data respon dan prediktor
data <- data.frame(
  response = factor(c(1, 2, 3, 2, 1, 1, 3, 2, 3, 1)),
  predictor = c(3.1, 2.5, 1.2, 4.3, 2.8, 3.5, 1.6, 2.0, 3.0, 4.1)
)

# Menggunakan multinom untuk model logit
model <- multinom(response ~ predictor, data = data)
## # weights:  9 (4 variable)
## initial  value 10.986123 
## iter  10 value 8.558681
## iter  20 value 8.541366
## final  value 8.541328 
## converged
# Menampilkan hasil model
summary(model)
## Call:
## multinom(formula = response ~ predictor, data = data)
## 
## Coefficients:
##   (Intercept)  predictor
## 2    1.964609 -0.7127645
## 3    5.873792 -2.3367473
## 
## Std. Errors:
##   (Intercept) predictor
## 2    3.311268  1.023439
## 3    3.838275  1.437008
## 
## Residual Deviance: 17.08266 
## AIC: 25.08266

Fungsi multinom() secara internal menggunakan maximum likelihood estimation dengan algoritma optimasi untuk menghitung estimasi parameter, termasuk algoritma iteratif seperti Newton-Raphson untuk konvergensi.

13.3 Contoh Kasus

Sebuah universitas ingin mengetahui faktor-faktor apa saja yang mempengaruhi preferensi mahasiswa dalam memilih sumber informasi utama untuk belajar: Buku Cetak, E-Book, atau Video Pembelajaran.

Universitas tersebut melakukan survei terhadap 120 mahasiswa dan mengumpulkan data berikut: - Source: Sumber informasi yang dipilih (Buku Cetak, E-Book, Video) - Semester: Semester mahasiswa saat ini (2, 4, 6, 8) - Major: Jurusan mahasiswa (Matematika, Biologi, Fisika) - GPA: Indeks Prestasi Kumulatif mahasiswa

Tujuan Penelitian

Mengetahui bagaimana semester, jurusan, dan IPK memengaruhi pilihan sumber informasi utama mahasiswa.

Rancangan Model

Dalam kasus ini, variabel respon (Y) adalah Source yang memiliki 3 kategori. Prediktornya adalah Semester, Major, dan GPA.

Model baseline-category logit yang dapat digunakan adalah:

\[ \text{log} \left( \frac{P(\text{Source} = j)}{P(\text{Source} = \text{Video})} \right) = \beta_{0j} + \beta_{1j} \cdot \text{Semester} + \beta_{2j} \cdot \text{Major} + \beta_{3j} \cdot \text{GPA} \] untuk \(j =\) Buku Cetak, E-Book.

13.4 Simulasi Data

# Simulasi data preferensi sumber informasi mahasiswa
set.seed(79)
n <- 120
Source <- factor(sample(c("Buku Cetak", "E-Book", "Video"), n, replace = TRUE))
Semester <- sample(c(2, 4, 6, 8), n, replace = TRUE)
Major <- factor(sample(c("Matematika", "Biologi", "Fisika"), n, replace = TRUE))
GPA <- round(runif(n, 2.0, 4.0), 2)

# Simulasi Device berdasarkan probabilitas berbeda per Major
Device <- sapply(Major, function(major) {
  if (major == "Matematika") {
    sample(c("Laptop", "Desktop", "Tablet"), size = 1, prob = c(0.5, 0.3, 0.2))
  } else if (major == "Biologi") {
    sample(c("Laptop", "Desktop", "Tablet"), size = 1, prob = c(0.4, 0.4, 0.2))
  } else {
    sample(c("Laptop", "Desktop", "Tablet"), size = 1, prob = c(0.3, 0.5, 0.2))
  }
})

# Membuat data frame
df <- data.frame(
  Source = Source,
  Semester = Semester,
  Major = Major,
  GPA = GPA,
  Device = factor(Device)
)

# Menetapkan baseline untuk Device ke "Laptop"
df$Device <- relevel(df$Device, ref = "Laptop")

# Tampilkan 6 baris pertama data
head(df)

13.5 Estimasi Model

# Fitting model multinomial menggunakan data yang telah dibuat (Source, Semester, Major, GPA)
model_mnlogit <- multinom(Source ~ Semester + Major + GPA, data = df)
## # weights:  18 (10 variable)
## initial  value 131.833475 
## iter  10 value 124.453406
## final  value 124.432155 
## converged
summary(model_mnlogit)
## Call:
## multinom(formula = Source ~ Semester + Major + GPA, data = df)
## 
## Coefficients:
##        (Intercept)    Semester MajorFisika MajorMatematika        GPA
## E-Book    2.687061 -0.05418029  0.53607893       0.0200091 -0.8962757
## Video    -1.043062  0.02426798 -0.03774748       0.3602442  0.1075578
## 
## Std. Errors:
##        (Intercept)  Semester MajorFisika MajorMatematika       GPA
## E-Book    1.305792 0.1000313   0.5304304       0.5343902 0.3811393
## Video     1.465655 0.1069623   0.6175711       0.5476567 0.4126296
## 
## Residual Deviance: 248.8643 
## AIC: 268.8643

13.6 Nilai P-Value dan Intepretasi

# Menghitung nilai z (koefisien / standar error)
z <- summary(model_mnlogit)$coefficients / summary(model_mnlogit)$standard.errors

# Menghitung nilai p menggunakan distribusi normal
pval <- 2 * (1 - pnorm(abs(z)))

# Menampilkan nilai p yang telah dibulatkan ke 4 angka desimal
round(pval, 4)
##        (Intercept) Semester MajorFisika MajorMatematika    GPA
## E-Book      0.0396   0.5881      0.3122          0.9701 0.0187
## Video       0.4767   0.8205      0.9513          0.5107 0.7944

Intepretasi

  • E-Book lebih banyak dipilih oleh mahasiswa yang berada di semester yang lebih tinggi dan yang memiliki GPA yang lebih tinggi, terutama di jurusan Matematika.

  • Video juga lebih banyak dipilih oleh mahasiswa dengan GPA yang lebih tinggi dan mahasiswa di semester yang lebih tinggi. Mahasiswa Fisika dan Matematika memiliki peluang lebih besar untuk memilih Video dibandingkan Buku Cetak.

13.7 Prediksi dan Validasi

# Prediksi menggunakan model multinomial
df$Predicted <- predict(model_mnlogit)

# Membuat tabel perbandingan antara prediksi dan nilai aktual
table(Predicted = df$Predicted, Actual = df$Device)
##             Actual
## Predicted    Laptop Desktop Tablet
##   Buku Cetak     25      32     14
##   E-Book         16      22     11
##   Video           0       0      0
  • Model lebih banyak memprediksi kategori Buku Cetak dan E-Book dengan distribusi yang cukup merata antara Laptop dan Desktop, namun Tablet kurang sering dipilih di kedua kategori tersebut.

  • Tidak ada prediksi untuk kategori Video, yang mungkin menunjukkan bahwa model perlu perbaikan atau lebih banyak data untuk menangani kategori ini dengan lebih baik.

13.8 Visualisasi

# Memastikan package ggplot2 terIntepretasiasang dan dimuat
library(ggplot2)

# Menggunakan model_mnlogit untuk membuat prediksi
df$Predicted <- predict(model_mnlogit)

# Visualisasi prediksi dengan ggplot2
ggplot(df, aes(x = Semester, y = GPA, color = Predicted)) +
  geom_point(size = 3) +
  labs(title = "Multinomial Logistic Regression Predictions",
       x = "Semester", y = "GPA") +
  theme_minimal() +
  scale_color_manual(values = c("E-Book" = "blue", "Video" = "green", "Buku Cetak" = "red"))

  • GPA lebih tinggi cenderung diprediksi memilih E-Book (ditunjukkan dengan warna biru) dibandingkan Buku Cetak (ditunjukkan dengan warna merah), terutama pada mahasiswa yang berada di semester yang lebih tinggi.

  • Semua prediksi pada semester 2, 4, 6, dan 8 menunjukkan bahwa mahasiswa dengan GPA tinggi lebih cenderung memilih E-Book, sementara yang memiliki GPA lebih rendah cenderung memilih Buku Cetak.

  • Semua prediksi menunjukkan pola yang lebih kuat di semester lebih tinggi, menunjukkan bahwa preferensi untuk E-Book lebih dominan di kalangan mahasiswa yang lebih senior (semester lebih tinggi).

13.9 Kesimpulan

Model regresi logistik multinomial memberikan wawasan yang lebih mendalam tentang faktor-faktor yang memengaruhi pilihan perangkat kerja di perusahaan. Selain itu, model ini juga dapat digunakan untuk prediksi perangkat yang mungkin dipilih oleh karyawan baru berdasarkan atribut mereka. Dengan demikian, perusahaan dapat lebih tepat dalam memberikan perangkat kerja yang sesuai dengan karakteristik dan kebutuhan karyawan, yang dapat meningkatkan produktivitas dan kenyamanan kerja.

14 Regresi Logistik Ordinal

Regresi logistik ordinal digunakan ketika variabel respon \(Y\) bersifat ordinal, yaitu memiliki urutan atau tingkatan, seperti tingkat kepuasan yang bisa memiliki kategori: Rendah, Sedang, dan Tinggi.

Regresi logistik ordinal berbeda dengan: - Regresi logistik biner: Digunakan ketika respon hanya memiliki dua kategori (misalnya, Ya atau Tidak). - Regresi logistik multinomial: Digunakan ketika respon memiliki lebih dari dua kategori, tetapi kategori tersebut tidak memiliki urutan (misalnya, pilihan jenis perangkat: Laptop, Desktop, Tablet).

14.1 Konsep Cumulative Logit Model

Pada regresi logistik ordinal, model yang digunakan sering kali adalah Cumulative Logit Model, yang mengasumsikan proportional odds. Proportional odds berarti bahwa koefisien regresi yang digunakan adalah sama untuk semua kategori kumulatif (misalnya, membandingkan kategori Rendah vs. Sedang atau Tinggi, Sedang vs. Tinggi, dan seterusnya).

Model yang digunakan untuk Cumulative Logit adalah:

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

Dimana: - \(P(Y \leq j)\) adalah probabilitas bahwa nilai respon \(Y\) berada pada kategori \(j\) atau kategori yang lebih rendah. - \(P(Y > j)\) adalah probabilitas bahwa nilai respon \(Y\) berada pada kategori \(j\) atau kategori yang lebih tinggi. - \(\alpha_j\) adalah intercept khusus untuk kategori ke-\(j\). - \(\beta\) adalah koefisien regresi, yang sama untuk semua kategori kumulatif.

14.2 Intepretasi Koefisien

Koefisien \(\beta\) dalam Cumulative Logit Model menjelaskan efek dari variabel prediktor terhadap kemungkinan berada pada kategori yang lebih rendah atau sama.

Interpretasi Koefisien:

  1. Jika \(\beta > 0\):
    • Semakin besar nilai \(\beta\), semakin tinggi peluang untuk berada pada kategori yang lebih rendah atau sama. Artinya, variabel prediktor \(X\) memiliki pengaruh positif terhadap probabilitas berada di kategori lebih rendah.
    • Contoh: Jika kita memodelkan tingkat kepuasan dengan kategori Rendah, Sedang, Tinggi, maka jika \(\beta\) untuk Usia lebih besar dari 0, maka semakin tua usia seseorang, semakin besar peluang mereka berada di kategori Rendah atau Sedang dibandingkan dengan Tinggi.
  2. Jika \(\beta < 0\):
    • Semakin besar nilai \(\beta\) (dalam hal ini negatif), semakin besar peluang untuk berada di kategori yang lebih tinggi. Ini menunjukkan bahwa variabel prediktor memiliki pengaruh negatif terhadap kemungkinan berada di kategori yang lebih rendah.
    • Contoh: Dalam model kepuasan yang sama, jika \(\beta\) untuk GPA lebih kecil dari 0, maka semakin tinggi GPA, semakin besar peluang mahasiswa berada di kategori Tinggi atau Sedang, dan mengurangi peluang untuk berada di kategori Rendah.

Contoh Intepretasi

Misalkan kita memiliki model untuk tingkat kepuasan yang memiliki tiga kategori: Rendah, Sedang, dan Tinggi. Model regresi logistik ordinal menghasilkan koefisien sebagai berikut:

\[ \text{log} \left( \frac{P(Y \leq \text{Sedang})}{P(Y > \text{Sedang})} \right) = -0.5 + 0.1 \cdot \text{Age} - 0.3 \cdot \text{GPA} \]

Dari model ini: - Intercept = -0.5: Ini adalah intercept untuk kategori Sedang. - Koefisien untuk Age = 0.1: Ini menunjukkan bahwa setiap peningkatan satu tahun usia meningkatkan log-odds untuk berada di kategori Rendah atau Sedang dibandingkan Tinggi sebesar 0.1. - Koefisien untuk GPA = -0.3: Ini menunjukkan bahwa setiap peningkatan satu poin GPA mengurangi log-odds untuk berada di kategori Rendah atau Sedang dan lebih cenderung berada di kategori Tinggi.

Kesimpulan:

  • Koefisien yang positif menunjukkan bahwa peningkatan variabel prediktor akan meningkatkan peluang berada di kategori yang lebih rendah (lebih dekat dengan kategori pertama).
  • Koefisien yang negatif menunjukkan bahwa peningkatan variabel prediktor akan meningkatkan peluang berada di kategori yang lebih tinggi.

14.3 Contoh Data

Misal kita memiliki data fktif tingkat kepuasan pelanggan (1: Tidak Puas, 2: Cukup, 3: Puas) terhadap fasilitas toko:

# Menggunakan set.seed(79) sesuai permintaan
set.seed(79)

# Membuat data fiktif dengan variabel prediktor fasilitas toko (1-10)
n <- 200
fasilitas_toko <- round(runif(n, 1, 10))  # Fasilitas toko antara 1 hingga 10

# Menentukan tingkat kepuasan pelanggan berdasarkan fasilitas toko
satisfaction <- cut(5 + 0.5 * fasilitas_toko + rnorm(n),
                    breaks = c(-Inf, 5.5, 7.5, Inf),
                    labels = c("Tidak Puas", "Cukup", "Puas"),
                    ordered_result = TRUE)

# Membuat data frame
df <- data.frame(satisfaction, fasilitas_toko)

# Pastikan satisfaction adalah faktor ordinal dengan urutan yang benar
df$satisfaction <- factor(df$satisfaction, ordered = TRUE, levels = c("Tidak Puas", "Cukup", "Puas"))

# Cek distribusi kategori kepuasan
table(df$satisfaction)
## 
## Tidak Puas      Cukup       Puas 
##         21         59        120
# Menampilkan 6 baris pertama data
head(df)

14.4 Estimasi Model Ordinal

library(MASS)
model_ord <- polr(satisfaction ~ fasilitas_toko, data = df, Hess = TRUE)
summary(model_ord)
## Call:
## polr(formula = satisfaction ~ fasilitas_toko, data = df, Hess = TRUE)
## 
## Coefficients:
##                 Value Std. Error t value
## fasilitas_toko 0.8611     0.1042   8.261
## 
## Intercepts:
##                  Value  Std. Error t value
## Tidak Puas|Cukup 0.9083 0.3823     2.3758 
## Cukup|Puas       3.8180 0.5058     7.5491 
## 
## Residual Deviance: 230.9521 
## AIC: 236.9521

Koefisien

  • fasilitas_toko = 0.8611: Setiap peningkatan satu poin dalam penilaian fasilitas toko meningkatkan log-odds bahwa pelanggan akan memilih kategori lebih tinggi dalam tingkat kepuasan (misalnya, dari Tidak Puas ke Cukup atau dari Cukup ke Puas) sebesar 0.8611. Koefisien ini positif, menunjukkan bahwa peningkatan fasilitas toko meningkatkan kemungkinan pelanggan lebih puas.

Intercept

  • Tidak Puas|Cukup = 0.9083: Ini adalah log-odds bahwa seorang pelanggan berada di kategori Tidak Puas atau Cukup dibandingkan dengan Puas, saat fasilitas toko berada pada nilai
  • Cukup|Puas = 3.8180: Ini adalah log-odds bahwa seorang pelanggan berada di kategori Cukup atau Puas dibandingkan dengan Tidak Puas, dengan nilai intercept menunjukkan pengaruh fasilitas toko terhadap tingkat kepuasan yang lebih tinggi.

Statistik Lainnya:

  • t value untuk fasilitas_toko = 8.261: Ini menunjukkan bahwa koefisien fasilitas_toko signifikan secara statistik, karena nilai t yang lebih besar dari 2 umumnya menunjukkan hasil yang signifikan.

  • Residual Deviance = 230.9521 dan AIC = 236.9521: Nilai AIC yang lebih rendah menunjukkan model yang lebih baik, namun perbandingan dengan model lain diperlukan untuk penilaian lebih lanjut.

Kesimpulan

  • Fasilitas toko memiliki pengaruh signifikan terhadap tingkat kepuasan pelanggan: semakin baik fasilitas toko, semakin tinggi kemungkinan pelanggan memilih kategori kepuasan yang lebih tinggi.

14.5 Nilai P-Value

  • Setiap peningkatan satu unit dalam penilaian fasilitas toko meningkatkan log-odds untuk berada di kategori kepuasan yang lebih tinggi (misalnya, dari Tidak Puas ke Cukup, atau dari Cukup ke Puas) sebesar 0.8611. Nilai t value = 8.261 menunjukkan bahwa koefisien fasilitas toko sangat signifikan secara statistik, menunjukkan pengaruh yang kuat.

  • Untuk kategori Tidak Puas vs Cukup, log-oddsnya adalah 0.9083, yang menunjukkan perbedaan log-odds bahwa seorang pelanggan akan berada di kategori Tidak Puas atau Cukup dibandingkan Puas. t value = 2.3758 menunjukkan bahwa perbedaan ini signifikan secara statistik.

  • Untuk kategori Cukup vs Puas, log-oddsnya adalah 3.8180, menunjukkan log-odds yang lebih besar bahwa pelanggan akan memilih Cukup atau Puas dibandingkan Tidak Puas. Nilai t value = 7.5491 menunjukkan bahwa perbedaan ini sangat signifikan secara statistik.

  • Secara keseluruhan, fasilitas toko memiliki pengaruh signifikan terhadap kepuasan pelanggan. Semakin tinggi fasilitas toko, semakin besar kemungkinan pelanggan berada di kategori kepuasan yang lebih tinggi.

ctable <- coef(summary(model_ord))
p <- pnorm(abs(ctable[, "t value"]), lower.tail = FALSE) * 2
(ctable <- cbind(ctable, "p value" = round(p, 4)))
##                      Value Std. Error  t value p value
## fasilitas_toko   0.8611146  0.1042378 8.261060  0.0000
## Tidak Puas|Cukup 0.9083215  0.3823163 2.375838  0.0175
## Cukup|Puas       3.8179791  0.5057544 7.549077  0.0000

Berdasarkan p-value yang diberikan, berikut adalah interpretasi:

  • Fasilitas Toko (p-value = 0.0000): P-value yang sangat kecil (0.0000) menunjukkan bahwa fasilitas toko memiliki pengaruh yang sangat signifikan terhadap tingkat kepuasan pelanggan. Artinya, fasilitas toko secara statistik berhubungan dengan peralihan kepuasan pelanggan antara kategori Tidak Puas, Cukup, dan Puas.

  • Tidak Puas|Cukup (p-value = 0.0175): P-value sebesar 0.0175 menunjukkan bahwa perbandingan antara kategori Tidak Puas dan Cukup juga signifikan secara statistik. Dengan kata lain, faktor fasilitas toko mempengaruhi kemungkinan pelanggan berada di kategori Tidak Puas atau Cukup dibandingkan dengan Puas.

  • Cukup|Puas (p-value = 0.0000): P-value yang sangat kecil (0.0000) untuk perbandingan antara kategori Cukup dan Puas menunjukkan bahwa perbedaan antara kategori Cukup dan Puas sangat signifikan secara statistik, yang berarti fasilitas toko juga berperan besar dalam mempengaruhi kepuasan pelanggan yang lebih tinggi.

  • Secara keseluruhan, semua p-value menunjukkan bahwa fasilitas toko adalah prediktor yang signifikan untuk tingkat kepuasan pelanggan, baik untuk peralihan antara kategori rendah (Tidak Puas) ke menengah (Cukup), maupun dari menengah (Cukup) ke tinggi (Puas).

14.6 Prediksi Probabilitas

newdata <- data.frame(fasilitas_toko = 5:9)
predict(model_ord, newdata = newdata, type = "probs")
##    Tidak Puas      Cukup      Puas
## 1 0.032381470 0.34807907 0.6195395
## 2 0.013948093 0.19213350 0.7939184
## 3 0.005943589 0.09292824 0.9011282
## 4 0.002520950 0.04180114 0.9556779
## 5 0.001067135 0.01815936 0.9807735
  • Ketika fasilitas toko memiliki skor 5, ada sekitar 61.95% peluang pelanggan akan merasa Puas, 34.81% peluang merasa Cukup, dan 3.24% merasa Tidak Puas.

  • Dengan fasilitas toko di skor 6, ada 79.39% peluang pelanggan merasa Puas, 19.21% merasa Cukup, dan hanya 1.39% merasa Tidak Puas.

  • Pada fasilitas toko skor 7, probabilitas pelanggan yang merasa Puas meningkat menjadi 90.11%, sementara yang merasa Cukup adalah 9.29% dan yang merasa Tidak Puas hanya 0.59%.

  • Dengan fasilitas toko skor 8, pelanggan hampir pasti merasa Puas dengan probabilitas 95.57%, dan sangat sedikit yang merasa Cukup (4.18%) atau Tidak Puas (0.25%).

  • Dengan fasilitas toko skor 9, probabilitas bahwa pelanggan merasa Puas hampir 98.08%, sementara hanya 1.82% yang merasa Cukup dan 0.11% yang merasa Tidak Puas

Kesimpulan

  • Seiring dengan peningkatan skor fasilitas toko, probabilitas untuk pelanggan merasa Puas meningkat secara signifikan, sementara probabilitas untuk merasa Tidak Puas atau Cukup menurun.

  • Ini menunjukkan bahwa fasilitas toko memiliki pengaruh besar terhadap tingkat kepuasan pelanggan, dengan pelanggan semakin puas saat fasilitas toko meningkat.

14.7 Goodness-of-Fit dan Proportional Odds

Goodness-of-fit dalam konteks regresi logistik ordinal digunakan untuk mengevaluasi sejauh mana model yang dibangun sesuai dengan data yang diamati. Ini memberikan indikasi apakah model mampu menjelaskan variabilitas dalam data dengan baik.

Terdapat beberapa metode seperti Deviance dan Residual Deviance, AIC, dan Pseudo-R2.

Asumsi proportional odds menganggap bahwa koefisien regresi \(\beta\) yang sama berlaku untuk semua kategori kumulatif. Artinya, rasio odds untuk perbandingan kategori yang lebih rendah dibandingkan dengan kategori yang lebih tinggi adalah konsisten di seluruh kategori.

Sebagai contoh, dalam model kepuasan, kita mengasumsikan bahwa: - Rasio odds untuk Rendah vs. Sedang atau Tinggi adalah sama dengan Sedang vs. Tinggi. - Hal ini mengimplikasikan bahwa pengaruh variabel prediktor (seperti usia, pendapatan, dll) terhadap peralihan antara kategori tidak berubah antara kategori Rendah, Sedang, dan Tinggi.

14.8 Alternatif Model Ordinal

Selain cumulative logit, model ordinal lainnya:

  • Adjacent-category logit

  • Continuation-ratio (sequential) logit

Kedua odel tersebut dapat digunakan saat asumsi proportional odds tidak terpenuhi.

14.9 Kesimpulan

  • Regresi ordinal sangat berguna untuk menganalisis variabel respon yang memiliki urutan atau berurutan.

  • Model cumulative logit menginterpretasikan dampak variabel prediktor dalam bentuk log-odds kumulatif, yang menjelaskan pengaruh prediktor terhadap peluang masuk ke kategori yang lebih rendah atau lebih tinggi.

  • Implementasi di R dapat dilakukan menggunakan fungsi polr() dari package MASS, yang menyediakan cara praktis untuk membangun model logistik ordinal.

  • Untuk validasi lebih lanjut, dapat dilakukan uji Deviance atau Likelihood Ratio Test untuk mengevaluasi kecocokan model atau membandingkan model dengan penambahan prediktor.

14.10 Asumsi Paralelisme dalam Regresi Logistik Ordinal

Model regresi logistik ordinal yang sering digunakan adalah Cumulative Logit Model, yang mengandalkan asumsi Proportional Odds. Asumsi ini juga dikenal sebagai asumsi paralelisme (parallel lines assumption).

Asumsi paralelisme menyatakan bahwa koefisien regresi (\(\beta\)) adalah sama untuk setiap kategori kumulatif dari variabel respon. Artinya, meskipun nilai intercept (\(\alpha\)) dapat berbeda antara kategori, koefisien \(\beta\) tetap konstan di semua transisi antar kategori.

Bentuk umum modelnya adalah:

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

untuk \(j = 1, 2, ..., k - 1\), di mana hanya intercept (\(\alpha\)) yang berbeda antar kategori, sedangkan koefisien (\(\beta\)) tetap sama untuk semua kategori.

Visualisasi Asumsi Paralelisme

Jika asumsi paralelisme dipenuhi, kurva logit kumulatif untuk setiap kategori terhadap prediktor akan memiliki kemiringan yang sama (paralel), hanya posisi intercept-nya yang berbeda.

Konsekuensi Jika Asumsi Tidak Terpenuhi

Jika asumsi ini tidak dipenuhi, maka: - Efek prediktor bisa berbeda untuk setiap batas kategori. - Model cumulative logit menjadi tidak valid. - Sebagai alternatif, model lain yang bisa digunakan adalah: - Generalized Ordinal Logistic Regression - Partial Proportional Odds Model

Pengujian Asumsi Paralelism

Untuk memeriksa apakah asumsi ini valid, dapat dilakukan uji sebagai berikut:

  • Likelihood Ratio Test untuk membandingkan model proportional dan non-proportional.
  • Brant Test (menggunakan package brant di R).

  • Jika p-value < 0.05, maka asumsi paralelisme tidak terpenuhi.

Kesimpulan

  • Asumsi paralelisme sangat penting untuk memastikan validitas model cumulative logit.

  • Dengan asumsi ini, interpretasi menjadi lebih sederhana karena efek prediktor dianggap konstan.

  • Jika asumsi ini tidak terpenuhi, model ordinal alternatif harus digunakan.

15 Log Linear Model

Analisis data kategorikal sangat penting dalam statistika terapan karena banyak fenomena nyata menghasilkan data dalam bentuk kategori, seperti jenis kelamin, Kepuasan pekerjaan, tingkat pendidikan, preferensi konsumen, atau diagnosis medis. Data kategori ini umumnya dianalisis dengan tabel kontingensi, model log-linier, serta model regresi logistik, di mana tiap pendekatan memiliki keunggulan dan keterbatasan tergantung pada tujuan dan struktur data yang dianalisis.

Tabel kontingensi menjadi langkah awal untuk mengeksplorasi hubungan antara dua atau lebih variabel kategorikal. Sebagai contoh, misal dalam studi efek latihan terhadap hipertensi, tabel kontingensi bisa memperlihatkan distribusi pasien dengan dan tanpa hipertensi berdasarkan kelompok latihan yang diikuti. Tabel ini juga membantu menghitung ukuran asosiasi, seperti odds ratio, risk ratio, serta statistik chi-square untuk menguji hubungan antara variabel.

Untuk membangun model yang dapat mengontrol efek dari banyak variabel beserta interaksinya, model log-linier sangat berguna. Model log-linier merupakan varian dari Generalized Linear Model (GLM) yang diaplikasikan pada frekuensi sel tabel kontingensi dan mengasumsikan distribusi Poisson. Berbeda dari regresi logistik, model ini memperlakukan semua variabel secara simetris tanpa membedakan mana yang dependen atau independen. Model log-linier cocok digunakan saat tujuan analisis adalah memahami pola asosiasi atau independensi antar variabel, bukan untuk prediksi.

Struktur model log-linier ditentukan oleh efek utama dan interaksi antar variabel. Sebagai contoh, dalam analisis tiga variabel (misal: jenis kelamin, Kepuasan merokok, dan penyakit jantung), model log-linier dapat mengevaluasi apakah interaksi dua variabel sudah cukup ataukah perlu menambahkan interaksi tiga variabel untuk menjelaskan data. Pemilihan model dilakukan dengan uji rasio kemungkinan untuk membandingkan model sederhana dan kompleks.

Di sisi lain, regresi logistik digunakan bila ada satu variabel kategorikal yang berperan sebagai dependen (contoh: hasil lulus/tidak) dan satu atau lebih variabel prediktor (kategorikal/numerik). Model ini memodelkan logit dari probabilitas kejadian dan sangat bermanfaat baik dalam studi observasional maupun eksperimental. Regresi logistik dapat dikembangkan untuk kategori lebih dari dua kelas, seperti regresi logistik multinomial atau ordinal.

Secara ringkas, tabel kontingensi bersifat deskriptif, model log-linier mengeksplorasi hubungan simetris antar variabel, dan regresi logistik digunakan untuk prediksi outcome kategorikal. Pemilihan Tipe_Pembayaran didasarkan pada fokus analisis: deskripsi, eksplorasi struktur, atau prediksi hasil dengan variabel penjelas. Kombinasi ketiganya sering diterapkan dalam praktik untuk pemahaman data kategorikal yang lebih dalam.

Dalam analisis data kategorikal, Tipe_Pembayaran yang umum digunakan antara lain:

  1. Tabel Kontingensi: menyajikan frekuensi gabungan dari dua atau lebih variabel kategorikal.
  2. Model Log-linier: memodelkan struktur asosiasi pada tabel kontingensi tanpa mengasumsikan adanya variabel dependen.
  3. Model Regresi Logistik: memodelkan probabilitas suatu kategori variabel dependen berdasarkan variabel independen.

Walaupun ketiganya bisa diterapkan untuk data kategorikal, pendekatan serta cara interpretasinya berbeda-beda.

Tabel Kontingensi

Tabel kontingensi memberikan jumlah frekuensi dari kombinasi kategori antar variabel.

Contoh tabel 2x2:

table_data <- matrix(c(14, 11, 6, 9), nrow = 2,
                     dimnames = list(Tipe_Pembayaran = c("Tunai", "Kartu Kredit"),
                                     Kepuasan = c("Puas", "Tidak Puas")))
table_data
##                Kepuasan
## Tipe_Pembayaran Puas Tidak Puas
##    Tunai          14          6
##    Kartu Kredit   11          9

Tabel kontingensi bersifat deskriptif dan tidak melibatkan pemodelan probabilitas

Model Loglinear

Model loglinear memodelkan logaritma dari ekspektasi frekuensi sel dalam tabel kontingensi.

\[ \log(\mu_{ij}) = \mu + \lambda^A_i + \lambda^B_j + \lambda^{AB}_{ij} \]

library(MASS)
loglm(~ Tipe_Pembayaran + Kepuasan, data = table_data)
## Call:
## loglm(formula = ~Tipe_Pembayaran + Kepuasan, data = table_data)
## 
## Statistics:
##                        X^2 df  P(> X^2)
## Likelihood Ratio 0.9649344  1 0.3259468
## Pearson          0.9600000  1 0.3271869

Model Regresi Logistik

Model regresi logistik biner:

\[ \log\left( \frac{p}{1 - p} \right) = \beta_0 + \beta_1 x \]

Contoh:

data_glm <- data.frame(
Puas = c(1, 0, 1, 0),
Tipe_Pembayaran_Pembayaran = factor(c("Kredit", "Kredit", "Tunai", "Tunai")),
Frek = c(14, 11, 6, 9)
)
model_logit <- glm(Puas ~ Tipe_Pembayaran_Pembayaran, weights = Frek, family = binomial, data = data_glm)
summary(model_logit)
## 
## Call:
## glm(formula = Puas ~ Tipe_Pembayaran_Pembayaran, family = binomial, 
##     data = data_glm, weights = Frek)
## 
## Coefficients:
##                                 Estimate Std. Error z value Pr(>|z|)
## (Intercept)                       0.2412     0.4029   0.599    0.549
## Tipe_Pembayaran_PembayaranTunai  -0.6466     0.6634  -0.975    0.330
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 55.452  on 3  degrees of freedom
## Residual deviance: 54.487  on 2  degrees of freedom
## AIC: 58.487
## 
## Number of Fisher Scoring iterations: 4

Perbandingan Ketiga Pendekatan

Aspek Tabel Kontingensi Model Loglinear Regresi Logistik
Tujuan Deskripsi frekuensi Deteksi asosiasi Prediksi probabilitas
Variabel dependen Tidak ada Tidak ada (intersit) Ada (eksplisit)
Distribusi Tidak diasumsikan Poisson (frekuensi sel) Binomial ( probabilitas)
Bentuk Model Tidak ada GLM: log(μ) ~ efek GLM: logit(p) ~ prediktor
Cocok untuk Eksplorasi awal Tabel > 2 variabel Studi prediktif

15.1 Tabel Kontingensi dan Model Loglinier

Tabel kontingensi menyajikan frekuensi dari kombinasi kategori antar dua atau lebih variabel. Misal:

# Contoh tabel 2x2
matrix(c(14, 11, 6, 9), nrow = 2,
                     dimnames = list(Tipe_Pembayaran = c("Tunai", "Kartu Kredit"),
                                     Kepuasan = c("Puas", "Tidak Puas")))
##                Kepuasan
## Tipe_Pembayaran Puas Tidak Puas
##    Tunai          14          6
##    Kartu Kredit   11          9

Model log-linier untuk tabel I x J dapat dituliskan: \[ \log(\mu_{ij}) = \mu + \lambda^A_i + \lambda^B_j + \lambda^{AB}_{ij} \]

15.2 Model Saturated

Model saturated atau model penuh menyertakan seluruh efek utama dan interaksi:

• Cocok sempurna terhadap data

• Tidak mengasumsikan independensi antar variabel

Contoh formulasi untuk tabel 2x2:

# Data
library(MASS)
data <- matrix(c(14, 11, 6, 9), nrow = 2,
                     dimnames = list(Tipe_Pembayaran = c("Tunai", "Kartu Kredit"),
                                     Kepuasan = c("Puas", "Tidak Puas")))
ftable(data)
##                 Kepuasan Puas Tidak Puas
## Tipe_Pembayaran                         
## Tunai                      14          6
## Kartu Kredit               11          9

Model saturated dapat dipasang dengan loglm dari package {MASS}:

model_saturated <- loglm(~ Tipe_Pembayaran * Kepuasan, data = data)
summary(model_saturated)
## Formula:
## ~Tipe_Pembayaran * Kepuasan
## attr(,"variables")
## list(Tipe_Pembayaran, Kepuasan)
## attr(,"factors")
##                 Tipe_Pembayaran Kepuasan Tipe_Pembayaran:Kepuasan
## Tipe_Pembayaran               1        0                        1
## Kepuasan                      0        1                        1
## attr(,"term.labels")
## [1] "Tipe_Pembayaran"          "Kepuasan"                
## [3] "Tipe_Pembayaran:Kepuasan"
## attr(,"order")
## [1] 1 1 2
## attr(,"intercept")
## [1] 1
## attr(,"response")
## [1] 0
## attr(,".Environment")
## <environment: R_GlobalEnv>
## 
## Statistics:
##                  X^2 df P(> X^2)
## Likelihood Ratio   0  0        1
## Pearson            0  0        1

15.3 Model Independent

Model independen mengasumsikan bahwa tidak ada interaksi antara variabel:

\[ \log(\mu_{ij}) = \mu + \lambda^T_i + \lambda^B_j \] Model ini menguji hipotesis bahwa variabel X dan Y saling independen.

model_indep <- loglm(~ Tipe_Pembayaran + Kepuasan, data = data)
summary(model_indep)
## Formula:
## ~Tipe_Pembayaran + Kepuasan
## attr(,"variables")
## list(Tipe_Pembayaran, Kepuasan)
## attr(,"factors")
##                 Tipe_Pembayaran Kepuasan
## Tipe_Pembayaran               1        0
## Kepuasan                      0        1
## attr(,"term.labels")
## [1] "Tipe_Pembayaran" "Kepuasan"       
## attr(,"order")
## [1] 1 1
## attr(,"intercept")
## [1] 1
## attr(,"response")
## [1] 0
## attr(,".Environment")
## <environment: R_GlobalEnv>
## 
## Statistics:
##                        X^2 df  P(> X^2)
## Likelihood Ratio 0.9649344  1 0.3259468
## Pearson          0.9600000  1 0.3271869

15.4 Odds Ratio dan Interpretasi

Odds ratio untuk tabel 2x2:

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

Interpretasi nilai OR:

  • OR = 1: Tidak ada asosiasi
  • OR > 1: Asosiasi positif
  • OR < 1: Asosiasi negatif

15.5 Estimasi Parameter

Dalam model saturated:

  • Estimasi dilakukan dengan pembatasan seperti sum-to-zero
  • Estimasi parameter dilakukan dengan iterative proportional fitting (IPF)
# Estimasi odds ratio dan log-odds
logOR <- log((data[1,1] * data[2,2]) / (data[1,2] * data[2,1]))
logOR
## [1] 0.6466272

15.6 Model Lebih Sederhana dan Perbandingan Model

Perbandingan antar model dilakukan dengan menggunakan statistik deviance (G²) atau likelihood ratio test.

anova(model_indep, model_saturated)
## LR tests for hierarchical log-linear models
## 
## Model 1:
##  ~Tipe_Pembayaran + Kepuasan 
## Model 2:
##  ~Tipe_Pembayaran * Kepuasan 
## 
##            Deviance df Delta(Dev) Delta(df) P(> Delta(Dev)
## Model 1   0.9649344  1                                    
## Model 2   0.0000000  0  0.9649344         1        0.32595
## Saturated 0.0000000  0  0.0000000         0        1.00000

16 Implementasi Model Log Linear terhadap Tabel Kontingensi

Model log-linear digunakan untuk menganalisis hubungan antara dua atau lebih variabel kategorikal yang disajikan dalam tabel kontingensi. Model ini mengasumsikan bahwa logaritma ekspektasi frekuensi sel (\(\mu_{ij}\)) adalah_

\[ \log(\mu_{ij}) = \lambda + \lambda^A_i + \lambda^B_j + \lambda^{AB}_{ij} \]

16.1 Perbedaan Utama antara Model Log Linear dan Model Regresi Logistik

  • Model log-linear digunakan untuk memodelkan frekuensi (count) pada tabel kontingensi serta menguji asosiasi antar variabel kategorikal, tanpa menganggap ada variabel respon maupun prediktor.
  • Model regresi logistik digunakan untuk memodelkan probabilitas kejadian suatu outcome biner berdasarkan satu atau lebih prediktor, baik yang kategorikal maupun kontinu.

16.2 Analisis Data Tabel Kontingensi 2x2

Diberikan data:

Puas Tidak Puas Total
Juara Lomba (Ya) 21 15 36
Tidak 12 38 50
Total 33 53 86

16.3 Bentuk Model Log-Linear

Model log-linear pada tabel 2x2:

\[ \log(\mu_{ij}) = \lambda + \lambda^A_i + \lambda^B_j + \lambda^{AB}_{ij} \]

dengan constraint sum-to-zero:

\[ \sum_i \lambda^A_i = 0,\quad \sum_j \lambda^B_j = 0,\quad \sum_{i,j} \lambda^{AB}_{ij} = 0 \]

16.4 Estimasi Parameter Model (Manual, Sum-to-zero)

Misalkan:

  • A1 = Juara Lomba (Ya), A2 = Tidak
  • B1 = Puas, B2 = Tidak Puas

Observasi:

  • \(n_{11} = 25\), \(n_{12} = 12\)
  • \(n_{21} = 15\), \(n_{22} = 38\)

\[ \begin{aligned} \log(\mu_{11}) &= \lambda + \lambda^A_1 + \lambda^B_1 + \lambda^{AB}_{11} \\ \log(\mu_{12}) &= \lambda + \lambda^A_1 + \lambda^B_2 + \lambda^{AB}_{12} \\ \log(\mu_{21}) &= \lambda + \lambda^A_2 + \lambda^B_1 + \lambda^{AB}_{21} \\ \log(\mu_{22}) &= \lambda + \lambda^A_2 + \lambda^B_2 + \lambda^{AB}_{22} \end{aligned} \]

Dengan constraint sum-to-zero:

\[ \lambda^A_1 + \lambda^A_2 = 0,\quad \\ \lambda^B_1 + \lambda^B_2 = 0,\quad \\ \lambda^{AB}_{11} + \lambda^{AB}_{12} + \lambda^{AB}_{21} + \lambda^{AB}_{22} = 0 \]

Langkah-langkah:

1. Hitung rata-rata log frekuensi sel:

\[ \lambda = \frac{1}{4} \sum_{i=1}^{2} \sum_{j=1}^{2} \log(n_{ij}) \\ = \frac{1}{4} (\log(25) + \log(15) + \log(12) + \log(38)) \\ = \frac{1}{4} (3.2189 + 2.7081 + 2.4849 + 3.6376) \\ = 3.0124 \]

2. Efek utama A (Juara Lomba):

\[ \lambda^A_1 = \frac{1}{2} \left[ (\log(25) + \log(15)) - (\log(12) + \log(38)) \right] \\ = \frac{1}{2} \left[ (3.2189 + 2.7081) - (2.4849 + 3.6376) \right] \\ = \frac{1}{2} (5.9270 - 6.1225) = \frac{1}{2} (-0.1955) = -0.0977 \]

\[ \lambda^A_2 = -\lambda^A_1 = 0.0977 \]

3. Efek utama B (Kepuasan):

\[ \lambda^B_1 = \frac{1}{2} \left[ (\log(25) + \log(12)) - (\log(15) + \log(38)) \right] \\ = \frac{1}{2} \left[ (3.2189 + 2.4849) - (2.7081 + 3.6376) \right] \\ = \frac{1}{2} (5.7038 - 6.3457) = \frac{1}{2} (-0.6419) = -0.3209 \]

\[ \lambda^B_2 = -\lambda^B_1 = 0.3209 \]

4. Efek interaksi:

\[ \lambda^{AB}_{11} = \frac{1}{4} \left[ \log(25) - \log(15) - \log(12) + \log(38) \right] \\ = \frac{1}{4} [3.2189 - 2.7081 - 2.4849 + 3.6376] \\ = \frac{1}{4} (3.2189 - 2.7081 - 2.4849 + 3.6376) \\ = \frac{1}{4} (1.6635) \\ = 0.4159 \]

\[ \lambda^{AB}_{12} = -\lambda^{AB}_{11} = -0.4159 \] \[ \lambda^{AB}_{21} = -0.4159 \] \[ \lambda^{AB}_{22} = +0.4159 \]

Ringkasan parameter:

  • \(\lambda = 3.0124\)
  • \(\lambda_1^A = -0.0977,\ \lambda_2^A = 0.0977\)
  • \(\lambda_1^B = -0.3209,\ \lambda_2^B = 0.3209\)
  • \(\lambda_{11}^{AB} = 0.4159,\ \lambda_{12}^{AB} = -0.4159,\ \lambda_{21}^{AB} = -0.4159,\ \lambda_{22}^{AB} = 0.4159\)

16.5 Hitung Odds Ratio dan Interval Kepercayaan

\[ \mathrm{OR} = \frac{n_{11} n_{22}}{n_{12} n_{21}} = \frac{25 \times 38}{15 \times 12} = \frac{950}{180} = 5.28 \]

Log odds ratio:

\[ \log(\mathrm{OR}) = \log(5.28) = 1.664 \]

Standard error (SE):

\[ SE = \sqrt{ \frac{1}{n_{11}} + \frac{1}{n_{12}} + \frac{1}{n_{21}} + \frac{1}{n_{22}} }\] \[ = \sqrt{ \frac{1}{25} + \frac{1}{15} + \frac{1}{12} + \frac{1}{38} } = \sqrt{0.04 + 0.0667 + 0.0833 + 0.0263} = \sqrt{0.2163} = 0.4648 \]

95% Confidence Interval untuk log(OR):

\[ \log(\mathrm{OR}) \pm 1.96 \times SE = \\ 1.664 \pm 1.96 \times 0.4648 = (1.664 - 0.910,\ 1.664 + 0.910) = (0.754,\ 2.574) \]

Back-transform untuk memperoleh CI untuk OR:

\[ \text{Batas bawah} = \exp(0.754) = 2.13 \\ \text{Batas atas} = \exp(2.574) = 13.12 \]

Jadi, OR = 1.66 (95% CI: 2.13 – 13.12)

16.6 Fitting Model Log Linear dengan R

# Data 2x2
tabel <- matrix(c(25, 15, 12, 38), nrow = 2, byrow = TRUE)
colnames(tabel) <- c("Puas", "Tidak Puas")
rownames(tabel) <- c("Ya", "Tidak")
tabel
##       Puas Tidak Puas
## Ya      25         15
## Tidak   12         38
data <- as.data.frame(as.table(tabel))
colnames(data) <- c("Juara_Lomba", "Kepuasan", "Freq")
data
# Model tanpa interaksi
fit_no_inter <- glm(Freq ~ Juara_Lomba + Kepuasan, family = poisson, data = data)
summary(fit_no_inter)
## 
## Call:
## glm(formula = Freq ~ Juara_Lomba + Kepuasan, family = poisson, 
##     data = data)
## 
## Coefficients:
##                    Estimate Std. Error z value Pr(>|z|)    
## (Intercept)          2.8000     0.2023  13.842   <2e-16 ***
## Juara_LombaTidak     0.2231     0.2121   1.052   0.2928    
## KepuasanTidak Puas   0.3594     0.2142   1.678   0.0934 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for poisson family taken to be 1)
## 
##     Null deviance: 17.847  on 3  degrees of freedom
## Residual deviance: 13.874  on 1  degrees of freedom
## AIC: 39.311
## 
## Number of Fisher Scoring iterations: 4
# Model dengan interaksi
fit_inter <- glm(Freq ~ Juara_Lomba * Kepuasan, family = poisson, data = data)
summary(fit_inter)
## 
## Call:
## glm(formula = Freq ~ Juara_Lomba * Kepuasan, family = poisson, 
##     data = data)
## 
## Coefficients:
##                                     Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                           3.2189     0.2000  16.094  < 2e-16 ***
## Juara_LombaTidak                     -0.7340     0.3512  -2.090 0.036622 *  
## KepuasanTidak Puas                   -0.5108     0.3266  -1.564 0.117799    
## Juara_LombaTidak:KepuasanTidak Puas   1.6635     0.4651   3.577 0.000348 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for poisson family taken to be 1)
## 
##     Null deviance: 1.7847e+01  on 3  degrees of freedom
## Residual deviance: 7.1054e-15  on 0  degrees of freedom
## AIC: 27.437
## 
## Number of Fisher Scoring iterations: 3

16.7 Interpretasi Parameter

  • Parameter utama (intercept) menunjukkan rata-rata log frekuensi sel.

  • Efek “Juara_Lomba” dan “Kepuasan” menunjukkan perbedaan log frekuensi antar kategori.

  • Nilai log(5.28) = 1.66 sama dengan efek interaksi output R

16.8 Analisis Data Tabel Kontingensi 2x3

Suatu survei dilakukan untuk mengetahui hubungan antara Status Pernikahan (Menikah/Belum Menikah) dan Kategori Pengeluaran (Rendah/Sedang/Tinggi):

Pengeluaran Rendah Pengeluaran Sedang Pengeluaran Tinggi
Menikah 18 30 27
Belum Menikah 14 16 23

Data merupakan data simulasi

16.9 Bentuk Model Log-Linear untuk Tabel 2x3

Bentuk umum model log-linear untuk tabel 2x3 (dengan sum-to-zero constraint):

\[ \log(\mu_{ij}) = \lambda + \lambda^A_i + \lambda^B_j + \lambda^{AB}_{ij} \]

dengan:

  • \(\mu_{ij}\): ekspektasi frekuensi pada baris ke-\(i\), kolom ke-\(j\)
  • \(A\): Status Pernikahan (\(i = 1\): Menikah, \(i = 2\): Belum Menikah)
  • \(B\): Kategori Pengeluaran (\(j = 1\): Rendah, \(j = 2\): Sedang, \(j = 3\): Tinggi)

Constraint: \[ \sum_i \lambda^A_i = 0,\quad \sum_j \lambda^B_j = 0,\quad \sum_i \lambda^{AB}_{ij} = 0,\quad \sum_j \lambda^{AB}_{ij} = 0 \]

Secara eksplisit:

\[ \log(\mu_{ij}) = \lambda + \begin{cases} \lambda^A_1 & \text{(Laki-laki)} \\ \lambda^A_2 & \text{(Perempuan)} \end{cases} + \begin{cases} \lambda^B_1 & \text{(Rendah)} \\ \lambda^B_2 & \text{(Standar)} \\ \lambda^B_3 & \text{(Tinggi)} \end{cases} + \lambda^{AB}_{ij} \text{ (interaksi jika ada)} \]

16.10 Fitting Model Log Linear di R

# Membuat data frame dari tabel
tabel2x3 <- matrix(c(18, 30, 27, 14, 16, 23), nrow = 2, byrow = TRUE)
colnames(tabel2x3) <- c("Pengeluaran Rendah", "Pengeluaran Sedang", "Pengeluaran Tinggi")
rownames(tabel2x3) <- c("Menikah", "Belum Menikah")
tabel2x3
##               Pengeluaran Rendah Pengeluaran Sedang Pengeluaran Tinggi
## Menikah                       18                 30                 27
## Belum Menikah                 14                 16                 23
# Ubah menjadi data.frame untuk glm
data2x3 <- as.data.frame(as.table(tabel2x3))
colnames(data2x3) <- c("Status_Pernikahan", "Kategori_Pengeluaran", "Freq")
data2x3
# Model log-linear tanpa interaksi (asumsi independen)
fit_no_inter <- glm(Freq ~ Status_Pernikahan + Kategori_Pengeluaran, family = poisson(), data = data2x3)
summary(fit_no_inter)
## 
## Call:
## glm(formula = Freq ~ Status_Pernikahan + Kategori_Pengeluaran, 
##     family = poisson(), data = data2x3)
## 
## Coefficients:
##                                        Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                              2.9312     0.1918  15.286   <2e-16 ***
## Status_PernikahanBelum Menikah          -0.3472     0.1794  -1.935   0.0530 .  
## Kategori_PengeluaranPengeluaran Sedang   0.3629     0.2302   1.577   0.1149    
## Kategori_PengeluaranPengeluaran Tinggi   0.4463     0.2264   1.971   0.0487 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for poisson family taken to be 1)
## 
##     Null deviance: 9.5203  on 5  degrees of freedom
## Residual deviance: 1.3508  on 2  degrees of freedom
## AIC: 38.563
## 
## Number of Fisher Scoring iterations: 4
# Model log-linear dengan interaksi (untuk cek asosiasi)
fit_inter <- glm(Freq ~ Status_Pernikahan * Kategori_Pengeluaran, family = poisson(), data = data2x3)
summary(fit_inter)
## 
## Call:
## glm(formula = Freq ~ Status_Pernikahan * Kategori_Pengeluaran, 
##     family = poisson(), data = data2x3)
## 
## Coefficients:
##                                                                       Estimate
## (Intercept)                                                            2.89037
## Status_PernikahanBelum Menikah                                        -0.25131
## Kategori_PengeluaranPengeluaran Sedang                                 0.51083
## Kategori_PengeluaranPengeluaran Tinggi                                 0.40547
## Status_PernikahanBelum Menikah:Kategori_PengeluaranPengeluaran Sedang -0.37729
## Status_PernikahanBelum Menikah:Kategori_PengeluaranPengeluaran Tinggi  0.09097
##                                                                       Std. Error
## (Intercept)                                                              0.23570
## Status_PernikahanBelum Menikah                                           0.35635
## Kategori_PengeluaranPengeluaran Sedang                                   0.29814
## Kategori_PengeluaranPengeluaran Tinggi                                   0.30429
## Status_PernikahanBelum Menikah:Kategori_PengeluaranPengeluaran Sedang    0.47204
## Status_PernikahanBelum Menikah:Kategori_PengeluaranPengeluaran Tinggi    0.45552
##                                                                       z value
## (Intercept)                                                            12.263
## Status_PernikahanBelum Menikah                                         -0.705
## Kategori_PengeluaranPengeluaran Sedang                                  1.713
## Kategori_PengeluaranPengeluaran Tinggi                                  1.332
## Status_PernikahanBelum Menikah:Kategori_PengeluaranPengeluaran Sedang  -0.799
## Status_PernikahanBelum Menikah:Kategori_PengeluaranPengeluaran Tinggi   0.200
##                                                                       Pr(>|z|)
## (Intercept)                                                             <2e-16
## Status_PernikahanBelum Menikah                                          0.4807
## Kategori_PengeluaranPengeluaran Sedang                                  0.0866
## Kategori_PengeluaranPengeluaran Tinggi                                  0.1827
## Status_PernikahanBelum Menikah:Kategori_PengeluaranPengeluaran Sedang   0.4241
## Status_PernikahanBelum Menikah:Kategori_PengeluaranPengeluaran Tinggi   0.8417
##                                                                          
## (Intercept)                                                           ***
## Status_PernikahanBelum Menikah                                           
## Kategori_PengeluaranPengeluaran Sedang                                .  
## Kategori_PengeluaranPengeluaran Tinggi                                   
## Status_PernikahanBelum Menikah:Kategori_PengeluaranPengeluaran Sedang    
## Status_PernikahanBelum Menikah:Kategori_PengeluaranPengeluaran Tinggi    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for poisson family taken to be 1)
## 
##     Null deviance: 9.5203e+00  on 5  degrees of freedom
## Residual deviance: 5.3291e-15  on 0  degrees of freedom
## AIC: 41.212
## 
## Number of Fisher Scoring iterations: 3

16.11 Interpretasi

Model tanpa interaksi:

  • Jika residual deviance tidak signifikan, maka Status Pernikahan dan Kategori Pengeluaran dianggap independen.

  • Intercept: log-frekuensi pada kategori referensi (Menikah, Pengeluaran Rendah).

  • Koefisien Status_PernikahanBelum Menikah: perbedaan log-frekuensi antara Belum Menikah dan Menikah (pada Pengeluaran Rendah).

  • Koefisien Kategori_PengeluaranPengeluaran Sedang/Tinggi: perbedaan log-frekuensi kategori Pengeluaran Sedang/Tinggi terhadap Rendah (pada Menikah). - Dari output, hanya kategori Pengeluaran Tinggi yang signifikan pada level 5% (\(p = 0.0487\)), artinya pada kelompok Menikah, frekuensi dengan Pengeluaran Tinggi secara signifikan lebih besar dibandingkan Pengeluaran Rendah.

  • Koefisien Status_PernikahanBelum Menikah hampir signifikan (\(p = 0.0530\)), menunjukkan kecenderungan bahwa Belum Menikah memiliki frekuensi lebih kecil daripada Menikah (pada Pengeluaran Rendah), namun bukti statistiknya masih lemah.

Model dengan interaksi:

  • Jika koefisien interaksi tidak signifikan, tidak ada asosiasi yang kuat antara Status Pernikahan dan Kategori Pengeluaran. - Intercept: log-frekuensi referensi (Menikah, Pengeluaran Rendah).

  • Koefisien Status_PernikahanBelum Menikah: perbedaan log-frekuensi Belum Menikah vs Menikah (pada Pengeluaran Rendah).

  • Koefisien Kategori_PengeluaranPengeluaran Sedang/Tinggi: perbedaan log-frekuensi kategori Pengeluaran terhadap Rendah (pada Menikah).

  • Koefisien interaksi (misal, Status_PernikahanBelum Menikah:Kategori_PengeluaranPengeluaran Sedang): perbedaan tambahan log-frekuensi antara kategori tersebut dibandingkan referensi.

  • Dari output, tidak ada koefisien interaksi yang signifikan (\(p > 0.05\)), sehingga tidak ada bukti kuat hubungan/asosiasi antara Status Pernikahan dan Kategori Pengeluaran. Distribusi pengeluaran cenderung mirip antara kelompok Menikah dan Belum Menikah.

17 Model Log Linear 3 Arah

Salah satu tujuan utama dari model log-linear adalah mengestimasi parameter yang menggambarkan hubungan antar variabel kategorikal. Pada bagian ini, dibahas model log-linear untuk tabel kontingensi tiga arah, yang melibatkan tiga variabel kategorik sehingga jenis interaksi yang dapat dimasukkan dalam model lebih beragam. Dalam situasi ini, interaksi tertinggi yang bisa dimodelkan adalah interaksi tiga arah, yaitu efek yang muncul ketika ketiga variabel saling berinteraksi secara bersamaan.

17.1 Model Log-Linear untuk Tabel Tiga Arah

Model log-linear yang melibatkan tiga variabel kategorik (misal: X, Y, dan Z) dapat dibangun dalam berbagai bentuk model, tergantung pada tingkat interaksi yang ingin dimasukkan. Berikut adalah beberapa alternatif model log-linear yang umum digunakan.

1. Model Saturated

\[ \log(\mu_{ijk}) = \lambda + \lambda^X_i + \lambda^Y_j + \lambda^Z_k + \lambda^{XY}_{ij} + \lambda^{XZ}_{ik} + \lambda^{YZ}_{jk} + \lambda^{XYZ}_{ijk} \]

Model ini memuat semua kemungkinan interaksi, termasuk interaksi tiga arah (X, Y, dan Z).

2. Model Homogen

\[ \log(\mu_{ijk}) = \lambda + \lambda^X_i + \lambda^Y_j + \lambda^Z_k + \lambda^{XY}_{ij} + \lambda^{XZ}_{ik} + \lambda^{YZ}_{jk} \]

Model ini hanya mengakomodasi interaksi dua arah antar variabel tanpa memasukkan interaksi tiga arah.

3. Model Conditional

  • Conditional pada X:

\[ \log(\mu_{ijk}) = \lambda + \lambda^X_i + \lambda^Y_j + \lambda^Z_k + \lambda^{XY}_{ij} + \lambda^{XZ}_{ik} \]

Memuat interaksi X dengan Y dan X dengan Z.

  • Conditional pada Y:

\[ \log(\mu_{ijk}) = \lambda + \lambda^X_i + \lambda^Y_j + \lambda^Z_k + \lambda^{XY}_{ij} + \lambda^{YZ}_{jk} \]

Memuat interaksi Y dengan X dan Y dengan Z.

  • Conditional pada Z:

\[ \log(\mu_{ijk}) = \lambda + \lambda^X_i + \lambda^Y_j + \lambda^Z_k + \lambda^{XZ}_{ik} + \lambda^{YZ}_{jk} \]

Memuat interaksi Z dengan X dan Z dengan Y.

4. Model Joint Independence

  • Independensi antara X & Y:

\[ \log(\mu_{ijk}) = \lambda + \lambda^X_i + \lambda^Y_j + \lambda^Z_k + \lambda^{XZ}_{ik} + \lambda^{YZ}_{jk} \]

  • Independensi antara X & Z:

\[ \log(\mu_{ijk}) = \lambda + \lambda^X_i + \lambda^Y_j + \lambda^Z_k + \lambda^{XY}_{ij} + \lambda^{YZ}_{jk} \]

  • Independensi antara Y & Z:

\[ \log(\mu_{ijk}) = \lambda + \lambda^X_i + \lambda^Y_j + \lambda^Z_k + \lambda^{XY}_{ij} + \lambda^{XZ}_{ik} \]

5. Model Tanpa Interaksi

\[ \log(\mu_{ijk}) = \lambda + \lambda^X_i + \lambda^Y_j + \lambda^Z_k \] Model ini hanya memasukkan efek utama tanpa interaksi antar variabel.

17.2 Pengujian Interaksi dalam Model Log-Linear Tiga Arah

Dalam analisis model log-linear tiga arah, pengujian interaksi dilakukan untuk mengetahui ada atau tidaknya interaksi antar variabel. Pengujian ini dilakukan secara bertahap, dimulai dari tingkat interaksi tertinggi ke yang lebih rendah. Untuk model log-linear dengan tiga peubah (X, Y, dan Z), tahapan pengujian meliputi:

1) Pengujian Interaksi Tiga Arah (XYZ):

  • Bandingkan model saturated dengan model homogenous.

2) Pengujian Interaksi Dua Arah (XY, XZ, YZ):

  • Bandingkan model homogenous dengan model conditional.

  • Bandingkan model conditional dengan model joint independence.

  • Bandingkan model joint independence dengan model tanpa interaksi.

Setiap tahapan pengujian dilakukan untuk menilai kecocokan model dan menentukan struktur interaksi mana yang paling sesuai dengan data yang diamati.

17.3 Studi Kasus

17.3.1 Soal

Sebuah survei dilakukan untuk mengetahui hubungan antara Kategori Perokok (Ringan/Sedang/Berat), Jenis Kelamin (Laki-laki/Perempuan), dan Sikap terhadap Iklan Rokok (Mendukung/Menolak). Berikut data hasil survei:

17.3.2 Tabel Data Survei

\[ \begin{array}{|c|c|c|c|c|} \hline \textbf{Kategori Perokok} & \textbf{Jenis Kelamin} & \textbf{Mendukung} & \textbf{Menolak} & \textbf{Total} \\ \hline Ringan & Laki-laki & 58 & 22 & 80 \\ Ringan & Perempuan & 45 & 32 & 77 \\ Ringan & Total & 103 & 54 & 157 \\ \hline Sedang & Laki-laki & 41 & 29 & 70 \\ Sedang & Perempuan & 30 & 27 & 57 \\ Sedang & Total & 71 & 56 & 127 \\ \hline Berat & Laki-laki & 38 & 20 & 58 \\ Berat & Perempuan & 25 & 34 & 59 \\ Berat & Total & 63 & 54 & 117 \\ \hline \end{array} \]

Keterangan

  • Kategori Perokok: Ringan, Sedang, Berat

  • Jenis Kelamin: Laki-laki, Perempuan

  • Sikap: Mendukung (Favor), Menolak (Oppose) iklan rokok

17.4 Analisis Log-Linear untuk Tabel Tiga Arah

17.4.1 Package yang Digunakan

library("epitools")
library("DescTools")
library("lawstat")

Input Data

# Input data sesuai tabel praktikum
Kategori_Perokok <- factor(rep(c("Ringan", "Sedang", "Berat"), each = 4))
Jenis_Kelamin <- factor(rep(c("Laki-laki", "Perempuan"), each = 2, times = 3))
Sikap <- factor(rep(c("Mendukung", "Menolak"), times = 6))
Freq <- c(58, 22, 45, 32, 41, 29, 30, 27, 38, 20, 25, 34)

data <- data.frame(
  Kategori_Perokok = Kategori_Perokok,
  Jenis_Kelamin = Jenis_Kelamin,
  Sikap = Sikap,
  Freq = Freq
)
data

Membentuk Tabel Kontigensi 3 Arah

table3d <- xtabs(Freq ~ Kategori_Perokok + Jenis_Kelamin + Sikap, data = data)
ftable(table3d)
##                                Sikap Mendukung Menolak
## Kategori_Perokok Jenis_Kelamin                        
## Berat            Laki-laki                  38      20
##                  Perempuan                  25      34
## Ringan           Laki-laki                  58      22
##                  Perempuan                  45      32
## Sedang           Laki-laki                  41      29
##                  Perempuan                  30      27

Analisis Log-Linear: Kita akan memodelkan tabel ini menggunakan beberapa model log-linear dan membandingkan kecocokan model (parsimonious model)

17.5 Uji Model Interaksi Tiga Arah (Saturated VS Homogenous)

17.5.1 Penentuan Kategori Referensi

x.sex<- relevel(Jenis_Kelamin, ref = "Perempuan")
y.sikap <- relevel(Sikap, ref = "Menolak")
z.rokok <- relevel(Kategori_Perokok, ref = "Berat")

Model Saturated Model log-linear saturated memasukkan semua interaksi hingga tiga arah:

\[ \log(\mu_{ijk}) = \lambda + \lambda^X_i + \lambda^Y_j + \lambda^Z_k + \lambda^{XY}_{ij} + \lambda^{XZ}_{ik} + \lambda^{YZ}_{jk} + \lambda^{XYZ}_{ijk} \]

# Model saturated
library(knitr)
model_saturated <- glm(Freq ~ x.sex + y.sikap + z.rokok +
                         x.sex*y.sikap + x.sex*z.rokok + y.sikap*z.rokok +
                         x.sex*y.sikap*z.rokok,
                       family = poisson(link = "log"))
summary(model_saturated)
## 
## Call:
## glm(formula = Freq ~ x.sex + y.sikap + z.rokok + x.sex * y.sikap + 
##     x.sex * z.rokok + y.sikap * z.rokok + x.sex * y.sikap * z.rokok, 
##     family = poisson(link = "log"))
## 
## Coefficients:
##                                               Estimate Std. Error z value
## (Intercept)                                    3.52636    0.17150  20.562
## x.sexLaki-laki                                -0.53063    0.28180  -1.883
## y.sikapMendukung                              -0.30748    0.26346  -1.167
## z.rokokRingan                                 -0.06062    0.24630  -0.246
## z.rokokSedang                                 -0.23052    0.25778  -0.894
## x.sexLaki-laki:y.sikapMendukung                0.94934    0.38174   2.487
## x.sexLaki-laki:z.rokokRingan                   0.15593    0.39512   0.395
## x.sexLaki-laki:z.rokokSedang                   0.60209    0.38850   1.550
## y.sikapMendukung:z.rokokRingan                 0.64841    0.35055   1.850
## y.sikapMendukung:z.rokokSedang                 0.41285    0.37387   1.104
## x.sexLaki-laki:y.sikapMendukung:z.rokokRingan -0.32086    0.51176  -0.627
## x.sexLaki-laki:y.sikapMendukung:z.rokokSedang -0.70842    0.52438  -1.351
##                                               Pr(>|z|)    
## (Intercept)                                     <2e-16 ***
## x.sexLaki-laki                                  0.0597 .  
## y.sikapMendukung                                0.2432    
## z.rokokRingan                                   0.8056    
## z.rokokSedang                                   0.3712    
## x.sexLaki-laki:y.sikapMendukung                 0.0129 *  
## x.sexLaki-laki:z.rokokRingan                    0.6931    
## x.sexLaki-laki:z.rokokSedang                    0.1212    
## y.sikapMendukung:z.rokokRingan                  0.0644 .  
## y.sikapMendukung:z.rokokSedang                  0.2695    
## x.sexLaki-laki:y.sikapMendukung:z.rokokRingan   0.5307    
## x.sexLaki-laki:y.sikapMendukung:z.rokokSedang   0.1767    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for poisson family taken to be 1)
## 
##     Null deviance: 3.6047e+01  on 11  degrees of freedom
## Residual deviance: 6.6613e-16  on  0  degrees of freedom
## AIC: 87.7
## 
## Number of Fisher Scoring iterations: 3
exp_coef <- exp(coef(model_saturated))
exp_coef
##                                   (Intercept) 
##                                    34.0000000 
##                                x.sexLaki-laki 
##                                     0.5882353 
##                              y.sikapMendukung 
##                                     0.7352941 
##                                 z.rokokRingan 
##                                     0.9411765 
##                                 z.rokokSedang 
##                                     0.7941176 
##               x.sexLaki-laki:y.sikapMendukung 
##                                     2.5840000 
##                  x.sexLaki-laki:z.rokokRingan 
##                                     1.1687500 
##                  x.sexLaki-laki:z.rokokSedang 
##                                     1.8259259 
##                y.sikapMendukung:z.rokokRingan 
##                                     1.9125000 
##                y.sikapMendukung:z.rokokSedang 
##                                     1.5111111 
## x.sexLaki-laki:y.sikapMendukung:z.rokokRingan 
##                                     0.7255215 
## x.sexLaki-laki:y.sikapMendukung:z.rokokSedang 
##                                     0.4924202

17.5.2 Ringkasan Model

Model yang digunakan adalah model log-linear saturated yang memasukkan semua efek utama, interaksi dua arah, serta interaksi tiga arah. Model ini memodelkan hubungan antara Kategori Perokok (z.rokok), Jenis Kelamin (x.sex), dan Sikap (y.sikap) terhadap frekuensi responden.

17.5.3 Hasil Estimasi Koefisien

library(knitr)

signif_stars <- function(pval) {
  if (pval < 0.001) return("***")
  else if (pval < 0.01) return("**")
  else if (pval < 0.05) return("*")
  else if (pval < 0.1) return(".")
  else return("")
}

coef_saturated <- round(summary(model_saturated)$coefficients, 3)

colnames(coef_saturated) <- c("Est", "SE", "z", "p")

Signif <- sapply(coef_saturated[, "p"], signif_stars)
coef_table <- cbind(coef_saturated, Sig = Signif)

kable(coef_table, format = "pipe", caption = "Tabel Koefisien Model Saturated")
Tabel Koefisien Model Saturated
Est SE z p Sig
(Intercept) 3.526 0.171 20.562 0 ***
x.sexLaki-laki -0.531 0.282 -1.883 0.06 .
y.sikapMendukung -0.307 0.263 -1.167 0.243
z.rokokRingan -0.061 0.246 -0.246 0.806
z.rokokSedang -0.231 0.258 -0.894 0.371
x.sexLaki-laki:y.sikapMendukung 0.949 0.382 2.487 0.013 *
x.sexLaki-laki:z.rokokRingan 0.156 0.395 0.395 0.693
x.sexLaki-laki:z.rokokSedang 0.602 0.388 1.55 0.121
y.sikapMendukung:z.rokokRingan 0.648 0.351 1.85 0.064 .
y.sikapMendukung:z.rokokSedang 0.413 0.374 1.104 0.269
x.sexLaki-laki:y.sikapMendukung:z.rokokRingan -0.321 0.512 -0.627 0.531
x.sexLaki-laki:y.sikapMendukung:z.rokokSedang -0.708 0.524 -1.351 0.177

17.5.4 Interpretasi Koefisien

Interpretasi model saturated log-linear (dengan semua efek utama, dua arah, dan tiga arah):

  • (Intercept): Nilai rata-rata log jumlah kasus pada kategori referensi (Perempuan, Menolak, Berat) adalah 3.526, sehingga ekspektasi kasus pada referensi sekitar \(\exp(3.526) = 34\).
  • x.sexLaki-laki: Laki-laki memiliki expected count sekitar 0.59 kali Perempuan pada kategori referensi lain (\(p = 0.06\)), namun hasil ini tidak signifikan.
  • y.sikapMendukung: Responden yang mendukung iklan rokok memiliki expected count sekitar 0.74 kali dibanding yang menolak pada kategori referensi (\(p = 0.24\), tidak signifikan).
  • z.rokokRingan/Sedang: Kategori perokok Ringan memiliki expected count 0.94 kali dan Sedang 0.79 kali dibandingkan Berat pada referensi lain (keduanya tidak signifikan).
  • Interaksi dua arah:
    • x.sexLaki-laki:y.sikapMendukung: Laki-laki yang mendukung iklan rokok, expected count-nya 2.58 kali dibanding perempuan yang menolak pada referensi lain, dan signifikan (\(p = 0.013\)).
    • Efek interaksi dua arah lain tidak signifikan (\(p > 0.05\)).
  • Interaksi tiga arah: Tidak ada efek tiga arah yang signifikan (\(p > 0.05\)), sehingga tidak ada bukti kuat adanya efek gabungan ketiga variabel.

17.5.5 Goodness of Fit

  • Residual deviance yang mendekati 0 menunjukkan bahwa model saturated benar-benar sesuai dengan data (seluruh variasi data berhasil dijelaskan oleh model).
  • Nilai AIC = 87.7 dapat digunakan untuk membandingkan model saturated ini dengan model yang lebih sederhana; model dengan AIC lebih kecil dianggap lebih baik dalam hal keseimbangan antara kecocokan dan kompleksitas.

17.5.6 Kesimpulan

  • Efek utama yang paling signifikan adalah kategori referensi (misal, Perempuan, Menolak, Berat) memiliki ekspektasi dasar. Tidak ditemukan bukti kuat adanya interaksi tiga arah yang signifikan.

  • Terdapat bukti kuat interaksi dua arah yang signifikan antara beberapa variabel, misalnya antara Jenis Kelamin dan Sikap.

  • Model yang lebih sederhana (tanpa interaksi tiga arah) dapat dipertimbangkan untuk mendapatkan model yang lebih parsimonious.

    Catatan interpretasi:

  • Nilai exp(coef) menyatakan rasio ekspektasi (expected count ratio) dibandingkan baseline.

  • Efek positif akan menaikkan expected count; efek negatif akan menurunkan expected count.

  • Koefisien dianggap signifikan jika p-value < 0.05.

17.6 Model Homogenous

Model log-linear homogenous memasukkan semua efek utama dan semua interaksi dua arah, tanpa interaksi tiga arah. Secara matematis, model ini dapat dituliskan sebagai berikut:

\[ \log(\mu_{ijk}) = \lambda + \lambda_i^X + \lambda_j^Y + \lambda_k^Z + \lambda_{ij}^{XY} + \lambda_{ik}^{XZ} + \lambda_{jk}^{YZ} \]

# Homogenous Model
model_homogenous <- glm(Freq ~ x.sex + y.sikap + z.rokok +
                          x.sex*y.sikap + x.sex*z.rokok + y.sikap*z.rokok,
                        family = poisson(link = "log"))
summary(model_homogenous)
## 
## Call:
## glm(formula = Freq ~ x.sex + y.sikap + z.rokok + x.sex * y.sikap + 
##     x.sex * z.rokok + y.sikap * z.rokok, family = poisson(link = "log"))
## 
## Coefficients:
##                                  Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                      3.451124   0.163522  21.105  < 2e-16 ***
## x.sexLaki-laki                  -0.339202   0.217955  -1.556  0.11964    
## y.sikapMendukung                -0.138241   0.212562  -0.650  0.51546    
## z.rokokRingan                    0.006059   0.218181   0.028  0.97785    
## z.rokokSedang                   -0.058741   0.222756  -0.264  0.79201    
## x.sexLaki-laki:y.sikapMendukung  0.596860   0.206918   2.885  0.00392 ** 
## x.sexLaki-laki:z.rokokRingan    -0.014626   0.248097  -0.059  0.95299    
## x.sexLaki-laki:z.rokokSedang     0.214990   0.259775   0.828  0.40790    
## y.sikapMendukung:z.rokokRingan   0.493759   0.252929   1.952  0.05092 .  
## y.sikapMendukung:z.rokokSedang   0.051398   0.260609   0.197  0.84365    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for poisson family taken to be 1)
## 
##     Null deviance: 36.0473  on 11  degrees of freedom
## Residual deviance:  1.8488  on  2  degrees of freedom
## AIC: 85.549
## 
## Number of Fisher Scoring iterations: 3

17.7 Uji Hipotesis: Apakah Ada Interaksi Tiga Arah? (Saturated vs Homogenous)

Pengujian ini menggunakan residual deviance dari kedua model (saturated dan homogenous).

17.7.1 Langkah-Langkah Pengujian

17.7.1.1 Hipotesis

H0: Tidak ada interaksi tiga arah (model homogenous sudah cukup)

H1: Ada interaksi tiga arah (model saturated diperlukan)

17.7.1.2 Hitung Selisih Deviance

# Deviance antar model
model_homogenous$deviance
## [1] 1.848806
model_saturated$deviance
## [1] 6.661338e-16
Deviance.model <- model_homogenous$deviance - model_saturated$deviance
Deviance.model
## [1] 1.848806

17.7.1.3 Hitung Derajat Bebas

# Derajat bebas = db model homogenous - db model saturated
derajat.bebas <- (model_homogenous$df.residual - model_saturated$df.residual)
derajat.bebas
## [1] 2

17.7.1.4 Chi Square Tabel

chi.tabel <- qchisq(1 - 0.05, df = derajat.bebas)
chi.tabel
## [1] 5.991465

17.7.1.5 Keputusan Uji

Keputusan <- ifelse(Deviance.model <= chi.tabel, "Terima H0", "Tolak H0")
Keputusan
## [1] "Terima H0"

Interpretasi Pada taraf nyata 5%, hasil pengujian menunjukkan bahwa H0 diterima. Artinya, belum ada bukti yang cukup kuat untuk menyatakan adanya interaksi tiga arah antara Jenis Kelamin, Kategori Perokok, dan Sikap. Dengan demikian, model tanpa interaksi tiga arah sudah memadai untuk menjelaskan data.

Rangkuman

Pengujian Ada Tidaknya Interaksi Tiga Arah (Saturated Model vs Homogenous Model)

Hipotesis:

  • \(H_0\): \(\lambda_{ijk}^{XYZ} = 0\) (Tidak ada interaksi tiga arah; model yang terbentuk adalah model homogenous)
  • \(H_1\): \(\lambda_{ijk}^{XYZ} \neq 0\) (Ada interaksi tiga arah; model yang terbentuk adalah model saturated)

Tingkat Signifikansi:

  • \(\alpha = 5\%\)

Statistik Uji:

\[ \Delta \text{Deviance} = \text{Deviance model homogenous} - \text{Deviance model saturated} = 1.8488 - 0.0 = 1.8488 \]

\[ df = df\ \text{model homogenous} - df\ \text{model saturated} = 2 - 0 = 2 \]

Daerah Penolakan:

  • Tolak \(H_0\) jika \(\Delta \text{Deviance} > \chi^2_{0.05, 2} = 5.991\)

Keputusan:

  • Karena \(1.8488 < 5.991\), maka tidak tolak \(H_0\)

Interpretasi:

  • Pada taraf nyata 5%, Ditemukan bahwa hasil pengujian adalah Terima H0. Hal ini berarti bahwa belum ada cukup kuat untuk menyatakan adanya interaksi antara Jenis Kelamin, Kategori Perokok, dan Sikap.

17.8 Uji Model Interaksi Dua Arah (Homogenous VS Conditional On X)

17.8.1 Model Conditional on X

Model log-linear conditional pada X memasukkan efek utama dan interaksi dua arah antara X dengan Y dan X dengan Z, tanpa interaksi antara Y dengan Z maupun interaksi tiga arah

\[ \log(\mu_{ijk}) = \lambda + \lambda_i^X + \lambda_j^Y + \lambda_k^Z + \lambda_{ij}^{XY} + \lambda_{ik}^{XZ} \]

# Conditional Association on X
model_conditional_X <- glm(Freq ~ x.sex + y.sikap + z.rokok +
                             x.sex*y.sikap + x.sex*z.rokok,
                           family = poisson(link = "log"))
summary(model_conditional_X)
## 
## Call:
## glm(formula = Freq ~ x.sex + y.sikap + z.rokok + x.sex * y.sikap + 
##     x.sex * z.rokok, family = poisson(link = "log"))
## 
## Coefficients:
##                                 Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                      3.34745    0.15007  22.306  < 2e-16 ***
## x.sexLaki-laki                  -0.36186    0.22145  -1.634  0.10224    
## y.sikapMendukung                 0.07257    0.14406   0.504  0.61443    
## z.rokokRingan                    0.26627    0.17302   1.539  0.12382    
## z.rokokSedang                   -0.03449    0.18572  -0.186  0.85269    
## x.sexLaki-laki:y.sikapMendukung  0.58473    0.20527   2.849  0.00439 ** 
## x.sexLaki-laki:z.rokokRingan     0.05532    0.24429   0.226  0.82086    
## x.sexLaki-laki:z.rokokSedang     0.22254    0.25694   0.866  0.38644    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for poisson family taken to be 1)
## 
##     Null deviance: 36.0473  on 11  degrees of freedom
## Residual deviance:  6.7223  on  4  degrees of freedom
## AIC: 86.422
## 
## Number of Fisher Scoring iterations: 4

17.8.2 Pengujian Ada Tidaknya Interaksi Antara Y dan Z (Homogenous Model vs Conditional Association on X)

• Hipotesis

\(H_0\): \(\lambda_{jk}^{YZ} = 0\) (Tidak ada interaksi antara Sikap (Y) dan Kategori Perokok (Z))

\(H_1\): \(\lambda_{jk}^{YZ} \neq 0\) (Ada interaksi antara Sikap (Y) dan Kategori Perokok (Z))

• Taraf Signifikansi \[ \alpha = 5\% \]

• Statistik Uji \[ \Delta \text{Deviance} = \text{Deviance model conditional on } X - \text{Deviance model homogenous}\\ \] \[ = 6.7217 - 1.8488 = 4.8735\\ \] \[ db = db_{\text{model conditional on } X} - db_{\text{model homogenous}} \\= 4 - 2 = 2 \]

• Daerah Penolakan \[ \text{Tolak } H_0 \text{ jika } \Delta \text{Deviance} > \chi^2_{0.05, 2} = 5.991 \] • Keputusan

Karena 4.8735 < 5.991, maka terima \(H_0\)

• Kesimpulan Dengan taraf nyata 5%, ditemukan bahwa hasil pengujian adalah terima H0. Hal ini menyatakan adanya tidak ada interaksi antara Sikap dan Kategori Perokok.

17.8.3 Pengujian Selisih Deviance (Conditional on X vs Homogenous)

# Selisih deviance antar model
Deviance.model <- model_conditional_X$deviance - model_homogenous$deviance
Deviance.model
## [1] 4.873533

Hitung Derajat Bebas

# Chi Square tabel dengan alpha = 0.05
derajat.bebas <- (4 - 2)
derajat.bebas
## [1] 2

Nilai Chi-Square Tabel

chi.tabel <- qchisq((1 - 0.05), df = derajat.bebas)
chi.tabel
## [1] 5.991465

Keputusan Uji

Keputusan <- ifelse(Deviance.model <= chi.tabel, "Terima", "Tolak")
Keputusan
## [1] "Terima"

Interpretasi Dengan taraf nyata 5%, ditemukan bahwa hasil pengujian adalah terima H0. Hal ini menyatakan tidak ada interaksi antara Sikap dan Kategori Perokok.

17.9 Uji Model Interaksi Dua Arah (Homogenous VS Conditional On Y)

17.9.1 Model Conditional on Y

Model log-linear conditional pada Y memasukkan efek utama dan interaksi dua arah antara X dengan Y dan Y dengan Z, tanpa interaksi antara X dengan Z maupun interaksi tiga arah.

\[ \log(\mu_{ijk}) = \lambda + \lambda_i^X + \lambda_j^Y + \lambda_k^Z + \lambda_{ij}^{XY} + \lambda_{jk}^{YZ} \]

# Conditional Association on Y
model_conditional_Y <- glm(Freq ~ x.sex + y.sikap + z.rokok +
                             x.sex*y.sikap + y.sikap*z.rokok,
                           family = poisson(link = "log"))
summary(model_conditional_Y)
## 
## Call:
## glm(formula = Freq ~ x.sex + y.sikap + z.rokok + x.sex * y.sikap + 
##     y.sikap * z.rokok, family = poisson(link = "log"))
## 
## Coefficients:
##                                   Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                      3.422e+00  1.522e-01  22.477  < 2e-16 ***
## x.sexLaki-laki                  -2.699e-01  1.576e-01  -1.713  0.08677 .  
## y.sikapMendukung                -1.415e-01  2.117e-01  -0.668  0.50401    
## z.rokokRingan                    2.799e-16  1.925e-01   0.000  1.00000    
## z.rokokSedang                    3.637e-02  1.907e-01   0.191  0.84877    
## x.sexLaki-laki:y.sikapMendukung  5.847e-01  2.053e-01   2.849  0.00439 ** 
## y.sikapMendukung:z.rokokRingan   4.916e-01  2.502e-01   1.965  0.04947 *  
## y.sikapMendukung:z.rokokSedang   8.318e-02  2.576e-01   0.323  0.74673    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for poisson family taken to be 1)
## 
##     Null deviance: 36.0473  on 11  degrees of freedom
## Residual deviance:  2.9034  on  4  degrees of freedom
## AIC: 82.603
## 
## Number of Fisher Scoring iterations: 4

17.9.2 Pengujian Ada Tidaknya Interaksi antara X dan Z (Homogenous model vs Conditional Association on Y)

• Hipotesis

\(H_0\): \(\lambda_{ik}^{XZ} = 0\) (Tidak ada interaksi antara jenis Kelamin (X) dan Kategori Perokok (Z))

\(H_1\): \(\lambda_{ik}^{XZ} \ne 0\) (Ada interaksi antara jenis Kelamin (X) dan Kategori Perokok (Z))

• Tingkat Signifikansi

\[ \alpha = 5\% \]

• Statistik Uji

\[ \Delta\text{Deviance} = \text{Deviance model conditional on } Y - \text{Deviance model homogenous} \]

\[ = 2.9034 - 1.8488 = 1.0546 \]

\[ db = \text{df model conditional on } Y - \text{df model homogenous} \\ = 4 - 2 = 2 \] • Daerah Penolakan

Tolak \(H_0\) jika \(\Delta\text{Deviance} > \chi^2_{0.05, 2} = 5.991\)

• Keputusan

\[ \text{Karena } 1.0546 < 5.991, \text{ maka terima } H_0 \] • Kesimpulan

  • Dengan taraf nyata 5%, didapatkan bahwa hasilnya terima H0 yang berarti bahwa tidak ada interaksi antara Jenis kelamin dan Kategori Perokok.

17.9.3 Pengujian Hipotesis Interaksi X dan Z (Conditional on Y vs Homogenous)

# Deviance of Model
Deviance.model <- model_conditional_Y$deviance - model_homogenous$deviance 
Deviance.model
## [1] 1.054623

Hitung Derajat Bebas

derajat.bebas <- (4 - 2)
derajat.bebas
## [1] 2

Nilai Chi-Square Tabel

chi.tabel <- qchisq((1 - 0.05), df = derajat.bebas)
chi.tabel
## [1] 5.991465

Keputusan Uji

Keputusan <- ifelse(Deviance.model <= chi.tabel, "Terima", "Tolak")
Keputusan
## [1] "Terima"

Interpretasi

Dengan taraf nyata 5%, didapatkan bahwa hasilnya terima H0 yang berarti bahwa tidak ada interaksi antara Jenis kelamin dan Kategori Perokok.

17.10 Uji Model Interaksi Dua Arah Homogenous vs Conditional On Z)

17.10.1 Model Conditional on Z

Model log-linear conditional pada Z memasukkan efek utama dan interaksi dua arah antara X dengan Z dan Y dengan Z, tanpa interaksi antara X dengan Y maupun interaksi tiga arah. \[ \log(\mu_{ijk}) = \lambda + \lambda_i^X + \lambda_j^Y + \lambda_k^Z + \lambda_{ik}^{XZ} + \lambda_{jk}^{YZ} \]

# Conditional Association on Z
model_conditional_Z <- glm(Freq ~ x.sex + y.sikap + z.rokok +
                             x.sex*z.rokok + y.sikap*z.rokok,
                           family = poisson(link = "log"))
summary(model_conditional_Z)
## 
## Call:
## glm(formula = Freq ~ x.sex + y.sikap + z.rokok + x.sex * z.rokok + 
##     y.sikap * z.rokok, family = poisson(link = "log"))
## 
## Coefficients:
##                                Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                     3.30435    0.16408  20.139   <2e-16 ***
## x.sexLaki-laki                 -0.01709    0.18491  -0.092   0.9263    
## y.sikapMendukung                0.15415    0.18545   0.831   0.4058    
## z.rokokRingan                  -0.02780    0.22816  -0.122   0.9030    
## z.rokokSedang                  -0.08013    0.23334  -0.343   0.7313    
## x.sexLaki-laki:z.rokokRingan    0.05532    0.24429   0.226   0.8209    
## x.sexLaki-laki:z.rokokSedang    0.22254    0.25694   0.866   0.3864    
## y.sikapMendukung:z.rokokRingan  0.49159    0.25024   1.965   0.0495 *  
## y.sikapMendukung:z.rokokSedang  0.08318    0.25755   0.323   0.7467    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for poisson family taken to be 1)
## 
##     Null deviance: 36.047  on 11  degrees of freedom
## Residual deviance: 10.265  on  3  degrees of freedom
## AIC: 91.965
## 
## Number of Fisher Scoring iterations: 4

17.10.2 Pengujian Ada Tidaknya Interaksi antara X dan Y (Homogenous model vs Conditional Association on Z)

• Hipotesis

\(H_0\): \(\lambda_{ij}^{XY} = 0\) (Tidak ada interaksi antara jenis Kelamin (X) dan Sikap (Y))

\(H_1\): \(\lambda_{ij}^{XY} \ne 0\) (Ada interaksi antara jenis Kelamin (X) dan Sikap (Y))

• Tingkat Signifikansi

\[ \alpha = 5\% \]

• Statistik Uji

\[ \Delta\text{Deviance} = \text{Deviance model conditional on } Z - \text{Deviance model homogenous} \]

\[ = 10.265 - 1.8488 = 8.4162 \]

\[ db = \text{df model conditional on } Z - \text{df model homogenous} \\ = 3 - 2 = 1 \] • Daerah Penolakan

Tolak \(H_0\) jika \(\Delta\text{Deviance} > \chi^2_{0.05, 1} = 3.841\)

• Keputusan

\[ \text{Karena } 8.4162 > 3.841, \text{ maka tolak } H_0 \] • Kesimpulan

  • Dengan taraf nyata 5%, maka dinyatakan tolak H0 yang berarti terdapat interaksi antara Jenis kelamin dan Sikap.

17.10.3 Pengujian Hipotesis Interaksi X dan Y (Conditional on Z vs Homogenous)

# Deviance of Model
Deviance.model <- model_conditional_Z$deviance - model_homogenous$deviance 
Deviance.model
## [1] 8.415908

Hitung Derajat Bebas

derajat.bebas <- (3 - 2)
derajat.bebas
## [1] 1

Nilai Chi-Square Tabel

chi.tabel <- qchisq((1 - 0.05), df = derajat.bebas)
chi.tabel
## [1] 3.841459

Keputusan Uji

Keputusan <- ifelse(Deviance.model <= chi.tabel, "Terima", "Tolak")
Keputusan
## [1] "Tolak"

Interpretasi

karena nilai Deviance model > chi tabel, maka dinyatakan tolak H0 yang berarti terdapat interaksi antara Jenis kelamin dan Sikap.

17.11 Pemilihan Model Terbaik

17.11.1 Ringkasan Model Log Linear

Model log linier dengan berbagai kombinasi parameter:

library(knitr) 
library(kableExtra)
model_loglin <- data.frame(
  Model = c("Saturated", "Homogenous", "Conditional on X", "Conditional on Y", "Conditional on Z"),
  Parameter = c(
    "λ + λᵢˣ + λⱼʸ + λₖᶻ + λᵢⱼˣʸ + λᵢₖˣᶻ + λⱼₖʸᶻ + λᵢⱼₖˣʸᶻ",
    "λ + λᵢˣ + λⱼʸ + λₖᶻ + λᵢⱼˣʸ + λᵢₖˣᶻ + λⱼₖʸᶻ",
    "λ + λᵢˣ + λⱼʸ + λₖᶻ + λᵢⱼˣʸ + λᵢₖˣᶻ",
    "λ + λᵢˣ + λⱼʸ + λₖᶻ + λᵢⱼˣʸ + λⱼₖʸᶻ",
    "λ + λᵢˣ + λⱼʸ + λₖᶻ + λᵢₖˣᶻ + λⱼₖʸᶻ"
  ),
  Deviance = c("0.000", "1.8488", "6.7223", "2.9034", "10.265"),
  Parameters = c(12, 10, 8, 8, 9),
  df = c(0, 2, 4, 4, 2),
  AIC = c(87.7, 85.549, 86.422, 82.603, 91.965)
)

knitr::kable(model_loglin, align = "l")
Model Parameter Deviance Parameters df AIC
Saturated λ + λᵢˣ + λⱼʸ + λₖᶻ + λᵢⱼˣʸ + λᵢₖˣᶻ + λⱼₖʸᶻ + λᵢⱼₖˣʸᶻ 0.000 12 0 87.700
Homogenous λ + λᵢˣ + λⱼʸ + λₖᶻ + λᵢⱼˣʸ + λᵢₖˣᶻ + λⱼₖʸᶻ 1.8488 10 2 85.549
Conditional on X λ + λᵢˣ + λⱼʸ + λₖᶻ + λᵢⱼˣʸ + λᵢₖˣᶻ 6.7223 8 4 86.422
Conditional on Y λ + λᵢˣ + λⱼʸ + λₖᶻ + λᵢⱼˣʸ + λⱼₖʸᶻ 2.9034 8 4 82.603
Conditional on Z λ + λᵢˣ + λⱼʸ + λₖᶻ + λᵢₖˣᶻ + λⱼₖʸᶻ 10.265 9 2 91.965

17.11.2 Ringkasan Pengujian Interaksi 3 Arah dan 2 Arah

uji_interaksi <- data.frame(
  Interaksi = c("XYZ", "YZ", "XZ", "XY"),
  Pengujian = c("Saturated vs Homogenous",
                "Conditional on X vs Homogenous",
                "Conditional on Y vs Homogenous",
                "Conditional on Z vs Homogenous"),
  Delta_Deviance = c(1.8488, 4.8735, 1.0546, 8.4162),
  df = c(2, 2, 2, 1),
  Chi_Square = c(5.991, 5.991, 5.991, 3.841),
  Keputusan = c("Terima H₀", "Terima H₀", "Terima H₀", "Tolak H₀"),
  Keterangan = c("tidak ada interaksi", "tidak ada interaksi", "tidak ada interaksi", "ada interaksi"),
  stringsAsFactors = FALSE
)
knitr::kable(uji_interaksi, booktabs = TRUE, align = "l")
Interaksi Pengujian Delta_Deviance df Chi_Square Keputusan Keterangan
XYZ Saturated vs Homogenous 1.8488 2 5.991 Terima H₀ tidak ada interaksi
YZ Conditional on X vs Homogenous 4.8735 2 5.991 Terima H₀ tidak ada interaksi
XZ Conditional on Y vs Homogenous 1.0546 2 5.991 Terima H₀ tidak ada interaksi
XY Conditional on Z vs Homogenous 8.4162 1 3.841 Tolak H₀ ada interaksi

17.11.3 Kesimpulan Pemilihan Model Terbaik

Dari hasil di atas diketahui bahwa asosiasi yang nyata hanya terdapat interaksi antara Jenis Kelamin dan Sikap. Sehingga, model terbaik adalah:

\[ \log(\mu_{ijk}) = \lambda + \lambda_i^X + \lambda_j^Y + \lambda_k^Z + \lambda_{jk}^{XY} \]

17.12 Model Terbaik

# Model Terbaik
bestmodel <- glm(Freq ~ x.sex + y.sikap + z.rokok +
                             x.sex*y.sikap,
                           family = poisson(link = "log"))
summary(bestmodel)
## 
## Call:
## glm(formula = Freq ~ x.sex + y.sikap + z.rokok + x.sex * y.sikap, 
##     family = poisson(link = "log"))
## 
## Coefficients:
##                                 Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                      3.30081    0.12964  25.462  < 2e-16 ***
## x.sexLaki-laki                  -0.26992    0.15760  -1.713  0.08677 .  
## y.sikapMendukung                 0.07257    0.14406   0.504  0.61443    
## z.rokokRingan                    0.29407    0.12213   2.408  0.01605 *  
## z.rokokSedang                    0.08201    0.12814   0.640  0.52217    
## x.sexLaki-laki:y.sikapMendukung  0.58473    0.20527   2.849  0.00439 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for poisson family taken to be 1)
## 
##     Null deviance: 36.047  on 11  degrees of freedom
## Residual deviance:  7.560  on  6  degrees of freedom
## AIC: 83.26
## 
## Number of Fisher Scoring iterations: 4

17.13 Interpretasi Koefisien Model Terbaik

# Interpretasi koefisien model terbaik
data.frame(
koef = bestmodel$coefficients,
exp_koef = exp(bestmodel$coefficients)
)

17.13.1 Interpretasi Koefisien Model Terbaik

\[ \exp(\text{Intercept}) = \exp(3.301) = 27.13 \] Ekspektasi jumlah kasus pada kategori referensi (Perempuan, Menolak, Berat) adalah sekitar 27.13.

\[ \exp(\lambda^{X}_{Laki-laki}) = \exp(-0.270) = 0.76 \] Tanpa memperhatikan kategori perokok dan sikap, peluang laki-laki sekitar 0.76 kali dibandingkan perempuan.

\[ \exp(\lambda^{Y}_{Mendukung}) = \exp(0.073) = 1.08 \] Tanpa memperhatikan jenis kelamin dan kategori perokok, peluang mendukung iklan rokok adalah 1.08 kali dibandingkan menolak.

\[ \exp(\lambda^{Z}_{Ringan}) = \exp(0.294) = 1.34 \] Tanpa memperhatikan jenis kelamin dan sikap, peluang seseorang menjadi perokok ringan adalah 1.34 kali dibandingkan perokok berat.

\[ \exp(\lambda^{Z}_{Sedang}) = \exp(0.082) = 1.09 \] Tanpa memperhatikan jenis kelamin dan sikap, peluang seseorang menjadi perokok sedang adalah 1.09 kali dibandingkan perokok berat.

\[ \exp(\lambda^{XY}_{Laki-laki, Mendukung}) = \exp(0.585) = 1.79 \] Tanpa memperhatikan kategori perokok, odds laki-laki yang mendukung iklan rokok adalah 1.79 kali odds perempuan yang menolak.

17.14 Nilai Dugaan Model Terbaik

# Fitted values dari model terbaik
data.frame(
rokok = z.rokok,
sex = x.sex,
sikap = y.sikap,
counts = Freq,
fitted = bestmodel$fitted.values
)

17.14.1 Perhitungan Manual Nilai Dugaan (Fitted Value) Model Terbaik

Secara manual, nilai fitted value diperoleh dengan cara sebagai berikut:

\[ \begin{aligned} \text{Misal:} \\ \lambda_{Laki-Laki}^{x} &= \lambda_{L}^{x} \\ \lambda_{Perempuan}^{x} &= \lambda_{P}^{x} \\ \lambda_{Mendukung}^{y} &= \lambda_{Duk}^{y} \\ \lambda_{Menolak}^{y} &= \lambda_{Tol}^{y} \\ \lambda_{Ringan}^{z} &= \lambda_{R}^{z} \\ \lambda_{Sedang}^{z} &= \lambda_{S}^{z} \\ \lambda_{Berat}^{z} &= \lambda_{B}^{z} \\ \end{aligned} \]

\[ \begin{aligned} \hat{\mu}_{111} &= \exp(\lambda + \lambda_{L}^{x} + \lambda_{Duk}^{y} + \lambda_{R}^{z} + \lambda_{L, Duk}^{xy}) \\ &= \exp(3.3008 - 0.2699 + 0.0726 + 0.2941 + 0.5847) \\ &= \exp(3.9823) = 53.64 \end{aligned} \]

\[ \begin{aligned} \hat{\mu}_{112} &= \exp(\lambda + \lambda_{L}^{x} + \lambda_{Duk}^{y} + \lambda_{S}^{z} + \lambda_{L, Duk}^{xy}) \\ &= \exp(3.3008 - 0.2699 + 0.0726 + 0.082 + 0.5847) \\ &= \exp(3.7692) = 43.39 \end{aligned} \]

\[ \begin{aligned} \hat{\mu}_{113} &= \exp(\lambda + \lambda_{L}^{x} + \lambda_{Duk}^{y} + \lambda_{B}^{z} + \lambda_{L, Duk}^{xy}) \\ &= \exp(3.3008 - 0.2699 + 0.0726 + 0 + 0.5847) \\ &= \exp(3.6882) = 39.97 \end{aligned} \]

\[ \begin{aligned} \hat{\mu}_{121} &= \exp(\lambda + \lambda_{L}^{x} + \lambda_{Tol}^{y} + \lambda_{R}^{z} + \lambda_{L, Tol}^{xy}) \\ &= \exp(3.3008 - 0.2699 + 0 + 0.2941 + 0) \\ &= \exp(3.325) = 27.79 \end{aligned} \]

\[ \begin{aligned} \hat{\mu}_{122} &= \exp(\lambda + \lambda_{L}^{x} + \lambda_{Tol}^{y} + \lambda_{S}^{z} + \lambda_{L, Tol}^{xy}) \\ &= \exp(3.3008 - 0.2699 + 0 + 0.082 + 0) \\ &= \exp(3.1129) = 22.49 \end{aligned} \]

\[ \begin{aligned} \hat{\mu}_{123} &= \exp(\lambda + \lambda_{L}^{x} + \lambda_{Tol}^{y} + \lambda_{B}^{z} + \lambda_{L, Tol}^{xy}) \\ &= \exp(3.3008 - 0.2699 + 0 + 0 + 0) \\ &= \exp(3.0309) = 20.72 \end{aligned} \]

\[ \begin{aligned} \hat{\mu}_{211} &= \exp(\lambda + \lambda_{P}^{x} + \lambda_{Duk}^{y} + \lambda_{R}^{z} + \lambda_{P, Duk}^{xy}) \\ &= \exp(3.3008 + 0 + 0.0726 + 0.2941 + 0) \\ &= \exp(3.6675) = 39.15 \end{aligned} \]

\[ \begin{aligned} \hat{\mu}_{212} &= \exp(\lambda + \lambda_{P}^{x} + \lambda_{Duk}^{y} + \lambda_{S}^{z} + \lambda_{P, Duk}^{xy}) \\ &= \exp(3.3008 + 0 + 0.0726 + 0.082 + 0) \\ &= \exp(3.4554) = 31.67 \end{aligned} \]

\[ \begin{aligned} \hat{\mu}_{213} &= \exp(\lambda + \lambda_{P}^{x} + \lambda_{Duk}^{y} + \lambda_{B}^{z} + \lambda_{P, Duk}^{xy}) \\ &= \exp(3.3008 + 0 + 0.0726 + 0 + 0) \\ &= \exp(3.3734) = 29.18 \end{aligned} \]

\[ \begin{aligned} \hat{\mu}_{221} &= \exp(\lambda + \lambda_{P}^{x} + \lambda_{Tol}^{y} + \lambda_{R}^{z} + \lambda_{P, Tol}^{xy}) \\ &= \exp(3.3008 + 0 + 0 + 0.2941 + 0) \\ &= \exp(3.5949) = 36.41 \end{aligned} \] \[ \begin{aligned} \hat{\mu}_{222} &= \exp(\lambda + \lambda_{P}^{x} + \lambda_{Tol}^{y} + \lambda_{S}^{z} + \lambda_{P, Tol}^{xy}) \\ &= \exp(3.3008 + 0 + 0 + 0.082 + 0) \\ &= \exp(3.3828) = 29.45 \end{aligned} \] \[ \begin{aligned} \hat{\mu}_{223} &= \exp(\lambda + \lambda_{P}^{x} + \lambda_{Tol}^{y} + \lambda_{B}^{z} + \lambda_{P, Tol}^{xy}) \\ &= \exp(3.3008 + 0 + 0 + 0 + 0) \\ &= \exp(3.3008) = 27.13 \end{aligned} \]

Keterangan:
Nilai \(\hat{\mu}_{ijk}\) akan sama apapun referensi dari kategori perubahannya yang kita gunakan.

18 Studi Kasus 2

18.1 Latar Belakang

Tujuan analisis data ini adalah untuk mempelajari hubungan antara jenis kelamin dengan mood swing dari masyarakat Bangladesh (siswa, mahasiswa, ibu rumah tangga, karyawan, dan sebagainya).

18.2 Deskripsi Data

Data diambil dari Kaggle dengan judul “Depression and Mentahl Health” yang ber ukuran 824 data

18.3 Analisis Data

# Memuat paket yang diperlukan
library(readr)
# Mengimpor data dari file CSV
data <- read.csv(file.choose())

head(data); str(data)
## 'data.frame':    824 obs. of  1 variable:
##  $ Gender.Mood_Swings: chr  "Female;Medium" "Male;High" "Female;Medium" "Male;Medium" ...
# Pisahkan kolom 'Gender.Mood_Swings' menjadi dua kolom terpisah
data_split <- tidyr::separate(data, col = Gender.Mood_Swings, into = c("Gender", "Mood_Swings"), sep = ";")

head(data_split)
str(data_split)
## 'data.frame':    824 obs. of  2 variables:
##  $ Gender     : chr  "Female" "Male" "Female" "Male" ...
##  $ Mood_Swings: chr  "Medium" "High" "Medium" "Medium" ...
# Buat tabel kontingensi 2 x 3
tabel2x3 <- table(data_split$Gender, data_split$Mood_Swings)
tabel2x3
##         
##          High Low Medium
##   Female  146 144    144
##   Male    120 134    136
#Ubah menjadi data.frame untuk glm 
data2x3 <- as.data.frame(as.table(tabel2x3))
colnames(data2x3) <- c("Gender", "Mood_Swings", "Freq")
data2x3
fit_no_inter <- glm(Freq ~ Gender + Mood_Swings, family = poisson(), data = data2x3)
summary(fit_no_inter)
## 
## Call:
## glm(formula = Freq ~ Gender + Mood_Swings, family = poisson(), 
##     data = data2x3)
## 
## Coefficients:
##                   Estimate Std. Error z value Pr(>|z|)    
## (Intercept)        4.94237    0.06964  70.969   <2e-16 ***
## GenderMale        -0.10690    0.06977  -1.532    0.126    
## Mood_SwingsLow     0.04412    0.08577   0.514    0.607    
## Mood_SwingsMedium  0.05129    0.08562   0.599    0.549    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for poisson family taken to be 1)
## 
##     Null deviance: 3.55338  on 5  degrees of freedom
## Residual deviance: 0.78318  on 2  degrees of freedom
## AIC: 49.339
## 
## Number of Fisher Scoring iterations: 3

Interpretasi model tanpa interaksi:

  • Jika residual deviance tidak signifikan, maka variabel Gender dan Mood_Swings dianggap independen.
  • Intercept: log-frekuensi pada kategori referensi (Gender = Female, Mood_Swings = High) adalah 4.942.
  • Koefisien GenderMale: perbedaan log-frekuensi antara Male dan Female (pada Mood_Swings = High). Koefisien ini tidak signifikan (\(p = 0.126\)), artinya tidak ada perbedaan signifikan frekuensi antara laki-laki dan perempuan.
  • Koefisien Mood_SwingsLow: perbedaan log-frekuensi antara Mood_Swings = Low dan High (pada Gender = Female). Tidak signifikan (\(p = 0.607\)).
  • Koefisien Mood_SwingsMedium: perbedaan log-frekuensi antara Mood_Swings = Medium dan High (pada Gender = Female). Tidak signifikan (\(p = 0.549\)).

Kesimpulan:
Tidak ada bukti signifikan adanya perbedaan frekuensi pada Gender maupun kategori Mood_Swings. Model ini mendukung asumsi bahwa Gender dan Mood_Swings saling independen dalam data ini.

fit_inter <- glm(Freq ~ Gender * Mood_Swings, family = poisson(), data = data2x3)
summary(fit_inter)
## 
## Call:
## glm(formula = Freq ~ Gender * Mood_Swings, family = poisson(), 
##     data = data2x3)
## 
## Coefficients:
##                              Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                   4.98361    0.08276  60.217   <2e-16 ***
## GenderMale                   -0.19611    0.12322  -1.592    0.111    
## Mood_SwingsLow               -0.01379    0.11745  -0.117    0.907    
## Mood_SwingsMedium            -0.01379    0.11745  -0.117    0.907    
## GenderMale:Mood_SwingsLow     0.12414    0.17202   0.722    0.470    
## GenderMale:Mood_SwingsMedium  0.13896    0.17170   0.809    0.418    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for poisson family taken to be 1)
## 
##     Null deviance:  3.5534e+00  on 5  degrees of freedom
## Residual deviance: -3.9968e-14  on 0  degrees of freedom
## AIC: 52.556
## 
## Number of Fisher Scoring iterations: 2

Interpretasi model dengan interaksi:

  • Intercept: log-frekuensi pada kategori referensi (Gender = Female, Mood_Swings = High) adalah 4.98.
  • Koefisien GenderMale: perbedaan log-frekuensi antara Male dan Female (pada Mood_Swings = High). Koefisien ini tidak signifikan (\(p = 0.111\)).
  • Koefisien Mood_SwingsLow/Medium: perbedaan log-frekuensi antara Low atau Medium terhadap High (pada Gender = Female), keduanya tidak signifikan (\(p = 0.907\)).
  • Koefisien interaksi (GenderMale:Mood_SwingsLow/Medium): menunjukkan perbedaan tambahan log-frekuensi pada kombinasi Male & Low dan Male & Medium dibandingkan referensi, namun kedua interaksi ini tidak signifikan (\(p = 0.470\) dan \(p = 0.418\)).

18.4 Kesimpulan

Tidak ada koefisien interaksi yang signifikan (\(p > 0.05\)), sehingga tidak ada bukti kuat hubungan atau asosiasi antara Gender dan Mood_Swings dalam data ini. Distribusi Mood Swings cenderung mirip antara kelompok Male dan Female.

19 Daftar Pustaka