Pendahuluan

Analisis data kategori merupakan salah satu metode penting dalam statistika yang berfokus pada pengolahan dan interpretasi data yang bersifat non-numerik. Data kategori, atau sering disebut data kualitatif, terdiri dari label atau kategori yang menggambarkan karakteristik tertentu dari objek atau individu, seperti jenis kelamin (laki-laki, perempuan), warna (merah, biru, hijau), atau jenis pekerjaan (guru, dokter, insinyur). Berbeda dengan data numerik yang melibatkan angka dan operasi matematika, data kategori memerlukan pendekatan khusus untuk mengungkap pola, hubungan, atau distribusi yang ada di dalamnya.

Pentingnya analisis data kategori terletak pada kemampuannya untuk membantu kita memahami struktur dan karakteristik data yang tidak dapat diukur secara kuantitatif. Melalui analisis ini, kita dapat mengetahui frekuensi kemunculan setiap kategori, mengidentifikasi hubungan antar variabel kategori, serta menguji apakah hubungan tersebut signifikan secara statistik. Misalnya, dalam sebuah survei, analisis data kategori memungkinkan kita untuk mengeksplorasi apakah terdapat perbedaan preferensi warna antara responden laki-laki dan perempuan, atau apakah ada korelasi antara tingkat pendidikan dan pilihan karier.

Tujuan Analisis Data Kategori

Analisis data kategori dilakukan untuk mengolah dan menginterpretasikan data kualitatif atau non-numerik yang terdiri dari kategori atau label, seperti jenis kelamin, warna, atau tingkat pendidikan. Berikut adalah tujuan utama dari analisis data kategori:

Mengidentifikasi Pola dan Tren

Analisis ini memungkinkan peneliti dan praktisi untuk mengidentifikasi pola tersembunyi dalam data kategorikal. Misalnya, dalam penelitian pemasaran, analisis ini dapat digunakan untuk memahami preferensi konsumen berdasarkan kelompok demografis tertentu, seperti usia atau lokasi geografis.

Menganalisis Hubungan Antarvariabel

Dalam banyak kasus, hubungan antara dua atau lebih variabel kategorikal menjadi perhatian utama. Contohnya, dalam penelitian kesehatan, analisis ini dapat membantu memahami hubungan antara gaya hidup (merokok/tidak merokok) dan penyakit tertentu (ada/tidak ada).

Membantu Pengambilan Keputusan

Dengan memahami pola dan hubungan dalam data kategorikal, pengambil keputusan dapat membuat strategi yang lebih tepat sasaran. Misalnya, dalam kebijakan publik, analisis ini dapat digunakan untuk menentukan kebijakan sosial berdasarkan segmentasi masyarakat, seperti kelompok pendapatan rendah atau menengah.

Mengembangkan Model Prediktif

Banyak model prediktif menggunakan data kategorikal sebagai input, seperti regresi logistik untuk memprediksi kejadian biner (misalnya, apakah seorang pasien memiliki risiko tinggi terkena penyakit atau tidak). Model ini sangat berguna dalam berbagai aplikasi, dari kesehatan hingga pemasaran.

Definisi dan Ruang Lingkup Analisis Data Kategori

Definisi: Analisis data kategori adalah teknik statistik yang digunakan untuk menganalisis variabel yang bersifat kategorikal, yaitu variabel yang terdiri dari kategori atau kelompok, bukan nilai numerik kontinu. Data kategorikal sering kali berupa label atau nama, seperti “laki-laki” atau “perempuan” untuk jenis kelamin, atau “rendah”, “sedang”, “tinggi” untuk tingkat pendidikan. Data ini tidak dapat dijumlahkan atau dikurangi seperti data numerik, tetapi dapat dianalisis untuk menemukan pola dan hubungan.

Ruang Lingkup: Analisis data kategori mencakup dua jenis utama data kategorikal:

  • Nominal: Tidak memiliki urutan inheren. Contohnya adalah warna (merah, biru, hijau), jenis kelamin (laki-laki, perempuan), atau jenis pekerjaan (guru, dokter, insinyur).
  • Ordinal: Memiliki urutan atau ranking, tetapi jarak antar kategori tidak selalu sama. Contohnya adalah tingkat pendidikan (SD, SMP, SMA, Sarjana) atau tingkat kepuasan (sangat puas, puas, netral, tidak puas).

Metode analisis yang umum digunakan meliputi:

  • Tabel Kontingensi: Untuk merangkum hubungan antara dua variabel kategorikal, sering diikuti dengan uji chi-square untuk menguji signifikansi hubungan.
  • Regresi Logistik: Untuk memprediksi probabilitas kejadian biner, seperti sukses/gagal atau sehat/sakit.
  • Analisis Korespondensi: Untuk memahami hubungan antara kategori dalam dataset besar.
  • Model Linear Umum (GLM): Untuk mengakomodasi berbagai jenis distribusi data, termasuk data kategorikal.

Ruang lingkupnya juga meluas ke aplikasi modern seperti machine learning, di mana data kategorikal digunakan dalam algoritma klasifikasi, dan analisis big data, di mana data kategorikal dari media sosial atau survei online dianalisis untuk mendapatkan wawasan.

Perbedaan Data Kategorik dengan Data Kuantitatif

Data kategorikal berbeda secara fundamental dari data kuantitatif atau numerik. Berikut adalah perbedaan utamanya:

Aspek Data Kategorik Data Kuantitatif
Skala Pengukuran Bersifat diskrit, terdiri dari kategori atau label tanpa nilai numerik kontinu. Bersifat kontinu atau diskrit numerik, dapat diukur dengan skala yang bermakna.
Contoh Jenis kelamin (laki-laki/perempuan), tingkat kepuasan (puas/tidak puas). Tinggi badan (170 cm), suhu (25°C), jumlah penjualan (100 unit).
Metode Analisis Uji chi-square, regresi logistik, analisis korespondensi. Regresi linear, ANOVA, uji t, analisis korelasi.
Representasi Data Tabel frekuensi, diagram batang, pie chart. Histogram, scatter plot, box plot.
  • Skala Pengukuran: Data kategorikal tidak dapat digunakan dalam operasi matematika seperti penjumlahan atau pengurangan, sedangkan data kuantitatif mendukung operasi tersebut. Misalnya, Anda tidak bisa “menjumlahkan” jenis kelamin, tetapi Anda bisa menghitung rata-rata tinggi badan.
  • Metode Analisis: Karena sifatnya yang diskrit, data kategorikal memerlukan metode statistik khusus yang berbeda dari metode untuk data kuantitatif. Misalnya, uji chi-square digunakan untuk menguji hubungan antar variabel kategorikal, sedangkan regresi linear lebih cocok untuk data kuantitatif.
  • Representasi Data: Data kategorikal sering divisualisasikan dengan diagram batang atau pie chart untuk menunjukkan frekuensi kategori, sedangkan data kuantitatif lebih sering menggunakan histogram atau scatter plot untuk menunjukkan distribusi atau hubungan.

Manfaat Analisis Data Kategori dalam Berbagai Bidang

Analisis data kategori memiliki aplikasi yang luas di berbagai disiplin ilmu dan industri, membantu organisasi dan peneliti membuat keputusan yang lebih baik berdasarkan data. Berikut adalah manfaat dan tiga contoh spesifik untuk setiap bidang:

Ilmu Sosial dan Psikologi

Manfaat: Analisis data kategori memungkinkan pemahaman mendalam tentang perilaku manusia, opini publik, dan faktor sosial, yang sering kali diukur dalam bentuk kategori seperti tingkat kepuasan atau kelompok demografis.
Contoh:

  • Survei Kepuasan Pelanggan: Menggunakan skala Likert (sangat puas, puas, netral, tidak puas, sangat tidak puas) untuk mengevaluasi kepuasan terhadap layanan, membantu perusahaan memahami preferensi konsumen.
  • Studi Faktor Sosial-Ekonomi dan Pendidikan: Menganalisis hubungan antara status sosial-ekonomi (rendah, menengah, tinggi) dan tingkat pendidikan anak (SD, SMP, SMA, Sarjana) untuk merancang program pendidikan yang inklusif.
  • Penelitian Efektivitas Terapi Psikologis: Mengkategorikan respons pasien terhadap terapi sebagai “berhasil”, “tidak berhasil”, atau “tidak berubah” untuk mengevaluasi efektivitas metode terapi tertentu.

Kesehatan dan Kedokteran

Manfaat: Dalam bidang kesehatan, analisis data kategori membantu mengidentifikasi faktor risiko, mengevaluasi efektivitas pengobatan, dan memahami distribusi kesehatan dalam populasi.
Contoh:

  • Kategorisasi Status Kesehatan Pasien: Mengelompokkan pasien ke dalam kategori “sehat”, “sakit”, atau “kronis” untuk memetakan prevalensi penyakit dalam suatu populasi.
  • Evaluasi Efektivitas Pengobatan: Membandingkan kelompok pasien yang menerima terapi berbeda, dengan outcome dikategorikan sebagai “sembuh”, “membaik”, atau “tidak berubah”, untuk menentukan pengobatan yang paling efektif.
  • Analisis Faktor Risiko Penyakit: Mengkategorikan variabel seperti riwayat keluarga (ada/tidak ada), gaya hidup (merokok/tidak merokok), dan status kesehatan (sehat/sakit) untuk memprediksi risiko penyakit tertentu, seperti jantung atau diabetes.

Pemasaran dan Bisnis

Manfaat: Analisis data kategori membantu memahami preferensi pelanggan, segmentasi pasar, dan efektivitas strategi pemasaran, yang penting untuk meningkatkan penjualan dan loyalitas pelanggan.
Contoh:

  • Analisis Preferensi Merek: Mengkategorikan pilihan merek konsumen (misalnya, “Merek A”, “Merek B”, “Tidak Punya Preferensi”) untuk mengidentifikasi faktor yang memengaruhi keputusan pembelian.
  • Segmentasi Pelanggan: Mengelompokkan pelanggan berdasarkan usia (“18-25”, “26-35”, “36+”), jenis kelamin (laki-laki/perempuan), atau lokasi (kota A, kota B) untuk menargetkan kampanye pemasaran yang lebih relevan.
  • Penilaian Loyalitas Pelanggan: Mengkategorikan tingkat kepuasan (sangat puas, puas, netral, tidak puas) dan frekuensi pembelian (rendah, sedang, tinggi) untuk memprediksi retensi pelanggan dan merancang program loyalitas.

Pendidikan

Manfaat: Analisis data kategori digunakan untuk mengevaluasi metode pengajaran, kepuasan mahasiswa, dan efektivitas program pendidikan, membantu meningkatkan kualitas pendidikan.
Contoh:

  • Survei Kepuasan Mahasiswa: Mengkategorikan respons mahasiswa terhadap metode pengajaran sebagai “sangat puas”, “puas”, “netral”, “tidak puas”, atau “sangat tidak puas” untuk mengevaluasi efektivitas pengajaran.
  • Analisis Latar Belakang Sosioekonomi dan Prestasi Akademik: Mengkategorikan pendapatan orang tua (rendah, menengah, tinggi) dan prestasi akademik (A, B, C, D) untuk memahami faktor yang memengaruhi hasil belajar.
  • Evaluasi Program Pembelajaran Berbasis Teknologi: Membandingkan kelompok yang menggunakan teknologi dan yang tidak, dengan outcome seperti nilai ujian (lulus/tidak lulus) atau tingkat partisipasi (tinggi/sedang/rendah), untuk menilai efektivitas program.

Kebijakan Publik dan Pemerintahan

Manfaat: Analisis data kategori membantu pemerintah memahami kebutuhan masyarakat, mengevaluasi kebijakan, dan merancang program yang efektif, terutama melalui analisis survei dan data demografis.
Contoh:

  • Analisis Kepuasan Layanan Publik: Mengkategorikan respons masyarakat terhadap layanan seperti transportasi umum atau kesehatan sebagai “puas”, “netral”, atau “tidak puas” untuk mengidentifikasi area yang perlu diperbaiki.
  • Studi Partisipasi Pemilih: Menganalisis faktor demografis seperti usia (“17-25”, “26-40”, “41+”), pendidikan (SD, SMP, SMA, Sarjana), dan lokasi (urban/perdesaan) untuk memahami tingkat partisipasi pemilih dalam pemilu.
  • Evaluasi Program Bantuan Sosial: Mengkategorikan penerima bantuan sosial berdasarkan outcome seperti “terangkat dari kemiskinan”, “tetap miskin”, atau “menjadi lebih miskin” untuk mengevaluasi dampak program.

Keamanan dan Kriminalitas

Manfaat: Analisis data kategori membantu memahami pola kejahatan, mengidentifikasi faktor risiko, dan mengembangkan strategi pencegahan, yang penting untuk keamanan masyarakat.
Contoh:

  • Analisis Jenis Kejahatan Berdasarkan Wilayah: Mengkategorikan tipe kejahatan (pencurian, perampokan, kekerasan) dan wilayah (kota A, kota B) untuk memetakan hotspot kejahatan dan mengalokasikan sumber daya polisi.
  • Studi Faktor Demografis dan Kejahatan: Mengkategorikan usia pelaku (“<18”, “18-30”, “>30”), jenis kelamin (laki-laki/perempuan), atau status pekerjaan (pekerja/pengangguran) untuk mengidentifikasi kelompok berisiko tinggi.
  • Evaluasi Kebijakan Penegakan Hukum: Membandingkan tingkat kejahatan sebelum dan sesudah kebijakan baru, mengkategorikan jenis pelanggaran (ringan/berat) dan frekuensinya (rendah/tinggi), untuk menilai efektivitas kebijakan.

Metode dalam Analisis Data Kategori

Tabel Kontingensi dan Uji Chi-Square

Uji Chi-Square bertujuan untuk menguji apakah terdapat hubungan signifikan antara dua variabel kategorikal, seperti apakah variabel independen memengaruhi variabel dependen. Metode ini sering digunakan dalam analisis survei, misalnya, untuk menentukan apakah tingkat pendidikan (rendah, menengah, tinggi) berkaitan dengan status pekerjaan (bekerja, tidak bekerja). Tabel kontingensi merangkum frekuensi observasi untuk kombinasi kategori dari dua variabel. Uji Chi-Square menguji apakah frekuensi yang diamati (\(O\)) berbeda secara signifikan dari frekuensi yang diharapkan (\(E\)) di bawah asumsi independensi. Rumus uji Chi-Square adalah:

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

Frekuensi yang diharapkan dihitung sebagai:

\[ E_{ij} = \frac{(R_i \times C_j)}{N} \]

di mana \(R_i\) adalah total baris ke-\(i\), \(C_j\) adalah total kolom ke-\(j\), dan \(N\) adalah total sampel. Nilai \(\chi^2\) dibandingkan dengan distribusi chi-square untuk menentukan signifikansi statistik (biasanya dengan nilai p < 0,05). Implementasi di R menggunakan fungsi chisq.test() dari paket dasar.

Regresi Logistik

Regresi logistik digunakan untuk memprediksi probabilitas kejadian biner (misalnya, 0 atau 1, sukses atau gagal) berdasarkan satu atau lebih variabel prediktor, yang bisa kategorikal atau numerik.Contohnya, memprediksi apakah seorang pelanggan akan membeli produk (ya/tidak) berdasarkan preferensi mereka (puas/tidak puas) atau demografi (usia, jenis kelamin). Regresi logistik adalah bagian dari Generalized Linear Model (GLM) yang menggunakan fungsi logit sebagai fungsi link. Modelnya dinyatakan sebagai:

\[ \log\left(\frac{\mu}{1-\mu}\right) = X\beta \]

di mana: - \(\mu\) adalah probabilitas kejadian (misalnya, \(P(Y=1)\)), - \(X\) adalah matriks variabel prediktor, - \(\beta\) adalah vektor koefisien yang diestimasi.

Probabilitas \(\mu\) dihitung menggunakan fungsi invers logit:

\[ \mu = \frac{\exp(X\beta)}{1 + \exp(X\beta)} \]

Estimasi parameter dilakukan menggunakan Maximum Likelihood Estimation (MLE). Implementasi di R menggunakan fungsi glm() dengan argumen family = binomial.

Analisis Korespondensi

Analisis korespondensi (Correspondence Analysis, CA) bertujuan untuk memvisualisasikan dan memahami hubungan antara kategori dalam tabel kontingensi, dengan mereduksi dimensi data ke ruang dua dimensi. Metode ini berguna untuk menganalisis preferensi konsumen, seperti hubungan antara kelompok usia (muda, dewasa, lansia) dan jenis makanan (manis, asin, pedas). Analisis korespondensi adalah teknik multivariat yang menguraikan tabel kontingensi menjadi komponen utama, mirip dengan analisis komponen utama untuk data numerik. Ini menghasilkan plot yang menunjukkan kedekatan antar kategori berdasarkan asosiasi mereka. Prosesnya melibatkan dekomposisi matriks chi-square untuk mengidentifikasi sumbu utama variasi. Implementasi di R menggunakan paket ca.

Decision Tree dan Random Forest

Decision Tree dan Random Forest adalah metode machine learning untuk mengklasifikasikan data kategorikal, dengan Random Forest meningkatkan akurasi melalui penggabungan beberapa pohon keputusan. Contohnya, mengklasifikasikan pelanggan berdasarkan tingkat loyalitas (rendah, sedang, tinggi) menggunakan variabel seperti frekuensi pembelian dan kepuasan.

  • Decision Tree: Membagi data menjadi cabang berdasarkan nilai fitur, menciptakan aturan keputusan untuk klasifikasi. Setiap cabang mewakili keputusan berdasarkan kriteria seperti Gini impurity atau information gain.
  • Random Forest: Menggabungkan banyak decision tree untuk mengurangi overfitting dan meningkatkan akurasi prediksi. Setiap pohon dilatih pada subset data dan fitur yang berbeda.

    Implementasi di R menggunakan paket rpart untuk Decision Tree dan randomForest untuk Random Forest.

Metode Tambahan

Selain metode di atas, analisis data kategori juga dapat mencakup teknik lain seperti:

  • Log-Linear Models: Untuk menganalisis hubungan dalam tabel kontingensi multi-dimensi.
  • Mantel-Haenszel Methods: Untuk menguji asosiasi dalam data berlapis.
  • Probit Regression: Alternatif untuk regresi logistik dalam kasus tertentu.

Tabel Ringkasan Metode

Metode Tujuan Aplikasi Rumus Utama Implementasi R
Tabel Kontingensi & Chi-Square Menguji hubungan antar variabel Analisis survei, hubungan demografis \(\chi^2 = \sum \frac{(O - E)^2}{E}\) chisq.test()
Regresi Logistik Prediksi hasil biner Prediksi pembelian, risiko kesehatan \(\log\left(\frac{\mu}{1-\mu}\right) = X\beta\) glm(family = binomial)
Analisis Korespondensi Visualisasi hubungan antar kategori Preferensi konsumen, analisis pasar Dekomposisi chi-square ca()
Decision Tree & Random Forest Klasifikasi data kategorikal Segmentasi pelanggan, prediksi loyalitas Berbasis Gini/information gain rpart(), randomForest()

Distribusi Peluang dalam Analisis Data Kategori

Distribusi peluang adalah dasar dalam analisis data kategori, membantu kita memodelkan dan memahami kemungkinan hasil dari variabel kategori. Data kategori, seperti jenis kelamin, tingkat pendidikan, atau preferensi konsumen, sering kali bersifat diskrit dan terdiri dari kategori, bukan nilai numerik kontinu.

Distribusi Bernoulli

Distribusi Bernoulli digunakan untuk memodelkan eksperimen biner dengan dua hasil mungkin, yaitu sukses (biasanya dilambangkan sebagai 1) atau gagal (dilambangkan sebagai 0). Distribusi ini adalah dasar untuk distribusi lain seperti Binomial.

Fungsi Probabilitas

Fungsi probabilitas distribusi Bernoulli diberikan oleh:

\[ P(X=x) = p^x (1-p)^{1-x}, \quad x \in \{0,1\} \]

di mana: - \(X\) adalah variabel acak yang bernilai 0 (gagal) atau 1 (sukses), - \(p\) adalah probabilitas sukses (\(P(X=1)\)), - \(1-p\) adalah probabilitas gagal (\(P(X=0)\)).

Contoh

  • Lemparan Koin: Menentukan apakah hasilnya kepala (1) atau ekor (0).
  • Uji Klinis: Mengkategorikan apakah pasien merespons pengobatan (sukses) atau tidak (gagal).
  • Survei Konsumen: Menanyakan apakah seseorang menyukai produk tertentu (ya/tidak).

Implementasi di R

Distribusi Bernoulli dapat disimulasikan menggunakan fungsi rbinom() dengan ukuran percobaan (\(n\)) ditetapkan ke 1.

# Simulasi 10 percobaan Bernoulli dengan probabilitas sukses p = 0.5
set.seed(123)
bernoulli_trials <- rbinom(10, 1, 0.5)
bernoulli_trials
##  [1] 0 1 0 1 1 0 1 1 1 0

Interpretasi

Hasilnya adalah vektor dengan nilai 0 atau 1, mewakili gagal atau sukses dalam setiap percobaan. Distribusi ini sederhana namun penting untuk memodelkan data biner.

Distribusi Binomial

Distribusi Binomial menggeneralisasi distribusi Bernoulli ke \(n\) percobaan independen, masing-masing dengan dua hasil (sukses atau gagal). Distribusi ini menghitung jumlah sukses dalam \(n\) percobaan.

Fungsi Probabilitas

Fungsi probabilitas distribusi Binomial adalah:

\[ P(X=k) = \binom{n}{k} p^k (1-p)^{n-k} \]

di mana: - \(X\) adalah jumlah sukses dalam \(n\) percobaan, - \(k\) adalah jumlah sukses yang diamati (\(k = 0, 1, \ldots, n\)), - \(p\) adalah probabilitas sukses per percobaan, - \(\binom{n}{k} = \frac{n!}{k!(n-k)!}\) adalah koefisien binomial, yang menghitung jumlah cara memilih \(k\) sukses dari \(n\) percobaan.

Contoh

  • Lemparan Koin Berulang: Menghitung jumlah kepala dalam 10 lemparan koin.
  • Studi Klinis: Menghitung jumlah pasien yang sembuh dari 20 pasien yang menerima pengobatan.
  • Pemasaran: Menghitung jumlah pelanggan yang membeli produk dari 50 pelanggan yang ditargetkan.

Implementasi di R

Distribusi Binomial dapat disimulasikan menggunakan fungsi rbinom() dengan parameter jumlah percobaan (\(n\)) dan probabilitas sukses (\(p\)).

# Simulasi satu percobaan binomial dengan n=10, p=0.5
set.seed(123)
binomial_trial <- rbinom(1, 10, 0.5)
binomial_trial
## [1] 4

Interpretasi

Hasilnya adalah jumlah sukses (misalnya, jumlah kepala) dalam satu set percobaan. Distribusi ini berguna untuk memodelkan data kategori dengan hasil biner yang diulang.

Distribusi Multinomial

Distribusi Multinomial memperluas distribusi Binomial ke kasus di mana setiap percobaan dapat memiliki lebih dari dua hasil (kategori). Distribusi ini memodelkan frekuensi kemunculan setiap kategori dalam \(n\) percobaan.

Fungsi Probabilitas

Fungsi probabilitas distribusi Multinomial adalah:

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

di mana: - \(X_i\) adalah frekuensi kategori ke-\(i\), - \(n\) adalah jumlah total percobaan (\(x_1 + x_2 + \ldots + x_k = n\)), - \(x_i\) adalah jumlah kemunculan kategori ke-\(i\), - \(p_i\) adalah probabilitas kategori ke-\(i\), dengan \(\sum p_i = 1\).

Contoh

  • Pemilihan Umum: Menghitung jumlah suara untuk tiga kandidat dalam 100 pemilih.
  • Preferensi Produk: Menghitung distribusi preferensi warna (merah, biru, hijau) dalam 50 sampel produk.
  • Survei Konsumen: Mengkategorikan tanggapan pelanggan (sangat puas, puas, tidak puas) dalam 200 responden.

Implementasi di R

Distribusi Multinomial dapat disimulasikan menggunakan fungsi rmultinom() dengan parameter jumlah percobaan dan vektor probabilitas.

# Simulasi satu percobaan multinomial dengan n=10 dan probabilitas (0.3, 0.5, 0.2)
set.seed(123)
multinomial_trial <- rmultinom(1, 10, c(0.3, 0.5, 0.2))
multinomial_trial
##      [,1]
## [1,]    2
## [2,]    5
## [3,]    3

Interpretasi

Hasilnya adalah vektor yang menunjukkan frekuensi setiap kategori dalam satu percobaan. Distribusi ini ideal untuk data kategori dengan lebih dari dua hasil.

Distribusi Poisson

Distribusi Poisson memodelkan jumlah kejadian yang terjadi dalam interval waktu atau ruang tetap, dengan tingkat rata-rata yang konstan (\(\lambda\)). Distribusi ini sering digunakan untuk data hitungan (count data) dalam analisis kategori.

Fungsi Probabilitas

Fungsi probabilitas distribusi Poisson adalah:

\[ P(X=k) = \frac{e^{-\lambda} \lambda^k}{k!} \]

di mana: - \(X\) adalah jumlah kejadian, - \(\lambda\) adalah tingkat rata-rata kejadian per interval, - \(k\) adalah jumlah kejadian yang diamati (\(k = 0, 1, 2, \ldots\)).

Contoh

  • Pusat Layanan: Menghitung jumlah panggilan telepon yang diterima dalam satu jam.
  • Kecelakaan Lalu Lintas: Menghitung jumlah kecelakaan di jalan tertentu dalam sehari.
  • Kedatangan Pelanggan: Menghitung jumlah pelanggan yang masuk ke toko dalam 30 menit.

Implementasi di R

Distribusi Poisson dapat disimulasikan menggunakan fungsi rpois() dengan parameter tingkat rata-rata (\(\lambda\)).

# Simulasi 10 sampel Poisson dengan lambda = 3
set.seed(123)
poisson_samples <- rpois(10, 3)
poisson_samples
##  [1] 2 4 2 5 6 0 3 5 3 3

Interpretasi

Hasilnya adalah vektor yang menunjukkan jumlah kejadian dalam setiap simulasi. Distribusi ini sangat berguna untuk memodelkan data kategori berbasis hitungan.

Desain Sampling dalam Analisis Data Kategori

Pada analisis data kategori,diperlukan adanya desain sampling yang tepat untuk memastikan validitas dan reliabilitas hasil penelitian. Desain sampling itu sendiri adalah strategi untuk memilih sebagian individu atau unit dari populasi agar hasil analisis dapat mewakili populasi secara keseluruhan. Pemilihan desain sampling yang sesuai bergantung pada tujuan penelitian, jenis data yang dikumpulkan, dan sumber daya yang tersedia.

Pendekatan Sampling Prospektif

Sampling prospektif melibatkan identifikasi dan pengamatan subjek dalam periode waktu tertentu untuk memantau perkembangan variabel yang menarik. Pendekatan ini sering digunakan dalam studi kausal dan eksperimental karena memungkinkan peneliti untuk mengontrol variabel independen sebelum mengukur hasilnya.

Eksperimen

Eksperimen dirancang untuk menguji hubungan sebab-akibat dengan mengalokasikan subjek secara acak ke kelompok perlakuan dan kontrol. Metode sampling yang umum digunakan dalam eksperimen meliputi:

  • Simple Random Sampling (SRS): Setiap individu dalam populasi memiliki peluang yang sama untuk dipilih, meminimalkan bias seleksi. Contohnya, memilih peserta secara acak untuk uji coba obat baru.
  • Stratified Random Sampling: Populasi dibagi menjadi strata berdasarkan karakteristik tertentu (misalnya, usia atau jenis kelamin), dan sampel diambil secara acak dari setiap strata. Ini berguna untuk memastikan representasi kelompok tertentu, seperti dalam studi pemasaran yang menargetkan berbagai demografi.
  • Cluster Sampling: Populasi dibagi menjadi kluster (misalnya, sekolah atau desa), dan beberapa kluster dipilih secara acak untuk dianalisis. Metode ini efisien untuk populasi yang tersebar secara geografis, seperti dalam penelitian pendidikan.

Studi Kohort

Studi kohort mengamati sekelompok individu dari waktu ke waktu untuk melihat bagaimana variabel tertentu memengaruhi hasil. Metode sampling yang digunakan meliputi:

  • Census Sampling: Mencakup semua anggota populasi tertentu dalam penelitian, cocok untuk populasi kecil atau spesifik, seperti semua karyawan di sebuah perusahaan.
  • Systematic Sampling: Subjek dipilih pada interval tetap dari daftar populasi, misalnya, setiap orang ke-10 dalam daftar pasien rumah sakit.
  • Matched Sampling: Setiap individu dalam satu kelompok kohort dipasangkan dengan individu serupa di kelompok lain berdasarkan variabel tertentu (misalnya, usia atau riwayat kesehatan), untuk mengurangi efek variabel pengganggu.

Pendekatan Sampling Retrospektif

Sampling retrospektif melibatkan pengumpulan data dari peristiwa yang telah terjadi, sering digunakan dalam studi observasional untuk mengidentifikasi hubungan antara faktor risiko dan hasil. Pendekatan ini efisien karena memanfaatkan data yang sudah ada.

Studi Kasus-Kontrol

Studi kasus-kontrol membandingkan individu dengan hasil tertentu (kasus) dengan individu tanpa hasil tersebut (kontrol) untuk mengidentifikasi faktor risiko. Metode sampling yang digunakan adalah:

  • Purposive Sampling: Sampel dipilih berdasarkan karakteristik yang relevan dengan tujuan penelitian, seperti memilih pasien dengan kanker paru-paru untuk studi tentang merokok.
  • Snowball Sampling: Responden awal membantu merekrut subjek tambahan dengan karakteristik serupa, berguna untuk populasi yang sulit dijangkau, seperti pengguna narkoba.
  • Incidence Density Sampling: Kasus dan kontrol dipilih dari populasi yang sama, dengan mempertimbangkan periode waktu terjadinya kasus, untuk memastikan representasi yang akurat dalam studi penyakit langka.

Studi Kohort Retrospektif

Studi kohort retrospektif menganalisis data historis untuk menilai hubungan antara paparan masa lalu dan hasil saat ini. Metode sampling yang digunakan meliputi:

  • Convenience Sampling: Subjek dipilih berdasarkan ketersediaan data, seperti catatan medis yang sudah ada di rumah sakit.
  • Quota Sampling: Sampel dipilih untuk mencerminkan proporsi tertentu dalam populasi, misalnya, memastikan jumlah pria dan wanita seimbang dalam studi kesehatan.
  • Case-Based Sampling: Sampel dipilih berdasarkan karakteristik kasus yang telah terjadi, seperti memilih individu yang pernah terpapar bahan kimia tertentu.

Tabel Perbandingan Desain Sampling

Tabel berikut merangkum perbandingan desain sampling dalam analisis data kategori, berdasarkan jenis studi, pendekatan sampling, metode, kelebihan, dan kekurangan:

Jenis Studi Pendekatan Sampling Metode Sampling Kelebihan Kekurangan
Eksperimen Prospektif SRS, Stratified, Cluster Kontrol tinggi atas variabel, cocok untuk analisis kausal Mahal, sensitif secara etis
Studi Kohort Prospektif Census, Systematic, Matched Memungkinkan pengamatan jangka panjang Memakan waktu, risiko kehilangan partisipan
Studi Kasus-Kontrol Retrospektif Purposive, Snowball, Incidence Density Cepat, efisien untuk penyakit langka Sulit mengontrol variabel pengganggu, rentan terhadap bias recall
Studi Kohort Retrospektif Retrospektif Convenience, Quota, Case-Based Hemat biaya, memanfaatkan data historis Bergantung pada kualitas data, rentan terhadap data hilang

Tabel ini membantu peneliti memilih desain sampling yang paling sesuai dengan tujuan penelitian mereka, dengan mempertimbangkan kelebihan dan kekurangan masing-masing metode.

Contoh Aplikasi

Berikut adalah beberapa contoh aplikasi desain sampling dalam analisis data kategori:

  • Eksperimen: Menggunakan stratified random sampling untuk memilih peserta dari berbagai kelompok usia dalam uji coba vaksin, memastikan representasi demografis yang seimbang.
  • Studi Kohort: Menggunakan matched sampling untuk mempelajari efek gaya hidup terhadap penyakit jantung, dengan memasangkan individu berdasarkan usia dan jenis kelamin.
  • Studi Kasus-Kontrol: Menggunakan purposive sampling untuk memilih pasien dengan diabetes dan kelompok kontrol tanpa diabetes guna meneliti faktor risiko genetik.
  • Studi Kohort Retrospektif: Menggunakan convenience sampling untuk menganalisis catatan rumah sakit guna menilai dampak paparan polusi udara terhadap penyakit pernapasan.

Tabel Kontingensi Dua Arah

Misalkan kita memiliki data mengenai:

  1. Penggunaan Mobile Banking: “Menggunakan Mobile Banking” dan “Tidak Menggunakan Mobile Banking”

  2. Kejadian Korban Penipuan: “Korban Penipuan” dan “Bukan Korban”

Data yang diperoleh adalah sebagai berikut:

Korban Penipuan Bukan Korban Jumlah Baris
Menggunakan Mobile Banking 12 48 60
Tidak Menggunakan Mobile Banking 6 84 90
Jumlah Kolom 18 132 150
# Membuat matriks tabel kontingensi
tabel <- matrix(c(12, 48, 6, 84), nrow = 2, byrow = TRUE)
rownames(tabel) <- c("Menggunakan Mobile Banking", "Tidak Menggunakan Mobile Banking")
colnames(tabel) <- c("Korban Penipuan", "Bukan Korban")
print(tabel)
##                                  Korban Penipuan Bukan Korban
## Menggunakan Mobile Banking                    12           48
## Tidak Menggunakan Mobile Banking               6           84

Keterangan:

  • \(a = 12\) (Menggunakan MB & Korban Penipuan)

  • \(b = 48\) (Menggunakan MB & Bukan Korban)

  • \(c = 6\) (Tidak Menggunakan MB & Korban Penipuan)

  • \(d = 84\) (Tidak Menggunakan MB & Bukan Korban)

  • Total sampel \(N = 150\)

Peluang Bersama (Joint Probability)

Definisi:
Peluang Bersama (Joint Probability) adalah probabilitas terjadinya dua kejadian secara bersamaan. Konsep ini membantu kita memahami seberapa sering dua peristiwa yang saling terkait muncul bersamaan dalam data. (Triola, 2018; Devore, 2015)

Rumus:
\[ P(A \cap B) = \frac{n_{AB}}{N} \]

  • \(P(\text{MB} \cap \text{Korban Penipuan}) = \frac{12}{150} \approx 0.08\)

  • \(P(\text{MB} \cap \text{Bukan Korban}) = \frac{48}{150} \approx 0.32\)

  • \(P(\text{Tidak MB} \cap \text{Korban Penipuan}) = \frac{6}{150} = 0.04\)

  • \(P(\text{Tidak MB} \cap \text{Bukan Korban}) = \frac{84}{150} = 0.56\)

# Total sampel
N <- sum(tabel)
cat("Total sampel N =", N, "\n")
## Total sampel N = 150
# Peluang Bersama (Joint Probability)
p_joint <- tabel / N
cat("Peluang Bersama:\n")
## Peluang Bersama:
print(p_joint)
##                                  Korban Penipuan Bukan Korban
## Menggunakan Mobile Banking                  0.08         0.32
## Tidak Menggunakan Mobile Banking            0.04         0.56

Kapan Digunakan:
Digunakan untuk mengetahui seberapa besar kemungkinan dua peristiwa yang saling terkait terjadi bersamaan.

Interpretasi:
Misalnya, jika \(P(\text{MB} \cap \text{Korban Penipuan}) = \frac{12}{150} \approx 0.08\), artinya 8% dari seluruh pelanggan mengalami kedua kondisi tersebut secara bersamaan.

Peluang Marginal (Marginal Probability)

Definisi:
Peluang Marginal adalah probabilitas terjadinya satu kejadian tanpa mempertimbangkan kejadian lain. Hal ini memberikan gambaran mengenai distribusi masing-masing variabel secara individu. (Triola, 2018; Moore & McCabe, 2005)

Rumus Marginal untuk Baris (Row):
- Untuk Mobile Banking:
\[ P(\text{MB}) = \frac{a+b}{N} = \frac{12+48}{150} = \frac{60}{150} = 0.4 \]
- Untuk Tidak Mobile Banking:
\[ P(\text{Tidak MB}) = \frac{c+d}{N} = \frac{6+84}{150} = \frac{90}{150} = 0.6 \]

Rumus Marginal untuk Kolom (Column):
- Untuk Korban Penipuan:
\[ P(\text{Korban Penipuan}) = \frac{a+c}{N} = \frac{12+6}{150} = \frac{18}{150} = 0.12 \]
- Untuk Bukan Korban:
\[ P(\text{Bukan Korban}) = \frac{b+d}{N} = \frac{48+84}{150} = \frac{132}{150} = 0.88 \]

# Peluang Marginal
p_MB <- sum(tabel["Menggunakan Mobile Banking", ]) / N
p_Korban <- sum(tabel[, "Korban Penipuan"]) / N
cat("Peluang Marginal:\n")
## Peluang Marginal:
cat("P(Mobile Banking) =", p_MB, "\n")
## P(Mobile Banking) = 0.4
cat("P(Korban Penipuan) =", p_Korban, "\n")
## P(Korban Penipuan) = 0.12

Kapan Digunakan:
Digunakan untuk menghitung proporsi atau persentase masing-masing kejadian pada seluruh sampel data.

Interpretasi:
Jika \(P(\text{MB}) = \frac{60}{150} = 0.4\), maka 40% pelanggan menggunakan mobile banking. Sedangkan, \(P(\text{Korban Penipuan}) = \frac{18}{150} = 0.12\) berarti 12% pelanggan mengalami korban penipuan.

Peluang Bersyarat (Conditional Probability)

Definisi:
Peluang Bersyarat adalah probabilitas terjadinya suatu kejadian dengan asumsi bahwa kejadian lain telah terjadi. Ini membantu kita membandingkan risiko atau probabilitas antara dua kelompok yang berbeda. (Triola, 2018; Agresti, 2018)

Rumus:

Berdasarkan status penggunaan mobile banking:

  • Jika diketahui pelanggan menggunakan MB:

\[P(\text{Korban Penipuan}|\text{MB}) = \frac{a}{a+b} = \frac{12}{60} = 0.2\]

\[P(\text{Bukan Korban}|\text{MB}) = \frac{b}{a+b} = \frac{48}{60} = 0.8\]

  • Jika diketahui pelanggan tidak menggunakan MB:

\[P(\text{Korban Penipuan}|\text{Tidak MB}) = \frac{c}{c+d} = \frac{6}{90} \approx 0.0667\]

\[P(\text{Bukan Korban}|\text{Tidak MB}) = \frac{d}{c+d} = \frac{84}{90} \approx 0.9333\]

Berdasarkan status korban:

  • Jika diketahui pelanggan mengalami korban penipuan:

\[P(\text{MB}|\text{Korban Penipuan}) = \frac{a}{a+c} = \frac{12}{18} \approx 0.667\]

\[P(\text{Tidak MB}|\text{Korban Penipuan}) = \frac{c}{a+c} = \frac{6}{18} \approx 0.333\]

  • Jika diketahui pelanggan bukan korban: \[P(\text{MB}|\text{Bukan Korban}) = \frac{b}{b+d} = \frac{48}{132} \approx 0.364\]

\[P(\text{Tidak MB}|\text{Bukan Korban}) = \frac{d}{b+d} = \frac{84}{132} \approx 0.636\]

#Pelua ng Bersyarat (berdasarkan MB)
p_Korban_given_MB <- tabel["Menggunakan Mobile Banking", "Korban Penipuan"] / sum(tabel["Menggunakan Mobile Banking", ])
p_Bukan_given_MB <- tabel["Menggunakan Mobile Banking", "Bukan Korban"] / sum(tabel["Menggunakan Mobile Banking", ])
cat("Peluang Bersyarat (berdasarkan MB):\n")
## Peluang Bersyarat (berdasarkan MB):
cat("P(Korban Penipuan|MB) =", p_Korban_given_MB, "\n")
## P(Korban Penipuan|MB) = 0.2
cat("P(Bukan Korban|MB) =", p_Bukan_given_MB, "\n")
## P(Bukan Korban|MB) = 0.8
# Peluang Bersyarat (berdasarkan Tidak MB)
p_Korban_given_nonMB <- tabel["Tidak Menggunakan Mobile Banking", "Korban Penipuan"] / sum(tabel["Tidak Menggunakan Mobile Banking", ])
p_Bukan_given_nonMB <- tabel["Tidak Menggunakan Mobile Banking", "Bukan Korban"] / sum(tabel["Tidak Menggunakan Mobile Banking", ])
cat("Peluang Bersyarat (berdasarkan Tidak MB):\n")
## Peluang Bersyarat (berdasarkan Tidak MB):
cat("P(Korban Penipuan|Tidak MB) =", p_Korban_given_nonMB, "\n")
## P(Korban Penipuan|Tidak MB) = 0.06666667
cat("P(Bukan Korban|Tidak MB) =", p_Bukan_given_nonMB, "\n")
## P(Bukan Korban|Tidak MB) = 0.9333333

Kapan Digunakan:
Digunakan untuk membandingkan probabilitas suatu peristiwa pada kelompok yang berbeda berdasarkan kondisi yang sudah diketahui.

Interpretasi:
Jika \(P(\text{Korban Penipuan}|\text{MB}) = \frac{12}{60} = 0.2\), artinya 20% pelanggan yang menggunakan mobile banking mengalami korban penipuan. Sedangkan jika \(P(\text{Korban Penipuan}|\text{Tidak MB}) = \frac{6}{90} \approx 0.0667\), maka sekitar 6.67% pelanggan non-pengguna mobile banking mengalami korban penipuan.

Ukuran Asosiasi

Ukuran asosiasi mengukur kekuatan hubungan antara dua variabel.

Risk Difference (RD)

Definisi:
Risk Difference (RD) adalah selisih risiko terjadinya suatu kejadian antara dua kelompok. Ini menunjukkan seberapa besar perbedaan risiko antara kelompok yang berbeda. (Triola, 2018; Devore, 2015)

Rumus:
\[ RD = P(\text{Korban Penipuan}|\text{MB}) - P(\text{Korban Penipuan}|\text{Tidak MB}) \]

Diketahui:
\(P(\text{Korban Penipuan}|\text{MB}) = \frac{12}{60} = 0.2\)
\(P(\text{Korban Penipuan}|\text{Tidak MB}) = \frac{6}{90} \approx 0.0667\)

Maka:
\[ RD = 0.2 - 0.0667 \approx 0.1333 \]

# Risk Difference
RD <- p_Korban_given_MB - p_Korban_given_nonMB
cat("Risk Difference (RD) =", RD, "\n")
## Risk Difference (RD) = 0.1333333

Interpretasi:
Hasil \(RD \approx 0.1333\) menunjukkan bahwa pengguna mobile banking memiliki risiko mengalami korban penipuan yang meningkat sekitar 13.33% dibandingkan dengan non-pengguna.

Relative Risk (RR)

Definisi:
Relative Risk (RR) adalah perbandingan risiko kejadian antara dua kelompok. Ini memberikan gambaran berapa kali lipat risiko pada satu kelompok dibandingkan dengan kelompok lainnya. (Agresti, 2018; Moore & McCabe, 2005)

Rumus:
\[ RR = \frac{P(\text{Korban Penipuan}|\text{MB})}{P(\text{Korban Penipuan}|\text{Tidak MB})} \]

\[ RR = \frac{P(\text{Korban Penipuan}|\text{MB})}{P(\text{Korban Penipuan}|\text{Tidak MB})} = \frac{0.2}{0.0667} \approx 3 \]

#Relative Risk
RR <- p_Korban_given_MB / p_Korban_given_nonMB
cat("Relative Risk (RR) =", RR, "\n")
## Relative Risk (RR) = 3

Interpretasi:
Hasil \(RR \approx 3\) berarti risiko mengalami korban penipuan pada pengguna mobile banking adalah tiga kali lipat dibandingkan dengan non-pengguna.

Odds Ratio (OR)

Definisi:
Odds Ratio (OR) mengukur perbandingan peluang (odds) terjadinya suatu kejadian antara dua kelompok. (Triola, 2018; Devore, 2015)

Rumus:
Pertama, hitung odds masing-masing kelompok:

  • Untuk pengguna Mobile Banking: \[ \text{Odds}_{MB} = \frac{a}{b} = \frac{12}{48} = 0.25 \]

  • Untuk non-pengguna Mobile Banking: \[ \text{Odds}_{nonMB} = \frac{c}{d} = \frac{6}{84} \approx 0.0714 \]
    Kemudian:

\[ OR = \frac{\text{Odds}_{MB}}{\text{Odds}_{nonMB}} = \frac{0.25}{0.0714} \approx 3.5 \]

odds_MB <- tabel["Menggunakan Mobile Banking", "Korban Penipuan"] / tabel["Menggunakan Mobile Banking", "Bukan Korban"]
odds_nonMB <- tabel["Tidak Menggunakan Mobile Banking", "Korban Penipuan"] / tabel["Tidak Menggunakan Mobile Banking", "Bukan Korban"]
OR <- odds_MB / odds_nonMB
cat("Odds Ratio (OR) =", OR, "\n")
## Odds Ratio (OR) = 3.5

Interpretasi:
Jika \(OR \approx 3.5\), artinya peluang mengalami korban penipuan pada pengguna mobile banking sekitar 3.5 kali lebih tinggi dibandingkan non-pengguna.

Visualisasi Data

Visualisasi data akan membantu kita memahami hasil analisis dengan lebih jelas. Berikut adalah visualisasi menggunakan Mosaic Plot dan Bar Plot.

Mosaic Plot

# Membuat mosaic plot
mosaicplot(tabel, main = "Mosaic Plot: Mobile Banking vs Korban Penipuan", col = c("red", "blue"))

Interpretasi:
Mosaic plot menggambarkan distribusi proporsional antara kategori penggunaan mobile banking dan status korban. Warna berbeda membantu mengidentifikasi perbedaan proporsi antar kategori secara visual.

Bar Plot

library(ggplot2)
# Mengonversi tabel ke data frame untuk visualisasi
data <- as.data.frame(as.table(tabel))
colnames(data) <- c("Mobile_Banking", "status", "Jumlah")

# Membuat bar plot berdampingan dengan skema warna merah dan biru
ggplot(data, aes(x = Mobile_Banking, y = Jumlah, fill = status)) +
  geom_bar(stat = "identity", position = "dodge") +
  scale_fill_manual(values = c("red", "blue")) +
  labs(title = "Bar Plot: Distribusi Korban Penipuan Berdasarkan Penggunaan Mobile Banking",
       x = "Penggunaan Mobile Banking",
       y = "Jumlah Pelanggan") +
  theme_minimal()

Interpretasi:
Bar plot menampilkan jumlah absolut pelanggan pada tiap kombinasi kategori. Ini memudahkan perbandingan langsung antara jumlah pelanggan yang mengalami korban penipuan dan yang tidak, berdasarkan status penggunaan mobile banking.

Pie Chart

# Membuat pie chart untuk distribusi status keseluruhan
status_counts <- c(sum(tabel[,"Korban Penipuan"]), sum(tabel[,"Bukan Korban"]))
status_labels <- c("Korban Penipuan", "Bukan Korban")
pie(status_counts, labels = status_labels, main = "Pie Chart: Distribusi Korban Penipuan vs Bukan Korban", 
    col = c("red", "blue"))

Interpretasi:
Pie chart menyajikan distribusi keseluruhan status dalam bentuk segmen, menegaskan bahwa mayoritas pelanggan tidak mengalami korban penipuan, sementara segmen yang lebih kecil mewakili pelanggan yang mengalami korban penipuan.

Inferensi Tabel Kontingensi Dua Arah

Tabel kontingensi dua arah adalah alat statistik yang digunakan untuk memeriksa hubungan antara dua variabel kategorikal. Inferensi tabel kontingensi dua arah merupakan pendekatan untuk menguji apakah terdapat hubungan (asosiasi) antara dua variabel kategorikal. Pada bagian ini, kita akan menguji hipotesis menggunakan:

Estimasi

Estimasi dalam tabel kontingensi dua arah bertujuan untuk menghitung proporsi atau probabilitas dari data sampel, baik secara titik (nilai tunggal) maupun interval (rentang kepercayaan).

Estimasi Titik

Estimasi titik memberikan nilai proporsi berdasarkan data yang diamati, seperti proporsi gabungan, marginal, dan bersyarat. Proporsi ini membantu memahami distribusi data dalam tabel kontingensi.

Rumus:

Untuk tabel kontingensi dengan \(r\) baris dan \(c\) kolom:

  • Proporsi gabungan: \(\hat{P}(A_i \cap B_j) = \frac{n_{ij}}{n}\), di mana \(n_{ij}\) adalah frekuensi sel, dan \(n\) adalah total sampel.
  • Proporsi marginal: \(\hat{P}(A_i) = \frac{r_i}{n}\), \(\hat{P}(B_j) = \frac{c_j}{n}\), di mana \(r_i\) adalah total baris ke-\(i\), dan \(c_j\) adalah total kolom ke-\(j\).
  • Proporsi bersyarat: \(\hat{P}(B_j | A_i) = \frac{n_{ij}}{r_i}\), \(\hat{P}(A_i | B_j) = \frac{n_{ij}}{c_j}\).

Contoh Kasus:
Misalkan sebuah toko mengumpulkan data preferensi merek smartphone berdasarkan jenis kelamin:

Apple Samsung Total
Laki-laki 100 80 180
Perempuan 70 120 190
Total 170 200 370
  • Proporsi laki-laki yang memilih Apple: \(\hat{P}(\text{Apple} | \text{Laki-laki}) = \frac{100}{180} \approx 0.5556\)
  • Proporsi perempuan yang memilih Apple: \(\hat{P}(\text{Apple} | \text{Perempuan}) = \frac{70}{190} \approx 0.3684\)
  • Proporsi keseluruhan yang memilih Apple: \(\hat{P}(\text{Apple}) = \frac{170}{370} \approx 0.4595\)
  • Proporsi gabungan laki-laki dan Apple: \(\hat{P}(\text{Laki-laki} \cap \text{Apple}) = \frac{100}{370} \approx 0.2703\)

Implementasi dalam R:

# Data tabel kontingensi
product_preference <- matrix(c(100, 80, 70, 120), nrow = 2, byrow = TRUE)
rownames(product_preference) <- c("Laki-laki", "Perempuan")
colnames(product_preference) <- c("Apple", "Samsung")

# Estimasi titik
p_apple_male <- 100 / 180
p_apple_female <- 70 / 190
p_apple_total <- 170 / 370
p_male_apple_joint <- 100 / 370

cat("Proporsi laki-laki yang memilih Apple:", round(p_apple_male, 4), "\n")
## Proporsi laki-laki yang memilih Apple: 0.5556
cat("Proporsi perempuan yang memilih Apple:", round(p_apple_female, 4), "\n")
## Proporsi perempuan yang memilih Apple: 0.3684
cat("Proporsi keseluruhan yang memilih Apple:", round(p_apple_total, 4), "\n")
## Proporsi keseluruhan yang memilih Apple: 0.4595
cat("Proporsi gabungan laki-laki dan Apple:", round(p_male_apple_joint, 4), "\n")
## Proporsi gabungan laki-laki dan Apple: 0.2703

Interpretasi:
Hasil menunjukkan bahwa 55,56% laki-laki memilih Apple dibandingkan 36,84% perempuan, menunjukkan perbedaan preferensi berdasarkan jenis kelamin. Proporsi keseluruhan yang memilih Apple adalah 45,95%, dan proporsi gabungan laki-laki yang memilih Apple adalah 27,03% dari total sampel.

Estimasi Interval

Estimasi interval memberikan rentang nilai di mana proporsi populasi kemungkinan besar berada, dengan tingkat kepercayaan tertentu (biasanya 95%). Ini membantu menilai ketidakpastian dalam estimasi titik.

Rumus:
Untuk proporsi \(\hat{p}\) dengan ukuran sampel \(n\), interval kepercayaan 95% adalah: \[ \hat{p} \pm z_{\alpha/2} \cdot \sqrt{\frac{\hat{p}(1 - \hat{p})}{n}} \] Di mana \(z_{\alpha/2} = 1.96\) untuk tingkat kepercayaan 95%, dan standar error (SE) adalah: \[ \text{SE} = \sqrt{\frac{\hat{p}(1 - \hat{p})}{n}} \]

Contoh Kasus:
Hitung interval kepercayaan 95% untuk proporsi laki-laki yang memilih Apple:

  • \(\hat{p} = \frac{100}{180} \approx 0.5556\)

  • \(n = 180\)

  • Standar error: \(\text{SE} = \sqrt{\frac{0.5556 \cdot (1 - 0.5556)}{180}} \approx \sqrt{\frac{0.2469}{180}} \approx 0.0370\)

  • Interval kepercayaan: \(0.5556 \pm 1.96 \cdot 0.0370 \approx 0.5556 \pm 0.0726 \rightarrow (0.4830, 0.6282)\)

Implementasi dalam R:

# Estimasi interval untuk proporsi laki-laki yang memilih Apple
p_hat <- 100 / 180
n <- 180
se <- sqrt(p_hat * (1 - p_hat) / n)
ci_lower <- p_hat - 1.96 * se
ci_upper <- p_hat + 1.96 * se

cat("Interval Kepercayaan 95% untuk proporsi laki-laki yang memilih Apple: (", round(ci_lower, 4), ", ", round(ci_upper, 4), ")\n")
## Interval Kepercayaan 95% untuk proporsi laki-laki yang memilih Apple: ( 0.483 ,  0.6281 )

Interpretasi:
Kita dapat yakin dengan tingkat kepercayaan 95% bahwa proporsi laki-laki di populasi yang memilih Apple berada antara 48,3% dan 62,8%. Rentang ini menunjukkan ketidakpastian dalam estimasi titik dan membantu menilai keandalan hasil.

Uji Hipotesis

Uji hipotesis digunakan untuk menguji asumsi tentang hubungan antara variabel kategorikal dalam tabel kontingensi, termasuk perbandingan proporsi, independensi, dan kekuatan asosiasi.

Uji Proporsi

Penjelasan:
Uji proporsi membandingkan proporsi dua kelompok untuk menentukan apakah ada perbedaan signifikan. Ini sering digunakan dalam tabel 2x2 untuk membandingkan proporsi bersyarat.

Rumus:

  • Hipotesis nol (\(H_0\)): \(p_1 = p_2\) (proporsi sama)
  • Hipotesis alternatif (\(H_1\)): \(p_1 \neq p_2\) (proporsi berbeda)
  • Statistik uji: \[ z = \frac{\hat{p}_1 - \hat{p}_2}{\sqrt{\hat{p}(1 - \hat{p}) \cdot \left( \frac{1}{n_1} + \frac{1}{n_2} \right)}} \]
  • Di mana proporsi gabungan: \(\hat{p} = \frac{x_1 + x_2}{n_1 + n_2}\)
  • Nilai p dihitung dari distribusi normal standar: \(p = 2 \cdot (1 - \Phi(|z|))\)

Contoh Kasus:

Uji apakah proporsi laki-laki yang memilih Apple sama dengan proporsi perempuan yang memilih Apple:

  • \(\hat{p}_1 = \frac{100}{180} \approx 0.5556\), \(n_1 = 180\)
  • \(\hat{p}_2 = \frac{70}{190} \approx 0.3684\), \(n_2 = 190\)
  • Proporsi gabungan: \(\hat{p} = \frac{100 + 70}{180 + 190} = \frac{170}{370} \approx 0.4595\)
  • Standar error: \(\text{SE} = \sqrt{0.4595 \cdot (1 - 0.4595) \cdot \left( \frac{1}{180} + \frac{1}{190} \right)} \approx \sqrt{0.2482 \cdot 0.010819} \approx 0.0518\)
  • Statistik uji: \(z = \frac{0.5556 - 0.3684}{0.0518} \approx 3.614\)
  • Nilai p: \(2 \cdot (1 - \Phi(3.614)) \approx 0.0003\)

Implementasi dalam R:

# Uji perbedaan proporsi
p1 <- 100 / 180
p2 <- 70 / 190
n1 <- 180
n2 <- 190
p_pooled <- (100 + 70) / (n1 + n2)
se_diff <- sqrt(p_pooled * (1 - p_pooled) * (1/n1 + 1/n2))
z_score <- (p1 - p2) / se_diff
p_value <- 2 * (1 - pnorm(abs(z_score)))

cat("Z-score:", round(z_score, 3), "\n")
## Z-score: 3.61
cat("P-value:", round(p_value, 4), "\n")
## P-value: 3e-04

Interpretasi:
Nilai p < 0.05 menunjukkan bahwa kita menolak hipotesis nol. Proporsi laki-laki dan perempuan yang memilih Apple berbeda secara signifikan, dengan laki-laki cenderung lebih memilih Apple dibandingkan perempuan.

Uji Independensi

Uji independensi menguji apakah dua variabel kategorikal saling independen, yaitu apakah distribusi satu variabel tidak dipengaruhi oleh variabel lain. Uji chi-square adalah metode yang umum digunakan untuk menguji independensi.

Rumus:

  • Hipotesis nol (\(H_0\)): Variabel independen - Hipotesis alternatif (\(H_1\)): Variabel tergantung
  • Statistik uji: \[ \chi^2 = \sum \frac{(O_{ij} - E_{ij})^2}{E_{ij}} \]
  • Di mana frekuensi yang diharapkan: \(E_{ij} = \frac{r_i \cdot c_j}{n}\)
  • Derajat kebebasan: \(\text{df} = (r-1)(c-1)\)
  • Nilai p dihitung dari distribusi chi-square dengan derajat kebebasan tersebut.

Contoh Kasus:

Uji apakah jenis kelamin dan preferensi merek smartphone independen:

  • Frekuensi yang diharapkan:
  • \(E_{11} = \frac{180 \cdot 170}{370} \approx 85.946\)
  • \(E_{12} = \frac{180 \cdot 200}{370} \approx 94.054\)
  • \(E_{21} = \frac{190 \cdot 170}{370} \approx 84.054\)
  • \(E_{22} = \frac{190 \cdot 200}{370} \approx 105.946\)
  • Statistik chi-square:
  • Sel (1,1): \(\frac{(100 - 85.946)^2}{85.946} \approx 2.298\)
  • Sel (1,2): \(\frac{(80 - 94.054)^2}{94.054} \approx 2.100\)
  • Sel (2,1): \(\frac{(70 - 84.054)^2}{84.054} \approx 2.350\)
  • Sel (2,2): \(\frac{(120 - 105.946)^2}{105.946} \approx 1.865\)
  • Total: \(\chi^2 \approx 2.298 + 2.100 + 2.350 + 1.865 \approx 8.613\)
  • Derajat kebebasan: \((2-1)(2-1) = 1\) - Nilai p: \(P(\chi^2_1 > 8.613) \approx 0.0033\)

Implementasi dalam R:

# Uji chi-square untuk independensi
chi_test <- chisq.test(product_preference)
print(chi_test)
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  product_preference
## X-squared = 12.291, df = 1, p-value = 0.0004552

Interpretasi:
Nilai p < 0.05 menunjukkan bahwa kita menolak hipotesis nol. Jenis kelamin dan preferensi merek smartphone tidak independen, artinya ada hubungan signifikan antara kedua variabel tersebut.

Uji Asosiasi

Penjelasan:
Uji asosiasi mengukur kekuatan hubungan antara dua variabel kategorikal. Untuk tabel 2x2, koefisien phi sering digunakan, sedangkan untuk tabel yang lebih besar, Cramer’s V lebih umum.

Rumus:

  • Koefisien phi (untuk tabel 2x2): \[ \phi = \sqrt{\frac{\chi^2}{n}} \]
  • Nilai phi berkisar dari 0 (tidak ada asosiasi) hingga 1 (asosiasi sempurna). Nilai di bawah 0.3 menunjukkan asosiasi lemah, 0.3–0.5 sedang, dan di atas 0.5 kuat.

Contoh Kasus:
Hitung koefisien phi untuk tabel preferensi merek:

  • \(\chi^2 \approx 8.613\), \(n = 370\)
  • \(\phi = \sqrt{\frac{8.613}{370}} \approx \sqrt{0.02328} \approx 0.1526\)

Implementasi dalam R:

# Koefisien phi
phi <- sqrt(chi_test$statistic / sum(product_preference))
cat("Koefisien Phi:", round(phi, 4), "\n")
## Koefisien Phi: 0.1823

Interpretasi:
Nilai phi ≈ 0.15 menunjukkan hubungan lemah antara jenis kelamin dan preferensi merek. Meskipun hubungan ini signifikan secara statistik, kekuatannya relatif kecil, menunjukkan bahwa faktor lain mungkin juga memengaruhi preferensi merek.

Analisis Residual

Penjelasan:
Analisis residual membantu mengidentifikasi sel dalam tabel kontingensi yang berkontribusi signifikan pada statistik chi-square, menunjukkan di mana data menyimpang dari yang diharapkan di bawah hipotesis independensi.

Rumus:

  • Residual standar: \[ r_{ij} = \frac{O_{ij} - E_{ij}}{\sqrt{E_{ij}}} \]
  • Sel dengan \(|r_{ij}| > 2\) dianggap menyimpang secara signifikan, menunjukkan bahwa frekuensi yang diamati sangat berbeda dari yang diharapkan.

Contoh Kasus:

Hitung residual standar untuk tabel preferensi merek:

  • Sel (Laki-laki, Apple): \(O_{11} = 100\), \(E_{11} \approx 85.946\) - \(r_{11} = \frac{100 - 85.946}{\sqrt{85.946}} \approx \frac{14.054}{9.271} \approx 1.516\)
  • Sel (Laki-laki, Samsung): \(O_{12} = 80\), \(E_{12} \approx 94.054\) - \(r_{12} = \frac{80 - 94.054}{\sqrt{94.054}} \approx \frac{-14.054}{9.700} \approx -1.449\)
  • Sel (Perempuan, Apple): \(O_{21} = 70\), \(E_{21} \approx 84.054\) - \(r_{21} = \frac{70 - 84.054}{\sqrt{84.054}} \approx \frac{-14.054}{9.168} \approx -1.533\)
  • Sel (Perempuan, Samsung): \(O_{22} = 120\), \(E_{22} \approx 105.946\) - \(r_{22} = \frac{120 - 105.946}{\sqrt{105.946}} \approx \frac{14.054}{10.293} \approx 1.365\)

Implementasi dalam R:

# Residual standar
std_res <- chi_test$stdres
print(std_res)
##               Apple   Samsung
## Laki-laki  3.610176 -3.610176
## Perempuan -3.610176  3.610176

Interpretasi:
Tidak ada residual standar yang melebihi ±2, menunjukkan bahwa tidak ada sel individu yang menyimpang secara ekstrem dari yang diharapkan. Namun, residual positif pada (Laki-laki, Apple) dan (Perempuan, Samsung) menunjukkan bahwa laki-laki lebih sering memilih Apple dan perempuan lebih sering memilih Samsung dibandingkan yang diharapkan di bawah independensi. Residual negatif pada sel lainnya mendukung pola ini. Secara keseluruhan, pola ini konsisten dengan hasil uji chi-square yang menunjukkan adanya hubungan.

Tabel Ringkasan Hasil Analisis

Analisis Metode Hasil Interpretasi
Estimasi Titik Proporsi bersyarat Laki-laki (Apple): 55,56%; Perempuan (Apple): 36,84% Laki-laki lebih cenderung memilih Apple dibandingkan perempuan.
Estimasi Interval Interval kepercayaan 95% Laki-laki (Apple): (48,3%, 62,8%) Proporsi populasi laki-laki yang memilih Apple kemungkinan berada dalam rentang ini.
Uji Proporsi Uji z Z = 3.614, p = 0.0003 Proporsi laki-laki dan perempuan yang memilih Apple berbeda signifikan.
Uji Independensi Uji chi-square \(\chi^2 = 8.613\), df = 1, p = 0.0033 Jenis kelamin dan preferensi merek tidak independen; ada hubungan signifikan.
Uji Asosiasi Koefisien phi \(\phi = 0.1526\) Hubungan lemah antara jenis kelamin dan preferensi merek.
Analisis Residual Residual standar Tidak ada \(|r_{ij}| > 2\); max = 1.516 Tidak ada sel yang menyimpang ekstrem, tetapi pola menunjukkan preferensi berbeda.

Tabel Kontingensi Tiga Arah

Tabel kontingensi tiga arah adalah tabel distribusi frekuensi yang menyajikan data dari tiga variabel kategorikal secara simultan. Dalam tabel ini, setiap dimensi atau “arah” mewakili satu variabel, sehingga tabel tersebut membentuk struktur tiga dimensi. Dengan demikian, tabel kontingensi tiga arah memungkinkan analisis hubungan antara ketiga variabel sekaligus, serta interaksi antar variabel tersebut. Misalnya, tabel ini dapat digunakan untuk mengkaji bagaimana variabel A, B, dan C saling terkait dalam sebuah populasi dengan mengatur data ke dalam kerangka tiga dimensi.

Menurut Agresti (2019), tabel kontingensi multidimensi (termasuk tiga arah) digunakan untuk menyajikan dan menganalisis data kategorikal di mana lebih dari dua variabel perlu diperhitungkan, sehingga memungkinkan para peneliti untuk mengevaluasi hubungan kompleks dan interaksi di antara variabel-variabel tersebut.

Tabel Kontingensi 3×2×2: Waktu Bermain × Jenis Permainan × Tingkat Konsentrasi

Tabel Kontingensi

Waktu Bermain Jenis Permainan Tingkat Konsentrasi Tinggi Tingkat Konsentrasi Rendah Total
Ringan Multiplayer 50 10 60
Ringan Single-Player 45 15 60
Sedang Multiplayer 35 25 60
Sedang Single-Player 30 30 60
Berat Multiplayer 20 40 60
Berat Single-Player 15 45 60
Total 195 165 360

Kelompok: Waktu Bermain Ringan

Jenis Permainan Tingkat Konsentrasi Tinggi Tingkat Konsentrasi Rendah Total
Multiplayer 50 10 60
Single-Player 45 15 60
Total 95 25 120

Kelompok: Waktu Bermain Sedang

Jenis Permainan Tingkat Konsentrasi Tinggi Tingkat Konsentrasi Rendah Total
Multiplayer 35 25 60
Single-Player 30 30 60
Total 65 55 120

Kelompok: Waktu Bermain Berat

Jenis Permainan Tingkat Konsentrasi Tinggi Tingkat Konsentrasi Rendah Total
Multiplayer 20 40 60
Single-Player 15 45 60
Total 35 85 120

Peluang Bersama

Pengertian

Menurut Agresti (2013), peluang bersama dalam konteks tabel kontingensi (termasuk tabel kontingensi tiga arah) adalah probabilitas terjadinya kombinasi tertentu dari dua atau lebih peristiwa secara simultan. Secara spesifik, pada tabel kontingensi tiga arah, peluang bersama dihitung sebagai perbandingan antara frekuensi (jumlah kasus) dari kombinasi kategori pada ketiga variabel dengan total seluruh pengamatan (N). Dengan kata lain, jika kita memiliki tiga variabel A, B, dan C, maka peluang bersama dari terjadinya peristiwa A, B, dan C secara bersamaan didefinisikan sebagai:

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

di mana: - \(P(A, B, C)\) = Joint Probability dari kombinasi kategori tertentu.
- \(n(A, B, C)\) = jumlah observasi dalam kombinasi kategori tersebut.
- \(N\) = total jumlah observasi dalam dataset.


Tabel Kontingensi

Berdasarkan tabel kontingensi sebelumnya, kita akan menghitung peluang bersama untuk setiap kombinasi Waktu Bermain dan Jenis Permainan. Karena setiap kombinasi memiliki dua kategori tingkat konsentrasi (Tinggi dan Rendah), kita akan menghitung jumlah individu untuk masing-masing kombinasi, kemudian menghitung peluang bersama sebagai perbandingan jumlah tersebut terhadap total populasi.

Kelompok: Waktu Bermain Ringan

Jenis Permainan Tingkat Konsentrasi Tinggi Tingkat Konsentrasi Rendah Jumlah Individu Joint Probability
Multiplayer 50 10 60 \(\frac{60}{360}\)
Single-Player 45 15 60 \(\frac{60}{360}\)

Kelompok: Waktu Bermain Sedang

Jenis Permainan Tingkat Konsentrasi Tinggi Tingkat Konsentrasi Rendah Jumlah Individu Joint Probability
Multiplayer 35 25 60 \(\frac{60}{360}\)
Single-Player 30 30 60 \(\frac{60}{360}\)

Kelompok: Waktu Bermain Berat

Jenis Permainan Tingkat Konsentrasi Tinggi Tingkat Konsentrasi Rendah Jumlah Individu Joint Probability
Multiplayer 20 40 60 \(\frac{60}{360}\)
Single-Player 15 45 60 \(\frac{60}{360}\)

Perhitungan Menggunakan R

# Membuat data frame berdasarkan tabel kontingensi untuk masing-masing kombinasi
data_joint <- data.frame(
  Waktu_Bermain = rep(c("Ringan", "Ringan", "Sedang", "Sedang", "Berat", "Berat"), each = 1),
  Jenis_Permainan = rep(c("Multiplayer", "Single-Player", "Multiplayer", "Single-Player", "Multiplayer", "Single-Player"), each = 1),
  Jumlah = c(60, 60, 60, 60, 60, 60)
)

# Total populasi
total_populasi <- sum(data_joint$Jumlah)  # 60 * 6 = 360

# Menghitung joint probability
data_joint$Joint_Probability <- data_joint$Jumlah / total_populasi

# Menampilkan hasil
print(data_joint)
##   Waktu_Bermain Jenis_Permainan Jumlah Joint_Probability
## 1        Ringan     Multiplayer     60         0.1666667
## 2        Ringan   Single-Player     60         0.1666667
## 3        Sedang     Multiplayer     60         0.1666667
## 4        Sedang   Single-Player     60         0.1666667
## 5         Berat     Multiplayer     60         0.1666667
## 6         Berat   Single-Player     60         0.1666667

Peluang Marginal

Pengertian

Menurut Agresti (2013), peluang marginal pada tabel kontingensi merupakan probabilitas terjadinya suatu kategori dari salah satu variabel tanpa memperhitungkan kategori variabel lain. Artinya, untuk suatu variabel A, peluang marginal P(A) dihitung dengan menjumlahkan frekuensi (jumlah pengamatan) dari semua kombinasi kategori pada variabel lain (misalnya, B dan C) yang berpasangan dengan kategori A, kemudian dibagi dengan total jumlah pengamatan (N). Dalam konteks ini, kita akan menghitung peluang marginal untuk variabel Waktu Bermain, Jenis Permainan, dan Tingkat Konsentrasi dengan menjumlahkan semua peluang bersama terkait.

Peluang Marginal dihitung menggunakan rumus berikut:

\[ P(A) = \sum_{B, C} P(A, B, C) \]

\[ P(B) = \sum_{A, C} P(A, B, C) \]

\[ P(C) = \sum_{A, B} P(A, B, C) \]


Perhitungan Menggunakan R

# Load library yang diperlukan
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.3.3
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
# Membuat data joint probability berdasarkan tabel kontingensi
# Tiga variabel: Waktu_Bermain (Ringan, Sedang, Berat), Jenis_Permainan (Multiplayer, Single-Player),
# dan Tingkat_Konsentrasi (Tinggi, Rendah).
# Data diambil dari Tabel Kontingensi Awal:
# Untuk setiap kombinasi (Waktu_Bermain, Jenis_Permainan):
# - Ringan, Multiplayer: Tinggi = 50, Rendah = 10
# - Ringan, Single-Player: Tinggi = 45, Rendah = 15
# - Sedang, Multiplayer: Tinggi = 35, Rendah = 25
# - Sedang, Single-Player: Tinggi = 30, Rendah = 30
# - Berat, Multiplayer: Tinggi = 20, Rendah = 40
# - Berat, Single-Player: Tinggi = 15, Rendah = 45

data_joint <- data.frame(
  Waktu_Bermain = rep(c("Ringan", "Sedang", "Berat"), each = 4),
  Jenis_Permainan = rep(rep(c("Multiplayer", "Single-Player"), each = 2), 3),
  Tingkat_Konsentrasi = rep(c("Tinggi", "Rendah"), 6),
  Jumlah = c(50, 10, 45, 15, 35, 25, 30, 30, 20, 40, 15, 45)
)

# Total populasi
total_populasi <- sum(data_joint$Jumlah)  # 50+10+45+15+35+25+30+30+20+40+15+45 = 360

# Menghitung joint probability
data_joint <- data_joint %>%
  mutate(Joint_Probability = Jumlah / total_populasi)

# Menghitung marginal probability untuk masing-masing variabel

# Marginal probability untuk Waktu Bermain
marginal_waktu <- data_joint %>%
  group_by(Waktu_Bermain) %>%
  summarise(Marginal_Probability = sum(Joint_Probability))

# Marginal probability untuk Jenis Permainan
marginal_jenis <- data_joint %>%
  group_by(Jenis_Permainan) %>%
  summarise(Marginal_Probability = sum(Joint_Probability))

# Marginal probability untuk Tingkat Konsentrasi
marginal_konsentrasi <- data_joint %>%
  group_by(Tingkat_Konsentrasi) %>%
  summarise(Marginal_Probability = sum(Joint_Probability))

# Menampilkan hasil
cat("Marginal Probability untuk Waktu Bermain:\n")
## Marginal Probability untuk Waktu Bermain:
print(marginal_waktu)
## # A tibble: 3 × 2
##   Waktu_Bermain Marginal_Probability
##   <chr>                        <dbl>
## 1 Berat                        0.333
## 2 Ringan                       0.333
## 3 Sedang                       0.333
cat("\nMarginal Probability untuk Jenis Permainan:\n")
## 
## Marginal Probability untuk Jenis Permainan:
print(marginal_jenis)
## # A tibble: 2 × 2
##   Jenis_Permainan Marginal_Probability
##   <chr>                          <dbl>
## 1 Multiplayer                      0.5
## 2 Single-Player                    0.5
cat("\nMarginal Probability untuk Tingkat Konsentrasi:\n")
## 
## Marginal Probability untuk Tingkat Konsentrasi:
print(marginal_konsentrasi)
## # A tibble: 2 × 2
##   Tingkat_Konsentrasi Marginal_Probability
##   <chr>                              <dbl>
## 1 Rendah                             0.458
## 2 Tinggi                             0.542

Peluang Bersyarat

Pengertian

CMenurut Agresti (2013), peluang bersyarat pada tabel kontingensi mengacu pada peluang terjadinya suatu kejadian A dengan asumsi bahwa kejadian B atau C telah terjadi sebelumnya. Dalam analisis ini, kita akan menghitung peluang bersyarat berdasarkan hubungan antara Waktu Bermain, Jenis Permainan, dan Tingkat Konsentrasi.

Secara umum, peluang bersyarat didefinisikan sebagai berikut:

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

\[ P(A \mid C) = \frac{P(A, C)}{P(C)} \]

\[ P(B \mid C) = \frac{P(B, C)}{P(C)} \]


Perhitungan Menggunakan R

# Load library yang diperlukan
library(dplyr)

# Data joint probability berdasarkan tabel kontingensi awal untuk 3 variabel:
# 1) Waktu_Bermain (Ringan, Sedang, Berat)
# 2) Jenis_Permainan (Multiplayer, Single-Player)
# 3) Tingkat_Konsentrasi (Tinggi, Rendah)
# Nilai 'Jumlah' diambil dari tabel yang telah disusun:
#   - Ringan, Multiplayer: Tinggi = 50, Rendah = 10  (Total 60)
#   - Ringan, Single-Player: Tinggi = 45, Rendah = 15 (Total 60)
#   - Sedang, Multiplayer: Tinggi = 35, Rendah = 25  (Total 60)
#   - Sedang, Single-Player: Tinggi = 30, Rendah = 30 (Total 60)
#   - Berat, Multiplayer: Tinggi = 20, Rendah = 40    (Total 60)
#   - Berat, Single-Player: Tinggi = 15, Rendah = 45  (Total 60)

data_joint <- data.frame(
  Waktu_Bermain = rep(c("Ringan", "Sedang", "Berat"), each = 4),
  Jenis_Permainan = rep(rep(c("Multiplayer", "Single-Player"), each = 2), 3),
  Tingkat_Konsentrasi = rep(c("Tinggi", "Rendah"), 6),
  Jumlah = c(50, 10, 45, 15, 35, 25, 30, 30, 20, 40, 15, 45)
)

# Total populasi
total_populasi <- sum(data_joint$Jumlah)  # 360

# Menghitung joint probability
data_joint <- data_joint %>%
  mutate(Joint_Probability = Jumlah / total_populasi)

# Contoh: Menghitung marginal probability untuk masing-masing variabel
marginal_waktu <- data_joint %>%
  group_by(Waktu_Bermain) %>%
  summarise(Marginal_Probability = sum(Joint_Probability))

marginal_jenis <- data_joint %>%
  group_by(Jenis_Permainan) %>%
  summarise(Marginal_Probability = sum(Joint_Probability))

marginal_konsentrasi <- data_joint %>%
  group_by(Tingkat_Konsentrasi) %>%
  summarise(Marginal_Probability = sum(Joint_Probability))

# ------------------------------------------------------
# Menghitung conditional probability
# ------------------------------------------------------

# 1) P(Waktu Bermain | Jenis Permainan)
cond_prob_jenis_by_waktu <- data_joint %>%
  group_by(Jenis_Permainan, Waktu_Bermain) %>%
  summarise(Conditional_Probability = sum(Joint_Probability) / 
              marginal_jenis$Marginal_Probability[marginal_jenis$Jenis_Permainan == first(Jenis_Permainan)])
## `summarise()` has grouped output by 'Jenis_Permainan'. You can override using
## the `.groups` argument.
# 2) P(Tingkat Konsentrasi | Waktu Bermain)
cond_prob_kons_by_waktu <- data_joint %>%
  group_by(Waktu_Bermain, Tingkat_Konsentrasi) %>%
  summarise(Conditional_Probability = sum(Joint_Probability) / 
              marginal_waktu$Marginal_Probability[marginal_waktu$Waktu_Bermain == first(Waktu_Bermain)])
## `summarise()` has grouped output by 'Waktu_Bermain'. You can override using the
## `.groups` argument.
# 3) P(Tingkat Konsentrasi | Jenis Permainan)
cond_prob_kons_by_jenis <- data_joint %>%
  group_by(Jenis_Permainan, Tingkat_Konsentrasi) %>%
  summarise(Conditional_Probability = sum(Joint_Probability) / 
              marginal_jenis$Marginal_Probability[marginal_jenis$Jenis_Permainan == first(Jenis_Permainan)])
## `summarise()` has grouped output by 'Jenis_Permainan'. You can override using
## the `.groups` argument.
# Menampilkan hasil
cat("Conditional Probability: Jenis Permainan | Waktu Bermain\n")
## Conditional Probability: Jenis Permainan | Waktu Bermain
print(cond_prob_jenis_by_waktu)
## # A tibble: 6 × 3
## # Groups:   Jenis_Permainan [2]
##   Jenis_Permainan Waktu_Bermain Conditional_Probability
##   <chr>           <chr>                           <dbl>
## 1 Multiplayer     Berat                           0.333
## 2 Multiplayer     Ringan                          0.333
## 3 Multiplayer     Sedang                          0.333
## 4 Single-Player   Berat                           0.333
## 5 Single-Player   Ringan                          0.333
## 6 Single-Player   Sedang                          0.333
cat("\nConditional Probability: Tingkat Konsentrasi | Waktu Bermain\n")
## 
## Conditional Probability: Tingkat Konsentrasi | Waktu Bermain
print(cond_prob_kons_by_waktu)
## # A tibble: 6 × 3
## # Groups:   Waktu_Bermain [3]
##   Waktu_Bermain Tingkat_Konsentrasi Conditional_Probability
##   <chr>         <chr>                                 <dbl>
## 1 Berat         Rendah                                0.708
## 2 Berat         Tinggi                                0.292
## 3 Ringan        Rendah                                0.208
## 4 Ringan        Tinggi                                0.792
## 5 Sedang        Rendah                                0.458
## 6 Sedang        Tinggi                                0.542
cat("\nConditional Probability: Tingkat Konsentrasi | Jenis Permainan\n")
## 
## Conditional Probability: Tingkat Konsentrasi | Jenis Permainan
print(cond_prob_kons_by_jenis)
## # A tibble: 4 × 3
## # Groups:   Jenis_Permainan [2]
##   Jenis_Permainan Tingkat_Konsentrasi Conditional_Probability
##   <chr>           <chr>                                 <dbl>
## 1 Multiplayer     Rendah                                0.417
## 2 Multiplayer     Tinggi                                0.583
## 3 Single-Player   Rendah                                0.5  
## 4 Single-Player   Tinggi                                0.5

Tabel Peluang Bersyarat

Tabel Peluang Bersyarat Tingkat Konsentrasi berdasarkan Waktu Bermain

Waktu Bermain Tingkat Konsentrasi Conditional Probability \(P(\text{Konsentrasi} \mid \text{Waktu})\)
Ringan Tinggi \(\frac{50+45}{60+60} = \frac{95}{120} \approx 0.792\)
Ringan Rendah \(\frac{10+15}{60+60} = \frac{25}{120} \approx 0.208\)
Sedang Tinggi \(\frac{35+30}{60+60} = \frac{65}{120} \approx 0.542\)
Sedang Rendah \(\frac{25+30}{60+60} = \frac{55}{120} \approx 0.458\)
Berat Tinggi \(\frac{20+15}{60+60} = \frac{35}{120} \approx 0.292\)
Berat Rendah \(\frac{40+45}{60+60} = \frac{85}{120} \approx 0.708\)

Tabel Peluang Bersyarat Tingkat Konsentrasi berdasarkan Jenis Permainan

Jenis Permainan Tingkat Konsentrasi Conditional Probability \(P(\text{Konsentrasi} \mid \text{Jenis})\)
Multiplayer Tinggi \(\frac{50+35+20}{60+60+60} = \frac{105}{180} \approx 0.583\)
Multiplayer Rendah \(\frac{10+25+40}{60+60+60} = \frac{75}{180} \approx 0.417\)
Single-Player Tinggi \(\frac{45+30+15}{60+60+60} = \frac{90}{180} = 0.50\)
Single-Player Rendah \(\frac{15+30+45}{60+60+60} = \frac{90}{180} = 0.50\)

Peluang Bersyarat Waktu Bermain berdasarkan Jenis Permainan

Jenis Permainan Waktu Bermain Conditional Probability \(P(\text{Waktu} \mid \text{Jenis})\)
Multiplayer Ringan \(\frac{60}{180} \approx 0.333\)
Multiplayer Sedang \(\frac{60}{180} \approx 0.333\)
Multiplayer Berat \(\frac{60}{180} \approx 0.333\)
Single-Player Ringan \(\frac{60}{180} \approx 0.333\)
Single-Player Sedang \(\frac{60}{180} \approx 0.333\)
Single-Player Berat \(\frac{60}{180} \approx 0.333\)

Ukuran Asosiasi

Risk Difference (Perbedaan Risiko)

Pengertian

Menurut Agresti (2013), Risk Difference adalah ukuran asosiasi yang mengukur perbedaan absolut antara peluang terjadinya suatu kejadian pada dua kelompok. Dalam konteks tabel kontingensi tiga arah, risk difference dapat digunakan untuk membandingkan perbedaan risiko suatu outcome (misalnya, tingkat konsentrasi tinggi) antar subkelompok yang berbeda (misalnya, berdasarkan kategori waktu bermain atau jenis permainan).

Risk Difference dirumuskan sebagai:
\[ RD = P(E \mid X=1) - P(E \mid X=0) \] di mana:
- \(P(E \mid X=1)\) adalah peluang kejadian (misalnya, siswa dengan tingkat konsentrasi tinggi) dalam kelompok eksposur (misalnya, waktu bermain Ringan).
- \(P(E \mid X=0)\) adalah peluang kejadian dalam kelompok non-eksposur (misalnya, waktu bermain Berat).

Jika \(RD > 0\), maka kejadian lebih sering terjadi pada kelompok eksposur.
Jika \(RD < 0\), maka kejadian lebih sering terjadi pada kelompok non-eksposur.
Jika \(RD = 0\), maka tidak ada perbedaan risiko antara kedua kelompok.


Dalam konteks ini, kita ingin membandingkan peluang memiliki tingkat konsentrasi tinggi antara masing-masing kategori Waktu Bermain berdasarkan tabel marginal. Misalnya, kita bandingkan: - Ringan vs Sedang - Ringan vs Berat - Sedang vs Berat

Jika \(P(\text{Tinggi} \mid \text{Ringan})\), \(P(\text{Tinggi} \mid \text{Sedang})\), dan \(P(\text{Tinggi} \mid \text{Berat})\) adalah peluang marginal untuk masing-masing kategori, maka Risk Difference (RD) dihitung sebagai perbedaan antara peluang tersebut. Secara umum, untuk dua kategori A dan B:

\[ RD_{A,B} = P(\text{Tinggi} \mid A) - P(\text{Tinggi} \mid B) \]

Perhitungan Menggunakan R

# Data jumlah siswa dengan tingkat konsentrasi tinggi berdasarkan kategori Waktu Bermain
data_rd <- data.frame(
  Waktu_Bermain = c("Ringan", "Sedang", "Berat"),
  Tinggi = c(95, 65, 35),  # misalnya: Ringan = 95, Sedang = 65, Berat = 35
  Total = c(120, 120, 120)
)

# Menghitung probabilitas tingkat konsentrasi tinggi untuk masing-masing kategori
data_rd <- data_rd %>%
  mutate(Prob_Tinggi = Tinggi / Total)

# Menghitung Risk Difference antar kategori
RD_Ringan_Sedang <- data_rd$Prob_Tinggi[data_rd$Waktu_Bermain == "Ringan"] -
                     data_rd$Prob_Tinggi[data_rd$Waktu_Bermain == "Sedang"]

RD_Ringan_Berat <- data_rd$Prob_Tinggi[data_rd$Waktu_Bermain == "Ringan"] -
                   data_rd$Prob_Tinggi[data_rd$Waktu_Bermain == "Berat"]

RD_Sedang_Berat <- data_rd$Prob_Tinggi[data_rd$Waktu_Bermain == "Sedang"] -
                   data_rd$Prob_Tinggi[data_rd$Waktu_Bermain == "Berat"]

# Menampilkan hasil
print(data_rd)
##   Waktu_Bermain Tinggi Total Prob_Tinggi
## 1        Ringan     95   120   0.7916667
## 2        Sedang     65   120   0.5416667
## 3         Berat     35   120   0.2916667
cat("\nRisk Difference (Ringan vs Sedang):", RD_Ringan_Sedang)
## 
## Risk Difference (Ringan vs Sedang): 0.25
cat("\nRisk Difference (Ringan vs Berat):", RD_Ringan_Berat)
## 
## Risk Difference (Ringan vs Berat): 0.5
cat("\nRisk Difference (Sedang vs Berat):", RD_Sedang_Berat)
## 
## Risk Difference (Sedang vs Berat): 0.25

Interpretasi

Berdasarkan perhitungan Risk Difference (RD) yang dilakukan untuk kategori Waktu Bermain dengan tingkat konsentrasi tinggi, diperoleh hasil sebagai berikut:

  • RD (Ringan vs Sedang): \(RD_{R,S} \approx 0.250\)
  • RD (Ringan vs Berat): \(RD_{R,B} \approx 0.500\)
  • RD (Sedang vs Berat): \(RD_{S,B} \approx 0.250\)

Interpretasi:

  • RD (Ringan vs Sedang): Selisih risiko sebesar 0.250 menunjukkan bahwa siswa yang bermain game dengan kategori Ringan memiliki probabilitas mencapai tingkat konsentrasi tinggi sekitar 25% lebih tinggi dibandingkan dengan siswa yang bermain dalam kategori Sedang.

  • RD (Ringan vs Berat): Selisih risiko sebesar 0.500 mengindikasikan bahwa siswa yang bermain dengan kategori Ringan memiliki probabilitas mencapai tingkat konsentrasi tinggi sekitar 50% lebih tinggi dibandingkan dengan siswa yang bermain dengan kategori Berat.

  • RD (Sedang vs Berat): Selisih risiko sebesar 0.250 menunjukkan bahwa siswa yang bermain dalam kategori Sedang memiliki probabilitas mencapai tingkat konsentrasi tinggi sekitar 25% lebih tinggi dibandingkan dengan siswa yang bermain dalam kategori Berat.

Secara keseluruhan, nilai Risk Difference yang lebih tinggi antara kategori Ringan dan Berat menegaskan bahwa peningkatan durasi bermain game (dari Ringan ke Berat) berasosiasi dengan penurunan yang signifikan dalam probabilitas siswa memiliki tingkat konsentrasi tinggi. Hal ini mengindikasikan bahwa durasi bermain yang tinggi (kategori Berat) memiliki efek negatif terhadap kemampuan konsentrasi siswa.

Interpretasi ini memberikan dasar untuk rekomendasi pengaturan waktu bermain yang lebih sehat, agar siswa dapat mempertahankan tingkat konsentrasi yang optimal.

Relative Risk (Risiko Relatif)

Pengertian

Menurut Agresti (2013), Relative Risk (RR) atau Rasio Risiko adalah ukuran yang membandingkan probabilitas terjadinya suatu kejadian pada dua kelompok yang berbeda. Secara matematis, jika P(E∣X=1) adalah probabilitas terjadinya kejadian E pada kelompok yang terpapar (eksposur positif) dan P(E∣X=0) adalah probabilitas kejadian E pada kelompok yang tidak terpapar (eksposur negatif), maka Relative Risk dirumuskan sebagai:

\[ RR = \frac{P(E \mid X=1)}{P(E \mid X=0)} \] di mana:
- \(P(E \mid X=1)\) adalah probabilitas siswa mencapai tingkat konsentrasi tinggi pada kategori Ringan.
- \(P(E \mid X=0)\) adalah probabilitas siswa mencapai tingkat konsentrasi tinggi pada kategori Berat. —

Perhitungan Menggunakan R
library(dplyr)

# Data jumlah siswa dengan tingkat konsentrasi tinggi berdasarkan kategori Waktu Bermain
data_rr_marginal <- data.frame(
  Waktu_Bermain = c("Ringan", "Sedang", "Berat"),
  Tinggi = c(95, 65, 35),
  Total = c(120, 120, 120)
)

# Menghitung probabilitas memiliki tingkat konsentrasi tinggi untuk masing-masing kategori
data_rr_marginal <- data_rr_marginal %>%
  mutate(Prob_Tinggi = Tinggi / Total)

# Menghitung Relative Risk antar kategori:
RR_Ringan_Sedang <- data_rr_marginal$Prob_Tinggi[data_rr_marginal$Waktu_Bermain == "Ringan"] /
                     data_rr_marginal$Prob_Tinggi[data_rr_marginal$Waktu_Bermain == "Sedang"]

RR_Ringan_Berat <- data_rr_marginal$Prob_Tinggi[data_rr_marginal$Waktu_Bermain == "Ringan"] /
                   data_rr_marginal$Prob_Tinggi[data_rr_marginal$Waktu_Bermain == "Berat"]

RR_Sedang_Berat <- data_rr_marginal$Prob_Tinggi[data_rr_marginal$Waktu_Bermain == "Sedang"] /
                   data_rr_marginal$Prob_Tinggi[data_rr_marginal$Waktu_Bermain == "Berat"]

# Menampilkan hasil
print(data_rr_marginal)
##   Waktu_Bermain Tinggi Total Prob_Tinggi
## 1        Ringan     95   120   0.7916667
## 2        Sedang     65   120   0.5416667
## 3         Berat     35   120   0.2916667
cat("\nRelative Risk (Ringan vs Sedang):", RR_Ringan_Sedang)
## 
## Relative Risk (Ringan vs Sedang): 1.461538
cat("\nRelative Risk (Ringan vs Berat):", RR_Ringan_Berat)
## 
## Relative Risk (Ringan vs Berat): 2.714286
cat("\nRelative Risk (Sedang vs Berat):", RR_Sedang_Berat)
## 
## Relative Risk (Sedang vs Berat): 1.857143

Interpretasi Hasil

Berdasarkan perhitungan Relative Risk (RR) menggunakan tabel marginal untuk kategori Waktu Bermain, diperoleh hasil sebagai berikut:

  • Ringan vs Sedang:
    RR ≈ 1.46
    Artinya, siswa yang bermain dengan durasi Ringan memiliki probabilitas mencapai tingkat konsentrasi tinggi sekitar 1.46 kali lebih tinggi dibandingkan dengan siswa yang bermain dengan durasi Sedang.

  • Ringan vs Berat:
    RR ≈ 2.71
    Artinya, siswa yang bermain dengan durasi Ringan memiliki probabilitas mencapai tingkat konsentrasi tinggi sekitar 2.71 kali lebih tinggi dibandingkan dengan siswa yang bermain dengan durasi Berat.

  • Sedang vs Berat:
    RR ≈ 1.86
    Artinya, siswa yang bermain dengan durasi Sedang memiliki probabilitas mencapai tingkat konsentrasi tinggi sekitar 1.86 kali lebih tinggi dibandingkan dengan siswa yang bermain dengan durasi Berat.

Interpretasi ini mengindikasikan bahwa:

  • Semakin pendek durasi bermain (kategori Ringan), semakin tinggi probabilitas siswa mencapai tingkat konsentrasi yang optimal.

  • Sebaliknya, durasi bermain yang lebih panjang (kategori Berat) berasosiasi dengan penurunan probabilitas mencapai tingkat konsentrasi tinggi.

Temuan ini mendukung hipotesis bahwa durasi bermain yang berlebihan memiliki dampak negatif terhadap konsentrasi siswa, sehingga pengaturan waktu bermain yang lebih sehat sangat penting untuk mendukung kinerja akademik yang optimal.

Odds Ratio (Rasio Odds)

Pengertian

Menurut Agresti (2013), Odds Ratio (OR) adalah ukuran asosiasi yang digunakan untuk mengukur perbandingan peluang (odds) terjadinya suatu kejadian antara dua kelompok. Dalam konteks ini, OR dapat dihitung untuk membandingkan odds siswa mencapai Tingkat Konsentrasi Tinggi antara dua kategori Jenis Permainan (Multiplayer vs Single-Player) dalam strata tertentu dari Waktu Bermain.

Rumus untuk menghitung OR adalah sebagai berikut:

\[ OR = \frac{\frac{P(Y \mid X_1, Z)}{1 - P(Y \mid X_1, Z)}}{\frac{P(Y \mid X_2, Z)}{1 - P(Y \mid X_2, Z)}} \]

di mana: - \(P(Y \mid X_1, Z)\) adalah probabilitas mencapai Tingkat Konsentrasi Tinggi pada kondisi \(X_1\) (misalnya, kategori Multiplayer) dan \(Z\) (misalnya, Waktu Bermain tertentu). - \(P(Y \mid X_2, Z)\) adalah probabilitas mencapai Tingkat Konsentrasi Tinggi pada kondisi \(X_2\) (misalnya, kategori Single-Player) dan \(Z\).

Jika \(OR > 1\), maka peluang mencapai Tingkat Konsentrasi Tinggi lebih besar pada kelompok \(X_1\) dibandingkan \(X_2\); jika \(OR < 1\), sebaliknya; dan \(OR = 1\) menunjukkan tidak ada perbedaan.


Perhitungan Menggunakan R

Misalkan kita memiliki data sebagai berikut: - Waktu Bermain: Ringan - Multiplayer: Tinggi = 50, Rendah = 10
- Single-Player: Tinggi = 45, Rendah = 15 - Waktu Bermain: Berat - Multiplayer: Tinggi = 20, Rendah = 40
- Single-Player: Tinggi = 15, Rendah = 45

# Membuat data frame untuk perhitungan Odds Ratio
data_or <- data.frame(
  Waktu_Bermain = rep(c("Ringan", "Ringan", "Berat", "Berat"), each = 1),
  Jenis_Permainan = c("Multiplayer", "Single-Player", "Multiplayer", "Single-Player"),
  Tinggi = c(50, 45, 20, 15),
  Rendah = c(10, 15, 40, 45)
)

# Perhitungan Odds Ratio untuk Waktu Bermain Ringan
a_ringan <- data_or$Tinggi[data_or$Waktu_Bermain == "Ringan" & data_or$Jenis_Permainan == "Multiplayer"]
b_ringan <- data_or$Rendah[data_or$Waktu_Bermain == "Ringan" & data_or$Jenis_Permainan == "Multiplayer"]
c_ringan <- data_or$Tinggi[data_or$Waktu_Bermain == "Ringan" & data_or$Jenis_Permainan == "Single-Player"]
d_ringan <- data_or$Rendah[data_or$Waktu_Bermain == "Ringan" & data_or$Jenis_Permainan == "Single-Player"]

OR_ringan <- (a_ringan / b_ringan) / (c_ringan / d_ringan)

# Perhitungan Odds Ratio untuk Waktu Bermain Berat
a_berat <- data_or$Tinggi[data_or$Waktu_Bermain == "Berat" & data_or$Jenis_Permainan == "Multiplayer"]
b_berat <- data_or$Rendah[data_or$Waktu_Bermain == "Berat" & data_or$Jenis_Permainan == "Multiplayer"]
c_berat <- data_or$Tinggi[data_or$Waktu_Bermain == "Berat" & data_or$Jenis_Permainan == "Single-Player"]
d_berat <- data_or$Rendah[data_or$Waktu_Bermain == "Berat" & data_or$Jenis_Permainan == "Single-Player"]

OR_berat <- (a_berat / b_berat) / (c_berat / d_berat)

# Menampilkan hasil
cat("Odds Ratio untuk Waktu Bermain Ringan:", OR_ringan, "\n")
## Odds Ratio untuk Waktu Bermain Ringan: 1.666667
cat("Odds Ratio untuk Waktu Bermain Berat:", OR_berat, "\n")
## Odds Ratio untuk Waktu Bermain Berat: 1.5

Interpretasi Hasil Perhitungan

Berdasarkan perhitungan Odds Ratio (OR) untuk masing-masing strata Waktu Bermain, diperoleh hasil sebagai berikut:

  • Waktu Bermain Ringan:

    • Odds pada kelompok Multiplayer:
      \(\text{Odds} = \frac{50}{10} = 5\)
    • Odds pada kelompok Single-Player:
      \(\text{Odds} = \frac{45}{15} = 3\)
    • Odds Ratio:
      \(OR \approx \frac{5}{3} \approx 1.67\)

    Interpretasi:
    Pada kategori Waktu Bermain Ringan, siswa yang bermain game dengan jenis Multiplayer memiliki peluang untuk mencapai Tingkat Konsentrasi Tinggi sekitar 1.67 kali lebih tinggi dibandingkan dengan siswa yang bermain dengan jenis Single-Player.

  • Waktu Bermain Berat:

    • Odds pada kelompok Multiplayer:
      \(\text{Odds} = \frac{20}{40} = 0.5\)
    • Odds pada kelompok Single-Player:
      \(\text{Odds} = \frac{15}{45} \approx 0.33\)
    • Odds Ratio:
      \(OR \approx \frac{0.5}{0.33} \approx 1.52\)

    Interpretasi:
    Pada kategori Waktu Bermain Berat, siswa yang bermain game dengan jenis Multiplayer memiliki peluang untuk mencapai Tingkat Konsentrasi Tinggi sekitar 1.52 kali lebih tinggi dibandingkan dengan siswa yang bermain dengan jenis Single-Player.

Kesimpulan Umum:
Nilai Odds Ratio yang lebih besar dari 1 pada kedua strata mengindikasikan bahwa, terlepas dari kategori Waktu Bermain (Ringan atau Berat), siswa yang bermain game dengan jenis Multiplayer cenderung memiliki peluang lebih tinggi untuk mencapai Tingkat Konsentrasi Tinggi dibandingkan dengan siswa yang bermain game dengan jenis Single-Player. Perbedaan odds ini memberikan dasar untuk meneliti lebih lanjut apakah jenis permainan merupakan faktor penting yang mempengaruhi konsentrasi siswa.

Pengujian Independensi dengan Metode Cochran-Mantel-Haenszel

Pengertian

Menurut Agresti (2013), uji Cochran-Mantel-Haenszel (CMH) merupakan prosedur statistik yang digunakan untuk menguji independensi antara dua variabel kategorikal dengan mengontrol efek dari variabel ketiga (confounder) melalui stratifikasi. Dalam konteks tabel kontingensi tiga arah, uji CMH menggabungkan informasi dari masing-masing strata untuk menghasilkan estimasi odds ratio bersama (common odds ratio) dan statistik uji yang mengukur apakah asosiasi antara dua variabel utama (misalnya, variabel dependen dan salah satu variabel independen) konsisten di seluruh strata. Secara formal, uji CMH digunakan untuk menguji hipotesis nol bahwa odds ratio di setiap strata sama dengan 1, yang berarti tidak ada asosiasi antara variabel yang diuji setelah mengontrol variabel confounder.

Hipotesis Uji

  • H₀ (Hipotesis Nol): Tidak ada hubungan antara Jenis Permainan dan Tingkat Konsentrasi setelah mengontrol Waktu Bermain.
    \[ H_0: \theta_{xy(k)} = 1 \quad \text{untuk setiap } k = 1, 2 \] Dimana:
    • \(\theta_{xy(k)}\) adalah Odds Ratio bersyarat antara Jenis Permainan (x) dan Tingkat Konsentrasi (y) pada strata \(k\) (dalam hal ini, \(k=1\) untuk kategori Ringan dan \(k=2\) untuk kategori Berat).
    • Jika \(\theta_{xy(k)} = 1\), maka tidak terdapat hubungan yang signifikan antara Jenis Permainan dan Tingkat Konsentrasi setelah mengontrol Waktu Bermain.
  • H₁ (Hipotesis Alternatif): Ada hubungan antara Jenis Permainan dan Tingkat Konsentrasi setelah mengontrol Waktu Bermain.
    \[ H_1: \theta_{xy(k)} \neq 1 \quad \text{untuk paling sedikit satu } k \]

Taraf Signifikansi

Kita menetapkan α = 0.05 sebagai tingkat signifikansi.


Statistik Uji dan Kriteria Keputusan

Statistik Uji

Statistik uji CMH dirumuskan sebagai:

\[ X_{CMH}^2 = \frac{\left( \sum_k (A_k - E_k) \right)^2}{\sum_k V_k} \]

di mana:

  • \(A_k\) = jumlah kasus dalam sel pertama dari tabel ke-\(k\) (misalnya, jumlah siswa dengan kombinasi Multiplayer dan Tingkat Konsentrasi Tinggi).

  • \(E_k\) = jumlah ekspektasi dalam sel pertama dari tabel ke-\(k\).

  • \(V_k\) = varians ekspektasi dalam sel pertama dari tabel ke-\(k\).

  • \(k\) = indeks strata, yaitu \(k=1\) untuk Ringan dan \(k=2\) untuk Berat.

Statistik ini mengikuti distribusi Chi-Square (\(\chi^2\)) dengan 1 derajat kebebasan (df = 1).


Kriteria Keputusan

  • Jika \(X_{CMH}^2 > \chi^2_{1, 0.05}\) (nilai kritis dari distribusi Chi-Square dengan df = 1), maka tolak \(H_0\) → Ada hubungan signifikan.
  • Jika \(X_{CMH}^2 \leq \chi^2_{1, 0.05}\), maka gagal menolak \(H_0\) → Tidak ada hubungan signifikan.

Analisis Data dan Pengujian Statistik

Perhitungan Menggunakan R

Dalam contoh ini, data disusun dalam format array 2×2×2 dengan:

  • Dimensi 1: Tingkat Konsentrasi (Tinggi, Rendah)

  • Dimensi 2: Jenis Permainan (Multiplayer, Single-Player)

  • Dimensi 3: Waktu Bermain (Ringan, Berat)

Data yang digunakan adalah:

- Kelompok Waktu Bermain Ringan:

  • Multiplayer: Tinggi = 50, Rendah = 10
  • Single-Player: Tinggi = 45, Rendah = 15

- Kelompok Waktu Bermain Berat:

  • Multiplayer: Tinggi = 20, Rendah = 40
  • Single-Player: Tinggi = 15, Rendah = 45
# Load library yang diperlukan
library(vcdExtra)
## Warning: package 'vcdExtra' was built under R version 4.3.3
## Loading required package: vcd
## Warning: package 'vcd' was built under R version 4.3.3
## Loading required package: grid
## Loading required package: gnm
## Warning: package 'gnm' was built under R version 4.3.3
## 
## Attaching package: 'vcdExtra'
## The following object is masked from 'package:dplyr':
## 
##     summarise
# Membuat data dalam format array 2×2×2
data_cmh <- array(c(50, 10, 45, 15,   # Data untuk Waktu Bermain Ringan
                    20, 40, 15, 45),  # Data untuk Waktu Bermain Berat
                  dim = c(2, 2, 2), 
                  dimnames = list("Tingkat Konsentrasi" = c("Tinggi", "Rendah"),
                                  "Jenis Permainan" = c("Multiplayer", "Single-Player"),
                                  "Waktu Bermain" = c("Ringan", "Berat")))

# Menampilkan tabel kontingensi dalam bentuk array
data_cmh
## , , Waktu Bermain = Ringan
## 
##                    Jenis Permainan
## Tingkat Konsentrasi Multiplayer Single-Player
##              Tinggi          50            45
##              Rendah          10            15
## 
## , , Waktu Bermain = Berat
## 
##                    Jenis Permainan
## Tingkat Konsentrasi Multiplayer Single-Player
##              Tinggi          20            15
##              Rendah          40            45
# Melakukan pengujian CMH
cmh_test <- mantelhaen.test(data_cmh)

# Menampilkan hasil pengujian
cmh_test
## 
##  Mantel-Haenszel chi-squared test with continuity correction
## 
## data:  data_cmh
## Mantel-Haenszel X-squared = 1.8017, df = 1, p-value = 0.1795
## alternative hypothesis: true common odds ratio is not equal to 1
## 95 percent confidence interval:
##  0.8678177 2.8455145
## sample estimates:
## common odds ratio 
##          1.571429
# Mengambil statistik uji dan p-value
cmh_stat <- cmh_test$statistic
cmh_pval <- cmh_test$p.value

cat("Statistik Uji CMH:", cmh_stat, "\n")
## Statistik Uji CMH: 1.801682
cat("P-Value:", cmh_pval, "\n")
## P-Value: 0.1795093
# Interpretasi hasil pengujian
cat("\nInterpretasi Hasil:\n")
## 
## Interpretasi Hasil:
if (cmh_pval < 0.05) {
  cat("Dengan derajat bebas = 1 dan tingkat signifikansi = 0.05, didapat p-value =", cmh_pval, 
      "\nH₀ ditolak. Artinya, terdapat hubungan signifikan antara Jenis Permainan dan Tingkat Konsentrasi setelah mengontrol Waktu Bermain.\n")
} else {
  cat("Dengan derajat bebas = 1 dan tingkat signifikansi = 0.05, didapat p-value =", cmh_pval, 
      "\nH₀ gagal ditolak. Artinya, tidak terdapat hubungan signifikan antara Jenis Permainan dan Tingkat Konsentrasi setelah mengontrol Waktu Bermain.\n")
}
## Dengan derajat bebas = 1 dan tingkat signifikansi = 0.05, didapat p-value = 0.1795093 
## H₀ gagal ditolak. Artinya, tidak terdapat hubungan signifikan antara Jenis Permainan dan Tingkat Konsentrasi setelah mengontrol Waktu Bermain.

Interpretasi Hasil Pengujian

Berdasarkan hasil pengujian menggunakan metode Cochran-Mantel-Haenszel, diperoleh:

  • Statistik Uji CMH: \(X^2_{CMH} = 1.8017\)
  • Derajat Kebebasan: 1
  • P-Value: 0.1795
  • Interval Kepercayaan 95% untuk Common Odds Ratio: \([0.8678, 2.8455]\)
  • Common Odds Ratio: 1.571429

Interpretasi:

  • Karena p-value sebesar 0.1795 lebih besar dari tingkat signifikansi \(\alpha = 0.05\), kita gagal menolak hipotesis nol (H₀).
  • Hal ini menunjukkan bahwa tidak ada bukti yang cukup untuk menyatakan adanya hubungan signifikan antara Jenis Permainan dan Tingkat Konsentrasi setelah mengontrol variabel Waktu Bermain.
  • Meskipun estimasi common odds ratio adalah 1.57, yang secara numerik mengindikasikan bahwa siswa dengan jenis permainan tertentu memiliki odds mencapai tingkat konsentrasi tinggi sekitar 1.57 kali dibandingkan dengan yang lain, interval kepercayaan yang mencakup nilai 1 (\(0.8678 \leq 1 \leq 2.8455\)) mengindikasikan bahwa perbedaan tersebut tidak signifikan secara statistik.
  • Dengan demikian, hasil pengujian ini menunjukkan bahwa, setelah mengontrol Waktu Bermain, Jenis Permainan tidak memiliki pengaruh signifikan terhadap Tingkat Konsentrasi siswa.

Kesimpulannya, data mendukung hipotesis nol, sehingga dapat disimpulkan bahwa variabel Jenis Permainan dan Tingkat Konsentrasi bersifat independen ketika faktor Waktu Bermain dikendalikan.

---

Pengujian Odds Ratio Bersama (Mantel-Haenszel)

Pengertian

Menurut Agresti (2013), Odds Ratio Bersama dengan Metode Mantel-Haenszel adalah suatu estimasi gabungan dari odds ratio yang dihitung secara terpisah dalam masing-masing strata, yang kemudian digabungkan untuk memberikan ukuran asosiasi antara dua variabel kategorikal setelah mengontrol variabel stratifikasi (confounder). Dalam konteks tabel kontingensi tiga arah, jika kita memiliki tiga variabel, misalnya A, B, dan C, di mana C merupakan variabel stratifikasi, maka Odds Ratio Bersama (Common Odds Ratio) dihitung dengan menggabungkan odds ratio dari masing-masing strata k menggunakan rumus:

\[ \hat{\theta}_{MH} = \frac{\sum_{k=1}^{K} \left( \frac{n_{11k} \, n_{22k}}{n_{..k}} \right)}{\sum_{k=1}^{K} \left( \frac{n_{12k} \, n_{21k}}{n_{..k}} \right)} \]

di mana:

  • \(n_{11k}, n_{12k}, n_{21k}, n_{22k}\) adalah jumlah kejadian pada sel-sel tabel untuk strata ke-\(k\).

  • \(n_{..k}\) adalah jumlah total pada strata ke-\(k\).

Perhitungan Standard Error Log Odds Ratio Bersama

Standard error untuk log Odds Ratio Bersama dihitung dengan rumus:

\[ \sigma^2\bigl[\log(\hat{\theta}_{MH})\bigr] = \sum_{k=1}^{K} \left( \frac{(n_{11k} + n_{12k})(n_{11k} + n_{22k})}{n_{..k}^2} \right) - \sum_{k=1}^{K} \left( \frac{(n_{12k} + n_{21k})(n_{12k} + n_{22k})}{n_{..k}^2} \right) \]

Interval Kepercayaan Log Odds Ratio Bersama

Interval kepercayaan untuk log Odds Ratio Bersama dihitung dengan:

\[ \log(\hat{\theta}_{MH}) \pm Z_{\alpha/2} \, \hat{\sigma}\bigl[\log(\hat{\theta}_{MH})\bigr] \]

di mana: - \(Z_{\alpha/2}\) adalah nilai kritis dari distribusi normal (misalnya, \(Z_{0.025} = 1.96\) untuk interval kepercayaan 95%). - \(\hat{\sigma}\bigl[\log(\hat{\theta}_{MH})\bigr]\) adalah standard error dari log odds ratio bersama.

Perhitungan Menggunakan R

Dalam contoh ini, data diorganisasikan sebagai berikut:

  • Strata “Ringan” (Waktu Bermain Ringan):

    • Multiplayer: Tingkat Konsentrasi Tinggi = 50, Rendah = 10

    • Single-Player: Tingkat Konsentrasi Tinggi = 45, Rendah = 15
      Total \(n_{..1} = 120\)

  • Strata “Berat” (Waktu Bermain Berat):

    • Multiplayer: Tingkat Konsentrasi Tinggi = 20, Rendah = 40
    • Single-Player: Tingkat Konsentrasi Tinggi = 15, Rendah = 45
      Total \(n_{..2} = 120\)
# Memuat library yang diperlukan
library(vcdExtra)

# Membuat data dalam format array 2×2×2:
# Dimensi 1: Tingkat Konsentrasi (Tinggi, Rendah)
# Dimensi 2: Jenis Permainan (Multiplayer, Single-Player)
# Dimensi 3: Waktu Bermain (Ringan, Berat)
data_cmh <- array(c(50, 10, 45, 15,    # Data untuk Waktu Bermain Ringan
                    20, 40, 15, 45),   # Data untuk Waktu Bermain Berat
                  dim = c(2, 2, 2), 
                  dimnames = list("Tingkat Konsentrasi" = c("Tinggi", "Rendah"),
                                  "Jenis Permainan" = c("Multiplayer", "Single-Player"),
                                  "Waktu Bermain" = c("Ringan", "Berat")))

# Menampilkan tabel kontingensi
print(data_cmh)
## , , Waktu Bermain = Ringan
## 
##                    Jenis Permainan
## Tingkat Konsentrasi Multiplayer Single-Player
##              Tinggi          50            45
##              Rendah          10            15
## 
## , , Waktu Bermain = Berat
## 
##                    Jenis Permainan
## Tingkat Konsentrasi Multiplayer Single-Player
##              Tinggi          20            15
##              Rendah          40            45
# Menghitung Odds Ratio Bersama menggunakan Mantel-Haenszel
cmh_test <- mantelhaen.test(data_cmh)
mh_or <- cmh_test$estimate
log_mh_or <- log(mh_or)

# Perhitungan manual standard error log OR berdasarkan rumus (untuk tiap strata):
# Strata Ringan:
# n11 = 50, n12 = 45, n21 = 10, n22 = 15, n_total = 120
term1_ringan <- ( (50 + 45) * (50 + 15) ) / (120^2)
term2_ringan <- ( (45 + 10) * (45 + 15) ) / (120^2)
diff_ringan <- term1_ringan - term2_ringan

# Strata Berat:
# n11 = 20, n12 = 15, n21 = 40, n22 = 45, n_total = 120
term1_berat <- ( (20 + 15) * (20 + 45) ) / (120^2)
term2_berat <- ( (15 + 40) * (15 + 45) ) / (120^2)
diff_berat <- term1_berat - term2_berat

# Varians log odds ratio MH
var_log_or <- diff_ringan + diff_berat
se_log_or <- sqrt(var_log_or)

# Interval kepercayaan 95% untuk log OR
z_value <- qnorm(0.975)
lower_log_or <- log_mh_or - z_value * se_log_or
upper_log_or <- log_mh_or + z_value * se_log_or

# Interval kepercayaan untuk Odds Ratio
lower_or <- exp(lower_log_or)
upper_or <- exp(upper_log_or)

cat("Odds Ratio Bersama (MH OR):", mh_or, "\n")
## Odds Ratio Bersama (MH OR): 1.571429
cat("Log Odds Ratio Bersama:", log_mh_or, "\n")
## Log Odds Ratio Bersama: 0.4519851
cat("Standar Error Log Odds Ratio Bersama:", se_log_or, "\n")
## Standar Error Log Odds Ratio Bersama: 0.3584302
cat("Interval Kepercayaan 95% untuk log OR: [", lower_log_or, ",", upper_log_or, "]\n")
## Interval Kepercayaan 95% untuk log OR: [ -0.2505252 , 1.154495 ]
cat("Interval Kepercayaan 95% untuk OR: [", lower_or, ",", upper_or, "]\n")
## Interval Kepercayaan 95% untuk OR: [ 0.7783919 , 3.172422 ]

Interpretasi Hasil Pengujian Odds Ratio Bersama (Mantel-Haenszel)

Berdasarkan hasil perhitungan menggunakan metode Mantel-Haenszel, diperoleh hasil sebagai berikut:

  • Odds Ratio Bersama (MH OR): 1.571429
    Artinya, secara gabungan, odds (perbandingan peluang) siswa mencapai tingkat konsentrasi tinggi pada satu kelompok (misalnya, jenis permainan tertentu) adalah sekitar 1.57 kali dibandingkan dengan kelompok lainnya, setelah mengontrol variabel Waktu Bermain.

  • Log Odds Ratio Bersama: 0.4519851
    Nilai log OR ini merupakan transformasi logaritmik dari Odds Ratio Bersama.

  • Standar Error Log Odds Ratio Bersama: 0.3584302
    Standar error ini mengukur variabilitas dari estimasi log OR.

  • Interval Kepercayaan 95% untuk log OR: [ -0.2505252 , 1.154495 ]
    Jika kita mengesponensiasikan interval ini, kita mendapatkan:

  • Interval Kepercayaan 95% untuk Odds Ratio: [ 0.7783919 , 3.172422 ]

Interpretasi:

  • Meskipun point estimate Odds Ratio Bersama adalah 1.57, yang menunjukkan kecenderungan bahwa odds siswa mencapai tingkat konsentrasi tinggi pada kelompok tertentu adalah 1.57 kali lebih tinggi, interval kepercayaan untuk OR mencakup nilai 1 (interval: 0.78 hingga 3.17).

  • Hal ini berarti bahwa secara statistik, pada tingkat signifikansi 5%, tidak ada bukti yang cukup untuk menyatakan bahwa perbedaan odds antara kelompok tersebut signifikan.

  • Dengan kata lain, meskipun ada kecenderungan perbedaan (point estimate > 1), variasi dalam data cukup besar sehingga kita tidak dapat menyimpulkan perbedaan yang signifikan secara statistik antara kelompok yang dibandingkan.

Kesimpulannya, hasil ini menunjukkan bahwa setelah mengontrol variabel Waktu Bermain, perbedaan dalam odds mencapai tingkat konsentrasi tinggi antara kelompok yang dibandingkan (misalnya, antara jenis permainan yang berbeda) tidak signifikan secara statistik pada tingkat kepercayaan 95%.

Pengujian Homogenitas Odds Ratio (Breslow-Day)

Pengertian

Metode Breslow-Day digunakan untuk menguji apakah Odds Ratio yang dihitung pada berbagai strata (misalnya, berdasarkan Waktu Bermain) adalah homogen atau tidak. Pengujian ini menguji apakah hubungan antara dua variabel (misalnya, Jenis Permainan dan Tingkat Konsentrasi) bersifat konsisten di seluruh strata. Jika odds ratio di setiap strata sama, maka hubungan tersebut dianggap homogen.


Hipotesis Pengujian

  • Hipotesis Nol (H₀): Odds Ratio pada setiap strata adalah homogen, yaitu:

    \[ H_0 : \theta_{xy(1)} = \theta_{xy(2)} = \dots = \theta_{xy(K)} \]

    Dimana:

    • \(\theta_{xy(k)}\) adalah Odds Ratio pada strata ke-\(k\) (di sini, \(k\) merupakan kategori Waktu Bermain misalnya: Ringan dan Berat).
  • Hipotesis Alternatif (H₁): Setidaknya ada satu strata yang memiliki Odds Ratio berbeda, yang menunjukkan bahwa Odds Ratio tidak homogen.

    \[ H_1 : \text{Paling sedikit satu pernyataan } \theta_{xy(k)} = \theta_{xy(k+1)} \text{ tidak terpenuhi.} \]


Statistik Uji Breslow-Day

Statistik uji Breslow-Day (BD) digunakan untuk menguji homogenitas Odds Ratio di seluruh strata. Rumus statistik uji Breslow-Day adalah:

\[ BD = \sum_{k=1}^{K} \frac{(n_{ijk} - \hat{\mu}_{ijk})^2}{\hat{\mu}_{ijk}} \]

di mana: - \(n_{ijk}\) adalah jumlah kejadian pada setiap sel pada strata ke-\(k\). - \(\hat{\mu}_{ijk}\) adalah nilai ekspektasi untuk sel pada strata ke-\(k\). - \(K\) adalah jumlah strata.

Statistik uji BD mengikuti distribusi Chi-Square dengan derajat kebebasan \(df = K - 1\).

  • Kriteria Keputusan:
    • Tolak \(H_0\) jika \(BD > \chi^2_{K-1, \alpha}\) atau jika p-value < \(\alpha\).
    • Jika \(BD \leq \chi^2_{K-1, \alpha}\) atau p-value\(\alpha\), maka gagal menolak \(H_0\).

Perhitungan Uji Homogenitas Odds Ratio Menggunakan R

# Memuat library yang diperlukan
library(vcdExtra)

# Membuat data dalam format array 2×2×2 untuk konteks awal:
# Dimensi 1: Tingkat Konsentrasi (Tinggi, Rendah)
# Dimensi 2: Jenis Permainan (Multiplayer, Single-Player)
# Dimensi 3: Waktu Bermain (Ringan, Berat)
data_cmh <- array(c(50, 10, 45, 15,    # Data untuk Waktu Bermain Ringan
                    20, 40, 15, 45),   # Data untuk Waktu Bermain Berat
                  dim = c(2, 2, 2), 
                  dimnames = list("Tingkat Konsentrasi" = c("Tinggi", "Rendah"),
                                  "Jenis Permainan" = c("Multiplayer", "Single-Player"),
                                  "Waktu Bermain" = c("Ringan", "Berat")))

# Menampilkan tabel kontingensi
print(data_cmh)
## , , Waktu Bermain = Ringan
## 
##                    Jenis Permainan
## Tingkat Konsentrasi Multiplayer Single-Player
##              Tinggi          50            45
##              Rendah          10            15
## 
## , , Waktu Bermain = Berat
## 
##                    Jenis Permainan
## Tingkat Konsentrasi Multiplayer Single-Player
##              Tinggi          20            15
##              Rendah          40            45
# Menghitung nilai ekspektasi dan statistik Breslow-Day secara manual
# Kita menghitung expected values untuk setiap strata secara terpisah

# Inisialisasi array untuk menyimpan nilai ekspektasi
expected_values <- array(NA, dim = dim(data_cmh),
                         dimnames = dimnames(data_cmh))

# Loop untuk tiap strata (Waktu Bermain)
for (k in 1:dim(data_cmh)[3]) {
  # Tabel 2x2 untuk strata k
  tab <- data_cmh[,,k]
  # Total pada strata k
  total_k <- sum(tab)
  # Total baris dan kolom
  row_tot <- rowSums(tab)
  col_tot <- colSums(tab)
  # Nilai ekspektasi untuk tiap sel: (total baris * total kolom) / total pada strata k
  expected_values[,,k] <- outer(row_tot, col_tot, FUN = function(r, c) r * c / total_k)
}

# Menghitung statistik Breslow-Day
BD_stat <- sum((data_cmh - expected_values)^2 / expected_values)

cat("Statistik uji Breslow-Day (BD):", BD_stat, "\n")
## Statistik uji Breslow-Day (BD): 2.271561
# Derajat kebebasan: df = K - 1, di sini K = jumlah strata (Waktu Bermain)
df <- dim(data_cmh)[3] - 1
cat("Derajat kebebasan (df):", df, "\n")
## Derajat kebebasan (df): 1
# Menghitung p-value berdasarkan distribusi Chi-Square
p_value_breslow <- 1 - pchisq(BD_stat, df)
cat("P-value dari uji homogenitas Breslow-Day:", p_value_breslow, "\n")
## P-value dari uji homogenitas Breslow-Day: 0.1317671
# Keputusan berdasarkan p-value
if (p_value_breslow < 0.05) {
  cat("Karena p-value <", p_value_breslow, " < 0.05, H₀ DITOLAK.\n")
  cat("Artinya, terdapat perbedaan Odds Ratio antara strata (Waktu Bermain) sehingga Odds Ratio tidak homogen.\n")
} else {
  cat("Karena p-value >=", p_value_breslow, "≥ 0.05, H₀ GAGAL DITOLAK.\n")
  cat("Artinya, Odds Ratio di seluruh strata homogen, tidak ada perbedaan signifikan.\n")
}
## Karena p-value >= 0.1317671 ≥ 0.05, H₀ GAGAL DITOLAK.
## Artinya, Odds Ratio di seluruh strata homogen, tidak ada perbedaan signifikan.

Interpretasi Hasil Uji Homogenitas Odds Ratio (Breslow-Day)

Berdasarkan perhitungan uji homogenitas menggunakan metode Breslow-Day pada data:

  • Data Tabel Kontingensi (untuk masing-masing strata Waktu Bermain):
    • Waktu Bermain Ringan:
      • Multiplayer: Tinggi = 50, Rendah = 10
      • Single-Player: Tinggi = 45, Rendah = 15
    • Waktu Bermain Berat:
      • Multiplayer: Tinggi = 20, Rendah = 40
      • Single-Player: Tinggi = 15, Rendah = 45

Perhitungan menunjukkan:

  • Statistik Uji Breslow-Day (BD): 2.271561
  • Derajat Kebebasan (df): 1
  • P-value: 0.1317671

Interpretasi:

Karena nilai p-value sebesar 0.1318 (p-value ≥ 0.05) lebih besar dari tingkat signifikansi α = 0.05, maka:

  • Hipotesis nol (H₀) gagal ditolak.
  • Artinya, tidak terdapat perbedaan yang signifikan dalam Odds Ratio di seluruh strata Waktu Bermain (misalnya, antara kategori Ringan dan Berat).

Dengan demikian, dapat disimpulkan bahwa Odds Ratio antara Jenis Permainan dan Tingkat Konsentrasi adalah homogen di seluruh kategori Waktu Bermain. Ini menunjukkan bahwa pengaruh jenis permainan terhadap tingkat konsentrasi tidak berubah signifikan antara siswa yang bermain game dengan durasi yang berbeda (Ringan vs. Berat).

Kesimpulannya, berdasarkan hasil uji homogenitas Breslow-Day, hubungan antara Jenis Permainan dan Tingkat Konsentrasi bersifat konsisten di semua strata Waktu Bermain.

GLM (Generalized Linear Models)

Model Linear Umum (GLM) adalah kelas model statistik yang memperluas regresi linear tradisional untuk menangani berbagai jenis variabel respons, termasuk yang tidak berdistribusi normal. GLM sangat berguna untuk memodelkan data kategorikal, data hitungan, dan jenis data lain yang tidak memenuhi asumsi regresi kuadrat terkecil biasa.

GLM terdiri dari tiga komponen utama:

  • Komponen Acak: Menentukan distribusi probabilitas dari variabel respons, yang harus termasuk dalam keluarga eksponensial, seperti distribusi normal, binomial, Poisson, dan gamma.
  • Komponen Sistematis: Mendefinisikan prediktor linear, yaitu kombinasi linear dari variabel penjelas, dinyatakan sebagai \(\eta = X\beta\), di mana \(X\) adalah matriks desain dan \(\beta\) adalah vektor parameter.
  • Fungsi link: Menghubungkan nilai harapan variabel respons dengan prediktor linear. Fungsi link \(g\) memenuhi \(g(\mu) = \eta\), di mana \(\mu = E(Y)\).

GLM menyediakan kerangka kerja terpadu untuk menganalisis berbagai jenis data dan telah menjadi landasan analisis statistik modern. Dalam praktiknya, GLM mudah diimplementasikan menggunakan perangkat lunak statistik seperti R dengan fungsi seperti glm().

Keluarga Eksponensial

Keluarga eksponensial adalah kelas distribusi probabilitas yang memiliki bentuk umum, menjadikannya sangat cocok untuk pemodelan statistik, terutama dalam kerangka GLM.

Sebuah distribusi probabilitas termasuk dalam keluarga eksponensial jika fungsi densitas probabilitas (atau fungsi massa probabilitas) dapat dinyatakan sebagai:

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

di mana: - \(\theta\) adalah parameter alami, - \(\phi\) adalah parameter dispersi, - \(b(\theta)\) adalah fungsi yang berkaitan dengan rata-rata dan varians distribusi, - \(a(\phi)\) adalah fungsi dari parameter dispersi, - \(c(y, \phi)\) adalah fungsi yang bergantung pada \(y\) dan \(\phi\).

Banyak distribusi umum termasuk dalam keluarga eksponensial, seperti:

  • Distribusi Normal: Digunakan untuk data kontinu dengan varians konstan.
  • Distribusi Binomial: Digunakan untuk data biner atau proporsi.
  • Distribusi Poisson: Digunakan untuk data hitungan.
  • Distribusi Gamma: Digunakan untuk data kontinu dengan distribusi miring.

Sebagai contoh, distribusi binomial dapat ditulis dalam bentuk keluarga eksponensial. Untuk variabel acak binomial \(Y \sim \text{Binomial}(n, \pi)\), fungsi massa probabilitasnya adalah:

\[ P(Y = y) = \binom{n}{y} \pi^y (1 - \pi)^{n - y} \]

Ini dapat ditulis ulang sebagai:

\[ P(Y = y) = \exp\left\{ y \log\left(\frac{\pi}{1 - \pi}\right) + n \log(1 - \pi) + \log\binom{n}{y} \right\} \]

Di sini, \(\theta = \log\left(\frac{\pi}{1 - \pi}\right)\), \(b(\theta) = -n \log(1 - \pi)\), \(a(\phi) = 1\), dan \(c(y, \phi) = \log\binom{n}{y}\).

Demikian pula, distribusi Poisson dengan rata-rata \(\lambda\) dapat dinyatakan sebagai:

\[ P(Y = y) = \frac{e^{-\lambda} \lambda^y}{y!} \]

Yang menjadi:

\[ P(Y = y) = \exp\left\{ y \log \lambda - \lambda - \log y! \right\} \]

Dengan \(\theta = \log \lambda\), \(b(\theta) = e^{\theta}\), \(a(\phi) = 1\), dan \(c(y, \phi) = -\log y!\).

Keluarga eksponensial sangat penting untuk GLM karena memungkinkan pendekatan yang konsisten untuk estimasi dan inferensi di berbagai jenis variabel respons.

Regresi Logistik

Regresi logistik adalah jenis GLM yang digunakan untuk memodelkan variabel respons biner. Ini banyak diterapkan di bidang seperti kedokteran, ilmu sosial, dan pembelajaran mesin untuk memprediksi probabilitas terjadinya suatu peristiwa berdasarkan satu atau lebih variabel prediktor.

Di R, regresi logistik diimplementasikan menggunakan fungsi glm() dengan family = binomial.

Formulasi Model

Dalam regresi logistik, variabel respons \(Y\) bersifat biner, mengambil nilai 0 atau 1, di mana 1 biasanya mewakili terjadinya peristiwa yang diminati. Probabilitas bahwa \(Y = 1\) diberikan prediktor \(X\) dinotasikan sebagai \(\pi(X) = P(Y = 1 | X)\).

Model regresi logistik menggunakan fungsi link logit, yaitu logaritma natural dari odds:

\[ \text{logit}(\pi) = \log\left(\frac{\pi}{1 - \pi}\right) = X\beta \]

di mana \(X\) adalah matriks prediktor, dan \(\beta\) adalah vektor koefisien.

Invers dari fungsi logit adalah fungsi logistik, yang memberikan probabilitas:

\[ \pi(X) = \frac{\exp(X\beta)}{1 + \exp(X\beta)} = \frac{1}{1 + \exp(-X\beta)} \]

Kurva berbentuk S ini memastikan bahwa probabilitas yang diprediksi selalu berada antara 0 dan 1.

Estimasi

Parameter \(\beta\) diestimasi menggunakan Maximum Likelihood Estimation (Maximum Likelihood Estimation - MLE). Fungsi kemungkinan untuk sampel dari \(n\) pengamatan independen adalah:

\[ L(\beta) = \prod_{i=1}^n \pi(x_i)^{y_i} (1 - \pi(x_i))^{1 - y_i} \]

Mengambil logaritma memberikan Log-likelihood:

\[ \ell(\beta) = \sum_{i=1}^n \left[ y_i \log \pi(x_i) + (1 - y_i) \log (1 - \pi(x_i)) \right] \]

MLE \(\hat{\beta}\) ditemukan dengan memaksimalkan \(\ell(\beta)\), biasanya menggunakan metode optimasi numerik seperti algoritma Newton-Raphson.

Interpretasi

Koefisien \(\beta\) dalam regresi logistik mewakili perubahan dalam log-odds variabel respons untuk peningkatan satu unit dalam prediktor, dengan prediktor lain tetap konstan. Secara khusus, untuk prediktor \(x_j\), rasio odds adalah \(\exp(\beta_j)\), yang menunjukkan bagaimana odds peristiwa berubah dengan peningkatan satu unit dalam \(x_j\).

Contoh di R

Mari kita pertimbangkan contoh di mana kita memodelkan probabilitas lulus ujian berdasarkan jumlah jam belajar.

Pertama, kita simulasikan beberapa data:

set.seed(123)
n <- 100
hours <- runif(n, 0, 10)
X <- cbind(1, hours)
beta <- c(-2, 0.5)
logit_pi <- X %*% beta
pi <- 1 / (1 + exp(-logit_pi))
y <- rbinom(n, 1, pi)
data <- data.frame(y = y, hours = hours)

Sekarang, kita sesuaikan model regresi logistik menggunakan glm():

model <- glm(y ~ hours, family = binomial, data = data)
summary(model)
## 
## Call:
## glm(formula = y ~ hours, family = binomial, data = data)
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept)  -2.0006     0.5346  -3.742 0.000182 ***
## hours         0.5867     0.1194   4.915 8.86e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 130.684  on 99  degrees of freedom
## Residual deviance:  91.716  on 98  degrees of freedom
## AIC: 95.716
## 
## Number of Fisher Scoring iterations: 5

Output akan memberikan koefisien yang diestimasi, kesalahan standar, nilai-z, dan nilai-p.

Untuk memprediksi probabilitas:

newdata <- data.frame(hours = seq(0, 10, by = 0.1))
predicted_pi <- predict(model, newdata, type = "response")
plot(newdata$hours, predicted_pi, type = "l", xlab = "Jam Belajar", ylab = "Probabilitas Lulus")

Ini akan menunjukkan kurva berbentuk S dari probabilitas yang diprediksi.

Regresi Poisson

Regresi Poisson adalah jenis GLM yang digunakan untuk memodelkan data hitungan, di mana variabel respons mewakili jumlah kali suatu peristiwa terjadi dalam interval tetap. Ini umum digunakan di bidang seperti epidemiologi, asuransi, dan ekologi.

Di R, regresi Poisson diimplementasikan menggunakan fungsi glm() dengan family = poisson.

Formulasi Model

Dalam regresi Poisson, variabel respons \(Y\) mengikuti distribusi Poisson dengan rata-rata \(\lambda\), di mana \(\lambda\) dimodelkan sebagai fungsi dari prediktor.

Fungsi massa probabilitas dari distribusi Poisson adalah:

\[ P(Y = y) = \frac{e^{-\lambda} \lambda^y}{y!}, \quad y = 0, 1, 2, \ldots \]

Fungsi link kanonik untuk distribusi Poisson adalah logaritma natural:

\[ \log(\lambda) = X\beta \]

Jadi, jumlah yang diharapkan adalah:

\[ \lambda = \exp(X\beta) \]

Estimasi

Mirip dengan regresi logistik, parameter \(\beta\) diestimasi menggunakan MLE. Log-likelihood untuk sampel dari \(n\) pengamatan independen adalah:

\[ \ell(\beta) = \sum_{i=1}^n \left[ y_i \log \lambda_i - \lambda_i - \log(y_i!) \right] \]

di mana \(\lambda_i = \exp(x_i^T \beta)\).

Metode numerik seperti Newton-Raphson digunakan untuk menemukan MLE.

Interpretasi

Dalam regresi Poisson, koefisien \(\beta\) mewakili perubahan dalam log dari jumlah yang diharapkan untuk peningkatan satu unit dalam prediktor. Secara khusus, \(\exp(\beta_j)\) memberikan perubahan multiplikatif dalam jumlah yang diharapkan untuk peningkatan satu unit dalam \(x_j\), dengan prediktor lain tetap konstan.

Contoh di R

Mari kita modelkan jumlah penghargaan yang diterima oleh siswa berdasarkan skor matematika mereka.

Pertama, simulasikan beberapa data:

set.seed(123)
n <- 100
math_score <- rnorm(n, 50, 10)
X <- cbind(1, math_score)
beta <- c(0.5, 0.02)
lambda <- exp(X %*% beta)
y <- rpois(n, lambda)
data <- data.frame(y = y, math_score = math_score)

Sesuaikan model regresi Poisson:

model <- glm(y ~ math_score, family = poisson, data = data)
summary(model)
## 
## Call:
## glm(formula = y ~ math_score, family = poisson, data = data)
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept) 0.287280   0.276942   1.037      0.3    
## math_score  0.023498   0.005164   4.551 5.35e-06 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for poisson family taken to be 1)
## 
##     Null deviance: 123.85  on 99  degrees of freedom
## Residual deviance: 103.18  on 98  degrees of freedom
## AIC: 430.08
## 
## Number of Fisher Scoring iterations: 4

Ringkasan akan memberikan koefisien yang diestimasi, kesalahan standar, nilai-z, dan nilai-p.

Untuk memvisualisasikan hubungan:

newdata <- data.frame(math_score = seq(30, 70, by = 1))
predicted_lambda <- predict(model, newdata, type = "response")
plot(newdata$math_score, predicted_lambda, type = "l", xlab = "Skor Matematika", ylab = "Jumlah Penghargaan yang Diharapkan")

Ini akan menunjukkan bagaimana jumlah penghargaan yang diharapkan meningkat dengan skor matematika.

Inferensi GLM (Generalized Linear Model)

Model Linear Umum (GLM) adalah kerangka statistik yang fleksibel untuk memodelkan data dengan distribusi dari keluarga eksponensial, seperti binomial, Poisson, dan normal. Inferensi dalam GLM melibatkan estimasi parameter, pengujian hipotesis, dan evaluasi kecocokan model. Berikut adalah penjelasan rinci dengan sintaks LaTeX yang telah diperbaiki agar dapat dirender dengan benar dalam R Markdown.

Mencari Ekspektasi dan Varians dalam GLM

Dalam GLM, variabel respons \(Y\) mengikuti distribusi dari keluarga eksponensial. Ini memungkinkan kita untuk menurunkan ekspektasi dan varians secara sistematis berdasarkan sifat distribusi tersebut.

Ekspektasi dalam GLM

Fungsi densitas probabilitas (atau fungsi massa probabilitas) untuk distribusi keluarga eksponensial dapat ditulis sebagai:

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

Di mana:

  • \(\theta\): Parameter alami.
  • \(\phi\): Parameter dispersi.
  • \(b(\theta)\): Fungsi yang menentukan hubungan dengan rata-rata.
  • \(a(\phi)\), \(c(y, \phi)\): Fungsi tambahan yang bergantung pada distribusi.

Ekspektasi dari \(Y\), yaitu \(\mu = E(Y)\), diperoleh dari turunan pertama fungsi \(b(\theta)\):

\[ \mu = E(Y) = b'(\theta) \]

Varians dalam GLM

Varians dari \(Y\) diturunkan dari turunan kedua fungsi \(b(\theta)\):

\[ \text{Var}(Y) = a(\phi) \cdot b''(\theta) \]

Di mana \(b''(\theta)\) adalah turunan kedua dari \(b(\theta)\) terhadap \(\theta\). Varians sering kali bergantung pada rata-rata \(\mu\) melalui hubungan ini.

Contoh: Distribusi Binomial

Untuk \(Y \sim \text{Binomial}(n, \pi)\):

  • \(\theta = \log\left(\frac{\pi}{1 - \pi}\right)\)
  • \(b(\theta) = n \log(1 + e^\theta)\)
  • \(a(\phi) = 1\)

Maka:

  • \(\mu = b'(\theta) = n \cdot \frac{e^\theta}{1 + e^\theta} = n \pi\)
  • \(\text{Var}(Y) = b''(\theta) = n \cdot \frac{e^\theta}{(1 + e^\theta)^2} = n \pi (1 - \pi)\)

Contoh: Distribusi Poisson

Untuk \(Y \sim \text{Poisson}(\lambda)\):

  • \(\theta = \log(\lambda)\)
  • \(b(\theta) = e^\theta\)
  • \(a(\phi) = 1\)

Maka:

  • \(\mu = b'(\theta) = e^\theta = \lambda\)
  • \(\text{Var}(Y) = b''(\theta) = e^\theta = \lambda\)

Dengan demikian, ekspektasi dan varians dalam GLM dapat dihitung berdasarkan parameter alami dan fungsi \(b(\theta)\) yang spesifik untuk setiap distribusi.

Metode Penaksiran Parameter

Parameter dalam GLM, khususnya koefisien \(\beta\), diestimasi menggunakan Maximum Likelihood Estimation (MLE), yang kemudian dioptimalkan dengan metode numerik seperti Newton-Raphson atau Iteratively Reweighted Least Squares (IRLS).

Maximum Likelihood Estimation (MLE)

Fungsi densitas untuk \(n\) pengamatan independen adalah:

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

Log-likelihood menjadi:

\[ \ell(\beta) = \sum_{i=1}^n \log f(y_i; \theta_i, \phi) \]

Di mana \(\theta_i\) bergantung pada \(\beta\) melalui fungsi tautan \(g(\mu_i) = X_i \beta\). MLE \(\hat{\beta}\) diperoleh dengan memaksimalkan \(\ell(\beta)\).

Algoritma Newton-Raphson

Metode ini memperbarui estimasi parameter secara iteratif:

\[ \beta^{(t+1)} = \beta^{(t)} - \left[ \frac{\partial^2 \ell}{\partial \beta \partial \beta^T} \right]^{-1} \frac{\partial \ell}{\partial \beta} \]

Di mana:

  • \(\frac{\partial \ell}{\partial \beta}\): Gradien (turunan pertama).
  • \(\frac{\partial^2 \ell}{\partial \beta \partial \beta^T}\): Matriks Hessian (turunan kedua).

Iteratively Reweighted Least Squares (IRLS)

IRLS mengubah masalah MLE menjadi regresi tertimbang berulang:

  1. Inisialisasi \(\beta^{(0)}\).
  2. Hitung \(\eta_i^{(t)} = X_i \beta^{(t)}\) dan \(\mu_i^{(t)} = g^{-1}(\eta_i^{(t)})\).
  3. Tentukan bobot \(w_i^{(t)} = \left[ \frac{\partial \mu_i}{\partial \eta_i} \right]^2 / \text{Var}(Y_i)\).
  4. Hitung respons yang disesuaikan \(z_i^{(t)} = \eta_i^{(t)} + (y_i - \mu_i^{(t)}) \cdot \frac{\partial \eta_i}{\partial \mu_i}\).
  5. Perbarui \(\beta^{(t+1)} = (X^T W^{(t)} X)^{-1} X^T W^{(t)} z^{(t)}\), dengan \(W^{(t)}\) matriks diagonal bobot.

Proses ini diulang hingga konvergensi.

Diagnostik Model GLM

Diagnostik model bertujuan untuk mengevaluasi kecocokan model dan mendeteksi masalah seperti overdispersi atau outlier.

Statistik Deviansi

Deviansi mengukur perbedaan antara model yang dipasang dan model jenuh:

\[ D = 2 \left[ \ell(\hat{\beta}_{\text{saturated}}) - \ell(\hat{\beta}) \right] \]

Contoh:

  • Binomial: \(D = 2 \sum_{i=1}^n \left[ y_i \log\left(\frac{y_i}{\hat{\mu}_i}\right) + (n_i - y_i) \log\left(\frac{n_i - y_i}{n_i - \hat{\mu}_i}\right) \right]\)
  • Poisson: \(D = 2 \sum_{i=1}^n \left[ y_i \log\left(\frac{y_i}{\hat{\mu}_i}\right) - (y_i - \hat{\mu}_i) \right]\)

Deviansi kecil menunjukkan kecocokan baik, dan dapat digunakan untuk pengujian chi-square pada sampel besar.

Residual

Residual membantu mendeteksi pengamatan yang tidak sesuai:

  • Residual Pearson: \(r_i^P = \frac{y_i - \hat{\mu}_i}{\sqrt{\text{Var}(\hat{\mu}_i)}}\)
  • Residual Deviansi: \(r_i^D = \text{sign}(y_i - \hat{\mu}_i) \sqrt{d_i}\), dengan \(d_i\) kontribusi deviansi.

Plot residual dapat mengungkap pola yang menunjukkan pelanggaran asumsi.

Overdispersi

Overdispersi terjadi jika varians data lebih besar dari yang diharapkan (misalnya, \(\text{Var}(Y) > \lambda\) pada Poisson). Dapat dideteksi jika rasio deviansi terhadap derajat bebas jauh lebih besar dari 1. Model alternatif seperti binomial negatif dapat digunakan.

Detail Estimasi dan Inferensi Regresi Logistik

Regresi logistik memodelkan data biner dengan distribusi binomial.

Estimasi Parameter

Fungsi tautan logit:

\[ \log\left(\frac{\pi}{1 - \pi}\right) = X\beta \]

Log-likelihood:

\[ \ell(\beta) = \sum_{i=1}^n \left[ y_i \log \pi_i + (1 - y_i) \log (1 - \pi_i) \right] \]

dengan \(\pi_i = \frac{\exp(X_i \beta)}{1 + \exp(X_i \beta)}\). Estimasi \(\hat{\beta}\) diperoleh via MLE.

Inferensi

Metode inferensi:

  • Uji Wald: \(z = \frac{\hat{\beta}_j}{\text{SE}(\hat{\beta}_j)}\), mengikuti distribusi normal standar.
  • Uji Rasio Kemungkinan: Membandingkan model penuh dan tereduksi.
  • Interval Kepercayaan: \(\hat{\beta}_j \pm z_{\alpha/2} \text{SE}(\hat{\beta}_j)\).

Contoh di R

smoking_data <- data.frame(
  Smoking = c(rep(1, 688 + 650), rep(0, 21 + 59)),
  LungCancer = c(rep(1, 688), rep(0, 650), rep(1, 21), rep(0, 59))
)
model_logistic <- glm(LungCancer ~ Smoking, data = smoking_data, family = binomial)
summary(model_logistic)
## 
## Call:
## glm(formula = LungCancer ~ Smoking, family = binomial, data = smoking_data)
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept)  -1.0330     0.2541  -4.065 4.80e-05 ***
## Smoking       1.0898     0.2599   4.193 2.75e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1965.8  on 1417  degrees of freedom
## Residual deviance: 1945.9  on 1416  degrees of freedom
## AIC: 1949.9
## 
## Number of Fisher Scoring iterations: 4

Detail Estimasi dan Inferensi Regresi Poisson

Regresi Poisson memodelkan data hitungan dengan distribusi Poisson.

Estimasi Parameter

Fungsi tautan log:

\[ \log(\lambda) = X\beta \]

Log-likelihood:

\[ \ell(\beta) = \sum_{i=1}^n \left[ y_i \log \lambda_i - \lambda_i - \log(y_i!) \right] \]

dengan \(\lambda_i = \exp(X_i \beta)\). Estimasi \(\hat{\beta}\) diperoleh via MLE.

Inferensi

Metode inferensi serupa dengan regresi logistik:

  • Uji Wald: \(z = \frac{\hat{\beta}_j}{\text{SE}(\hat{\beta}_j)}\)
  • Uji Rasio Kemungkinan: Membandingkan deviansi.
  • Interval Kepercayaan: \(\hat{\beta}_j \pm z_{\alpha/2} \text{SE}(\hat{\beta}_j)\).

Contoh di R

data(warpbreaks)
model_poisson <- glm(breaks ~ wool + tension, data = warpbreaks, family = poisson)
summary(model_poisson)
## 
## Call:
## glm(formula = breaks ~ wool + tension, family = poisson, data = warpbreaks)
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept)  3.69196    0.04541  81.302  < 2e-16 ***
## woolB       -0.20599    0.05157  -3.994 6.49e-05 ***
## tensionM    -0.32132    0.06027  -5.332 9.73e-08 ***
## tensionH    -0.51849    0.06396  -8.107 5.21e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for poisson family taken to be 1)
## 
##     Null deviance: 297.37  on 53  degrees of freedom
## Residual deviance: 210.39  on 50  degrees of freedom
## AIC: 493.06
## 
## Number of Fisher Scoring iterations: 4

Regresi Logistik dengan Prediktor Nominal, Ordinal, dan Rasio

Regresi Logistik adalah teknik pemodelan statistik untuk memprediksi probabilitas terjadinya suatu kejadian biner (misal: “ya/tidak”, “sukses/gagal”) berdasarkan satu atau lebih variabel prediktor. Model ini menghubungkan log-odds (logaritma peluang) dari probabilitas kejadian dengan kombinasi linier predictor:

\[ \log\left(\frac{P(Y=1)}{1 - P(Y=1)}\right) = \beta_0 + \sum_i \beta_i X_i \]

di mana \(X_i\) dapat berupa variabel nominal, ordinal, atau rasio, dan \(\beta_i\) adalah koefisien yang diestimasi. Model ini sangat berguna dalam kasus klasifikasi biner dan sering digunakan dalam bidang kesehatan, pemasaran, dan ilmu sosial.

Prediktor Nominal

  • Definisi: Variabel kategori tanpa urutan (misal: warna—merah, hijau, biru; jenis kelamin—laki/perempuan).

  • Penanganan dalam model:

    • Dummy coding (Indicator coding): Untuk suatu variabel nominal dengan \(k\) kategori, dibuat \(k - 1\) variabel dummy:

    \[ D_j = \begin{cases} 1, & \text{jika kategori } = j, \\ 0, & \text{lainnya}, \end{cases} \]

    dan satu kategori dijadikan “referensi” (baseline) agar model teridentifikasi.

    • Koefisien \(\beta_j\): Mengukur perubahan log-odds relatif terhadap kategori referensi.

Prediktor Ordinal

  • Definisi: Variabel kategori dengan urutan alami (misal: skala kepuasan—rendah, sedang, tinggi).

  • Pendekatan:

    1. Treat as nominal: Menggunakan dummy coding seperti pada variabel nominal—tidak mempertimbangkan jarak antar tingkat.
    2. Treat as continuous: Mengasumsikan jarak antar tingkat sama, langsung memasukkan skor ordinal (misal 1–5) sebagai variabel numerik, sehingga satu koefisien \(\beta\) mewakili efek per kenaikan satu tingkatan.
    3. Contrast coding (misal efek linear): Memecahnya menjadi beberapa variabel kontras yang menekankan pola linear atau non-linear antar tingkatan.

Prediktor Rasio

  • Definisi: Variabel numerik kontinu dengan nol absolut dan jarak antar nilai bermakna (misal: pendapatan dalam rupiah, usia dalam tahun, berat badan dalam kilogram).

  • Penanganan:

    • Langsung dimasukkan ke dalam model sebagai \(X\).
    • Koefisien \(\beta\) mengukur perubahan log-odds untuk setiap satu satuan kenaikan \(X\).
    • Jika distribusi sangat miring, dapat dipertimbangkan transformasi (misal logaritma) agar hubungan dengan log-odds menjadi lebih linear.

Simulasi Data

Akan disimulasikan data untuk 1000 pasien dengan variabel berikut:

  • treatment_type: Nominal (obat, terapi, operasi)
  • severity_level: Ordinal (ringan, sedang, berat)
  • treatment_days: Rasio (jumlah hari perawatan)
  • recovered: Respons biner (0 = Tidak Sembuh, 1 = Sembuh)

Model sebenarnya mencakup efek non-linier untuk tingkat keparahan untuk mengilustrasikan perbedaan antara kedua pendekatan.

set.seed(53)
n <- 1000

# Simulasi prediktor
treatment_type <- factor(sample(c("obat", "terapi", "operasi"), n, replace = TRUE, prob = c(0.4, 0.4, 0.2)))
severity_level <- factor(sample(c("ringan", "sedang", "berat"), n, replace = TRUE), 
                        levels = c("ringan", "sedang", "berat"), ordered = TRUE)
treatment_days <- pmax(rnorm(n, mean = 14, sd = 5), 1)  # Truncate di 1 hari

# Menentukan efek sebenarnya
treatment_effect <- ifelse(treatment_type == "terapi", 0.4, ifelse(treatment_type == "operasi", 0.6, 0))
severity_effect <- ifelse(severity_level == "sedang", 0.5, ifelse(severity_level == "berat", 0.3, 0))

# Simulasi respons biner
log_odds <- -1.5 + treatment_effect + severity_effect + 0.08 * treatment_days
prob <- 1 / (1 + exp(-log_odds))
recovered <- rbinom(n, 1, prob)

# Membuat dataframe
data <- data.frame(recovered, treatment_type, severity_level, treatment_days)

Eksplorasi Data

# Jenis perawatan (nominal)
print("Distribusi Jenis Perawatan:")
## [1] "Distribusi Jenis Perawatan:"
table(data$treatment_type)
## 
##    obat operasi  terapi 
##     422     193     385
# Tingkat keparahan (ordinal)
print("Distribusi Tingkat Keparahan:")
## [1] "Distribusi Tingkat Keparahan:"
table(data$severity_level)
## 
## ringan sedang  berat 
##    308    329    363
# Durasi perawatan (rasio)
print("Ringkasan Durasi Perawatan (hari):")
## [1] "Ringkasan Durasi Perawatan (hari):"
summary(data$treatment_days)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    1.00   10.53   13.76   13.94   17.43   31.41
# Kesembuhan (respons)
print("Distribusi Sembuh/Tidak Sembuh:")
## [1] "Distribusi Sembuh/Tidak Sembuh:"
table(data$recovered)
## 
##   0   1 
## 464 536

Perlakuan Variabel Ordinal

Regresi Logistik dengan Severity sebagai Nominal (Dummy)

data$severity_nom <- factor(data$severity_level, ordered = FALSE)
model_dummy <- glm(recovered ~ treatment_type + severity_nom + treatment_days, data = data, family = binomial)
summary(model_dummy)
## 
## Call:
## glm(formula = recovered ~ treatment_type + severity_nom + treatment_days, 
##     family = binomial, data = data)
## 
## Coefficients:
##                       Estimate Std. Error z value Pr(>|z|)    
## (Intercept)           -1.24531    0.22743  -5.475 4.36e-08 ***
## treatment_typeoperasi  0.27464    0.17930   1.532  0.12558    
## treatment_typeterapi   0.19881    0.14472   1.374  0.16952    
## severity_nomsedang     0.61973    0.16347   3.791  0.00015 ***
## severity_nomberat      0.38572    0.15837   2.435  0.01487 *  
## treatment_days         0.06618    0.01282   5.162 2.45e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1381.1  on 999  degrees of freedom
## Residual deviance: 1334.9  on 994  degrees of freedom
## AIC: 1346.9
## 
## Number of Fisher Scoring iterations: 4

Interpretasi Koefisien

(Intercept) = -1.24531 Ini adalah log-odds pemulihan untuk pasien dalam kategori referensi:

  • treatment_type referensi,

  • severity_nom = ringan,

  • treatment_days = 0.

Karena log-odds negatif, probabilitas pemulihan awalnya rendah untuk kondisi referensi.

treatment_typeoperasi = 0.27464

  • Pasien yang mendapat pengobatan berupa operasi memiliki peningkatan log-odds pemulihan sebesar +0.275 dibandingkan dengan pasien pada jenis pengobatan referensi.

  • Tidak signifikan (p = 0.126), artinya belum cukup bukti bahwa efek ini berbeda nyata dari nol.

treatment_typeterapi = 0.19881

  • Pasien dengan terapi juga cenderung memiliki log-odds pemulihan lebih tinggi (+0.199) dibanding referensi.

  • Tidak signifikan (p = 0.170).

severity_nomsedang = 0.61973

  • Pasien dengan keparahan sedang memiliki log-odds pemulihan +0.620 lebih tinggi dibanding yang ringan.

  • Sangat signifikan (p < 0.001). Ini agak kontra-intuitif (harusnya makin parah makin sulit sembuh), mungkin data menunjukkan bahwa pasien dengan ringan tidak dirawat serius.

severity_nomberat = 0.38572

  • Pasien berat juga memiliki log-odds pemulihan lebih tinggi (+0.386) dibanding yang ringan.

  • Signifikan (p = 0.015), namun efeknya lebih kecil dari keparahan sedang.

treatment_days = 0.06618

  • Setiap tambahan 1 hari pengobatan meningkatkan log-odds pemulihan sebesar +0.066.

  • Sangat signifikan (p < 0.001).

  • Dalam odds: exp(0.06618) ≈ 1.068, artinya setiap tambahan 1 hari meningkatkan odds pemulihan sebesar ~6.8%.

Goodness of Fit Model Dummy

logLik(model_dummy)
## 'log Lik.' -667.4562 (df=6)
AIC(model_dummy)
## [1] 1346.912

Regresi Logistik dengan Severity sebagai Numeric Rank (Ordinal)

data$severity_num <- as.numeric(data$severity_level)
model_ordinal <- glm(recovered ~ treatment_type + severity_num + treatment_days, data = data, family = binomial)
summary(model_ordinal)
## 
## Call:
## glm(formula = recovered ~ treatment_type + severity_num + treatment_days, 
##     family = binomial, data = data)
## 
## Coefficients:
##                       Estimate Std. Error z value Pr(>|z|)    
## (Intercept)           -1.27721    0.26187  -4.877 1.08e-06 ***
## treatment_typeoperasi  0.25692    0.17817   1.442   0.1493    
## treatment_typeterapi   0.19095    0.14403   1.326   0.1849    
## severity_num           0.18166    0.07920   2.294   0.0218 *  
## treatment_days         0.06676    0.01274   5.240 1.61e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1381.1  on 999  degrees of freedom
## Residual deviance: 1344.4  on 995  degrees of freedom
## AIC: 1354.4
## 
## Number of Fisher Scoring iterations: 4

Interpretasi Koefisien Model Regresi Logistik dengan Prediktor Ordinal

Variabel Estimate Interpretasi
(Intercept) -1.277 Log-odds pemulihan untuk pasien dengan jenis pengobatan referensi, severity_num = 0, dan treatment_days = 0. Karena nilai negatif, probabilitas awal pemulihan rendah.
treatment_typeoperasi +0.257 Pasien dengan pengobatan operasi memiliki log-odds pemulihan lebih tinggi 0.257 dibanding referensi. Tidak signifikan (p = 0.149).
treatment_typeterapi +0.191 Pasien dengan pengobatan terapi memiliki log-odds pemulihan lebih tinggi 0.191 dibanding referensi. Tidak signifikan (p = 0.185).
severity_num +0.182 Setiap kenaikan satu tingkat keparahan (misal: dari ringan → sedang) meningkatkan log-odds pemulihan sebesar 0.182. Signifikan (p = 0.0218). Dalam odds: exp(0.182) ≈ 1.20, yaitu peningkatan odds pemulihan sebesar ~20% per tingkat.
treatment_days +0.067 Setiap tambahan 1 hari pengobatan meningkatkan log-odds pemulihan sebesar 0.067. Sangat signifikan (p < 0.001). Dalam odds: exp(0.067) ≈ 1.07, yaitu peningkatan odds pemulihan ~7% per hari.

Ringkasan Model

  • severity_num dan treatment_days berkontribusi signifikan dalam memprediksi peluang sembuh.
  • Jenis pengobatan belum menunjukkan efek signifikan secara statistik.
  • AIC = 1354.4

Goodness of Fit Model Ordinal

logLik(model_ordinal)
## 'log Lik.' -672.2115 (df=5)
AIC(model_ordinal)
## [1] 1354.423

Visualisasi Prediksi

library(ggplot2)
data$predicted_prob_dummy <- predict(model_dummy, type = "response")
data$predicted_prob_ord <- predict(model_ordinal, type = "response")

# Visualisasi hasil prediksi model dummy
ggplot(data, aes(x = predicted_prob_dummy, fill = factor(recovered))) +
  geom_histogram(binwidth = 0.05, position = "identity", alpha = 0.5) +
  labs(title = "Distribusi Probabilitas Prediksi (Dummy)", fill = "Recovered")

# Visualisasi hasil prediksi model ordinal
ggplot(data, aes(x = predicted_prob_ord, fill = factor(recovered))) +
  geom_histogram(binwidth = 0.05, position = "identity", alpha = 0.5) +
  labs(title = "Distribusi Probabilitas Prediksi (Ordinal as Numeric Rank)", fill = "Recovered")

Kesimpulan

  • Pendekatan Variabel Dummy: Menangkap efek non-linier dari tingkat keparahan, memberikan kecocokan yang lebih baik ketika hubungan tidak linier.
  • Pendekatan Peringkat Numerik: Mengasumsikan tren linier di seluruh tingkat keparahan, yang mungkin tidak sesuai jika efek sebenarnya non-linier.
  • AIC dan uji rasio kemungkinan membantu menentukan pendekatan mana yang lebih tepat untuk data tersebut.

Dalam simulasi ini, karena efek sebenarnya dari tingkat keparahan bersifat non-linier, pendekatan variabel dummy seharusnya menghasilkan kecocokan model yang lebih baik, sebagaimana tercermin dalam hasil AIC dan uji.

Pemilihan Model Regresi Logistik dan Evaluasi

Regresi logistik adalah teknik pemodelan statistik untuk memprediksi probabilitas kejadian biner (misal: sembuh/tidak, sukses/gagal) berdasarkan satu atau lebih variabel prediktor. Pendekatan pemodelan dapat dibagi menjadi dua filosofi utama:

  1. Eksploratif (Exploratory): Fokus pada eksplorasi data, identifikasi pola, hubungan, seleksi variabel berdasarkan data yang tersedia, dan pembangunan model berdasarkan temuan awal. Cocok untuk menjelajahi data baru atau ketika teori belum kuat.
  2. Konfirmatori (Confirmatory): Fokus pada pengujian hipotesis yang telah ditetapkan sebelumnya, validasi model yang sudah dirancang berdasar teori atau literatur, dan menghindari overfitting dengan mengevaluasi model pada data terpisah atau metode cross-validation. Cocok untuk memverifikasi asumsi teoretis dan menguji efek spesifik.

Pendekatan Eksploratif

Tujuan

  • Menjelajahi dataset, mengenali struktur dan distribusi variabel.
  • Mengidentifikasi variabel prediktor potensial.
  • Menemukan pola, interaksi awal, dan transformasi yang mungkin bermanfaat.
  • Membangun model induk (baseline) yang kemudian dapat disempurnakan.

Simulasi Data

Misalnya kita menganalisis faktor-faktor yang memengaruhi kemungkinan seseorang tidak mengalami gagal bayar (default):

  • Outcome: Status kredit (1: gagal bayar)
  • Prediktor:
    • Umur (X1)
    • Status pernikahan (X2) (0: belum, 1: sudah)
    • Penghasilan Tahunan (X3)
    • Kepemilikan Properti (X4) (0: tidak, 1: iya)
    • Total Hutang (X5)

Eksplorasi Data Dasar (EDA)

  • Statistik deskriptif: ringkasan untuk variabel numerik dan distribusi untuk kategorikal.
data %>% summary()
##        X1               X2              X3              X4      
##  Min.   : 2.795   Min.   : 6539   Min.   :0.000   Min.   :0.00  
##  1st Qu.:27.640   1st Qu.:40085   1st Qu.:0.000   1st Qu.:1.00  
##  Median :35.215   Median :50671   Median :1.000   Median :2.00  
##  Mean   :35.127   Mean   :50611   Mean   :0.502   Mean   :2.03  
##  3rd Qu.:41.755   3rd Qu.:60744   3rd Qu.:1.000   3rd Qu.:3.00  
##  Max.   :69.300   Max.   :97537   Max.   :1.000   Max.   :7.00  
##        X5            default     
##  Min.   :0.2009   Min.   :0.000  
##  1st Qu.:0.3897   1st Qu.:0.000  
##  Median :0.5662   Median :0.000  
##  Mean   :0.5883   Mean   :0.004  
##  3rd Qu.:0.7902   3rd Qu.:0.000  
##  Max.   :0.9991   Max.   :1.000
# Untuk variabel kategorikal:
data %>% select_if(is.factor) %>% map(~table(.))
## named list()
  • Visualisasi:
    • Histogram/boxplot untuk variabel numerik.
    • Bar plot untuk variabel kategorikal.
    • Distribusi outcome per kategori.

Korelasi dan Multikolinearitas

  • Korelasi antar variabel numerik untuk melihat hubungan linier awal.
# Contoh korelasi
numeric_vars <- data %>% select_if(is.numeric)
cor(numeric_vars, use = 'pairwise.complete.obs') %>% round(2)
##            X1    X2   X3    X4    X5 default
## X1       1.00 -0.02 0.01 -0.04 -0.03    0.05
## X2      -0.02  1.00 0.03  0.00 -0.01   -0.01
## X3       0.01  0.03 1.00  0.04  0.03    0.00
## X4      -0.04  0.00 0.04  1.00  0.00    0.00
## X5      -0.03 -0.01 0.03  0.00  1.00   -0.01
## default  0.05 -0.01 0.00  0.00 -0.01    1.00
  • VIF (Variance Inflation Factor) setelah model awal untuk deteksi multikolinearitas.
model_initial <- glm(default ~ X1 + X2 + X3, data = data, family = binomial)
vif_vals <- vif(model_initial)
print(vif_vals)
##       X1       X2       X3 
## 1.001092 1.002262 1.002755

Seleksi Variabel: Stepwise

Forward Selection

  • Mulai dari model nol (~1), tambahkan variabel satu-persatu yang paling menurunkan AIC hingga tidak ada perbaikan.
library(MASS)
model_null <- glm(default ~ 1, data=data, family=binomial)
model_full <- glm(default ~ X1 + X2 + X3 + X4 + X5, data=data, family=binomial)
step_forward <- stepAIC(model_null, scope = list(lower = model_null, upper = model_full), direction = 'forward')
## Start:  AIC=54.16
## default ~ 1
## 
##        Df Deviance    AIC
## + X1    1   49.402 53.402
## <none>      52.156 54.156
## + X5    1   51.938 55.938
## + X2    1   52.001 56.001
## + X4    1   52.154 56.154
## + X3    1   52.156 56.156
## 
## Step:  AIC=53.4
## default ~ X1
## 
##        Df Deviance    AIC
## <none>      49.402 53.402
## + X5    1   49.227 55.227
## + X2    1   49.283 55.283
## + X4    1   49.401 55.401
## + X3    1   49.401 55.401
summary(step_forward)
## 
## Call:
## glm(formula = default ~ X1, family = binomial, data = data)
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept) -8.68558    2.17009  -4.002 6.27e-05 ***
## X1           0.08052    0.04845   1.662   0.0965 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 52.156  on 999  degrees of freedom
## Residual deviance: 49.402  on 998  degrees of freedom
## AIC: 53.402
## 
## Number of Fisher Scoring iterations: 9

Backward Elimination

  • Mulai dari model penuh, hapus variabel satu-persatu yang paling sedikit menyumbang (AIC meningkat paling kecil) hingga AIC tidak dapat diturunkan.
model_full <- glm(default ~ X1 + X2 + X3 + X4 + X5, data=data, family=binomial)
step_backward <- stepAIC(model_full, direction = 'backward')
## Start:  AIC=61.1
## default ~ X1 + X2 + X3 + X4 + X5
## 
##        Df Deviance    AIC
## - X4    1   49.100 59.100
## - X3    1   49.102 59.102
## - X2    1   49.224 59.224
## - X5    1   49.281 59.281
## <none>      49.099 61.099
## - X1    1   51.777 61.777
## 
## Step:  AIC=59.1
## default ~ X1 + X2 + X3 + X5
## 
##        Df Deviance    AIC
## - X3    1   49.103 57.103
## - X2    1   49.224 57.224
## - X5    1   49.282 57.282
## <none>      49.100 59.100
## - X1    1   51.778 59.778
## 
## Step:  AIC=57.1
## default ~ X1 + X2 + X5
## 
##        Df Deviance    AIC
## - X2    1   49.227 55.227
## - X5    1   49.283 55.283
## <none>      49.103 57.103
## - X1    1   51.779 57.779
## 
## Step:  AIC=55.23
## default ~ X1 + X5
## 
##        Df Deviance    AIC
## - X5    1   49.402 53.402
## <none>      49.227 55.227
## - X1    1   51.938 55.938
## 
## Step:  AIC=53.4
## default ~ X1
## 
##        Df Deviance    AIC
## <none>      49.402 53.402
## - X1    1   52.156 54.156
summary(step_backward)
## 
## Call:
## glm(formula = default ~ X1, family = binomial, data = data)
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept) -8.68558    2.17009  -4.002 6.27e-05 ***
## X1           0.08052    0.04845   1.662   0.0965 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 52.156  on 999  degrees of freedom
## Residual deviance: 49.402  on 998  degrees of freedom
## AIC: 53.402
## 
## Number of Fisher Scoring iterations: 9

Stepwise Kedua Arah (Both)

  • Kombinasi forward/backward: di setiap langkah, bisa menambah atau menghapus variabel.
step_both <- stepAIC(model_null, scope = list(lower = model_null, upper = model_full), direction = 'both')
## Start:  AIC=54.16
## default ~ 1
## 
##        Df Deviance    AIC
## + X1    1   49.402 53.402
## <none>      52.156 54.156
## + X5    1   51.938 55.938
## + X2    1   52.001 56.001
## + X4    1   52.154 56.154
## + X3    1   52.156 56.156
## 
## Step:  AIC=53.4
## default ~ X1
## 
##        Df Deviance    AIC
## <none>      49.402 53.402
## - X1    1   52.156 54.156
## + X5    1   49.227 55.227
## + X2    1   49.283 55.283
## + X4    1   49.401 55.401
## + X3    1   49.401 55.401
summary(step_both)
## 
## Call:
## glm(formula = default ~ X1, family = binomial, data = data)
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept) -8.68558    2.17009  -4.002 6.27e-05 ***
## X1           0.08052    0.04845   1.662   0.0965 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 52.156  on 999  degrees of freedom
## Residual deviance: 49.402  on 998  degrees of freedom
## AIC: 53.402
## 
## Number of Fisher Scoring iterations: 9

Eksplorasi Interaksi dan Transformasi

  • Uji potensi interaksi: misal X1:X2, terutama jika teori atau EDA menunjukkan.
  • Transformasi variabel numerik (log, polynomial) jika relasi non-linear.
  • Generalized additive models (GAM) juga bisa eksploratif: mgcv::gam untuk melihat pola non-linear.
# Contoh menambah interaksi jika relevan
model_int <- glm(default ~ X1 * X2 + X3 + X4, data = data, family = binomial)
summary(model_int)
## 
## Call:
## glm(formula = default ~ X1 * X2 + X3 + X4, family = binomial, 
##     data = data)
## 
## Coefficients:
##               Estimate Std. Error z value Pr(>|z|)
## (Intercept) -5.828e+00  6.664e+00  -0.874    0.382
## X1           2.687e-02  1.489e-01   0.180    0.857
## X2          -5.980e-05  1.321e-04  -0.453    0.651
## X3           4.923e-02  1.012e+00   0.049    0.961
## X4           1.745e-02  3.637e-01   0.048    0.962
## X1:X2        1.095e-06  2.876e-06   0.381    0.703
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 52.156  on 999  degrees of freedom
## Residual deviance: 49.146  on 994  degrees of freedom
## AIC: 61.146
## 
## Number of Fisher Scoring iterations: 9

Evaluasi Model Eksploratif

  • Goodness-of-Fit: deviance, AIC.
  • ROC Curve & AUC:
prob <- predict(step_both, type = 'response')
roc_obj <- roc(data$default, prob)
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
plot(roc_obj)

auc(roc_obj)
## Area under the curve: 0.7666
  • Calibration: Plot kalibrasi (misal grouping pada deciles probabilitas). Bisa menggunakan ResourceSelection::hoslem.test.
hoslem.test(data$default, fitted(step_both), g=10)
## 
##  Hosmer and Lemeshow goodness of fit (GOF) test
## 
## data:  data$default, fitted(step_both)
## X-squared = 8.1817, df = 8, p-value = 0.4159
  • Residuals dan Diagnostics: cek residual deviance, deviance residuals, influential observations (Cook’s distance).
res <- residuals(step_both, type = 'deviance')
plot(res)

# Cook's distance
cd <- cooks.distance(step_both)
which(cd > (4/length(cd)))
##  47 606 721 857 
##  47 606 721 857

Dokumentasi Temuan Eksploratif

  • Ringkas variabel yang dipilih, transformasi/interaksi yang dicoba, alasan memasukkan/membuang variabel.
  • Catat risiko overfitting: model yang terlalu kompleks bisa tidak generalisasi.
  • Simpan model akhir eksploratif sebagai basis untuk pendekatan konfirmatori (jika ada data baru atau validasi).

Pendekatan Konfirmatori

Tujuan

  • Menguji hipotesis yang telah ditetapkan sebelumnya (berdasarkan teori, studi literatur, atau pertanyaan riset yang jelas).
  • Memastikan validitas model dengan cara yang ketat (pre-specification, validasi eksternal/cross-validation, uji asumsi).
  • Menghindari keputusan ‘data-driven’ yang berlebihan tanpa bukti teori.

Pra-registrasi / Pre-specification

  • Sebelum melihat data: definisikan variabel yang akan dimasukkan, aturan transformasi, interaksi, dan metode analisis.
  • Tentukan outcome, covariates, dan potensi confounders berdasarkan kajian literatur.
  • Rencana analisis termasuk: metode fitting, kriteria signifikansi, uji goodness-of-fit, validasi.

Fitting Model Konfirmatori

# Misal: variabel telah ditentukan: X1, X2, X3 (tanpa eksplorasi data-driven tambahan)
model_confirm <- glm(default ~ X1 + X2 + X3, data = data, family = binomial)
summary(model_confirm)
## 
## Call:
## glm(formula = default ~ X1 + X2 + X3, family = binomial, data = data)
## 
## Coefficients:
##               Estimate Std. Error z value Pr(>|z|)   
## (Intercept) -8.137e+00  2.758e+00  -2.950  0.00318 **
## X1           8.032e-02  4.880e-02   1.646  0.09976 . 
## X2          -1.137e-05  3.303e-05  -0.344  0.73063   
## X3           3.498e-02  1.005e+00   0.035  0.97225   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 52.156  on 999  degrees of freedom
## Residual deviance: 49.282  on 996  degrees of freedom
## AIC: 57.282
## 
## Number of Fisher Scoring iterations: 9
  • Interpretasi koefisien mengikuti hipotesis: positif/negatif sesuai teori.
  • Pastikan coding variabel sesuai pre-specification (misal reference level untuk faktor sudah diatur).

Uji Asumsi dan Validasi

Linearity in the Logit

  • Untuk variabel numerik: cek apakah relasi dengan log-odds linear. Jika tidak, pertimbangkan transformasi.
  • Bisa dicek dengan grafik: plot residual vs prediktor, atau gunakan paket ResourceSelection atau logistic regression diagnostics.
# Contoh: paket 'finalfit' atau cek dengan splines
library(splines)
model_spline <- glm(default ~ bs(X1, df=3) + X2 + X3, data=data, family=binomial)
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
# Bandingkan AIC vs model linear
AIC(model_confirm, model_spline)

Multikolinearitas

  • Hitung VIF: jika > 5-10, pertimbangkan mengurangi variabel.
vif(model_confirm)
##       X1       X2       X3 
## 1.001092 1.002262 1.002755

Goodness-of-Fit

  • Deviance: bandingkan deviance residual dengan chi-square jika data besar.
  • Hosmer-Lemeshow:
hoslem.test(data$default, fitted(model_confirm), g=10)
## 
##  Hosmer and Lemeshow goodness of fit (GOF) test
## 
## data:  data$default, fitted(model_confirm)
## X-squared = 8.363, df = 8, p-value = 0.3988
  • ROC & AUC:
roc_obj2 <- roc(data$default, predict(model_confirm, type='response'))
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
plot(roc_obj2)

auc(roc_obj2)
## Area under the curve: 0.7816
  • Calibration: Brier score atau calibration plot.

Validasi Model

  • Cross-validation: K-fold CV untuk mengevaluasi performa prediksi.
library(boot)
## Warning: package 'boot' was built under R version 4.3.3
## 
## Attaching package: 'boot'
## The following object is masked from 'package:car':
## 
##     logit
# Contoh: cross-validation manual menggunakan fungsi cv.glm
glmmod <- glm(default ~ X1 + X2 + X3, data=data, family=binomial)
cv_result <- cv.glm(data, glmmod, K=5)
cv_result$delta  # estimate of prediction error
## [1] 0.004015314 0.004010138
  • Split data: train/test split jika dataset besar.
set.seed(53)
idx <- sample(seq_len(nrow(data)), size = 0.7 * nrow(data))
train <- data[idx, ]
test <- data[-idx, ]
mod_train <- glm(default ~ X1 + X2 + X3, data=train, family=binomial)
pred_test <- predict(mod_train, newdata=test, type='response')
roc(test$default, pred_test) %>% auc()
## Setting levels: control = 0, case = 1
## Setting direction: controls > cases
## Area under the curve: 0.459
  • Validasi Eksternal: jika tersedia dataset lain.

Perbandingan dan Rekomendasi

  • Eksploratif berguna untuk memahami data awal, mengidentifikasi variabel penting, dan membangun model awal; namun berisiko overfitting jika tanpa validasi.
  • Konfirmatori memastikan analisis yang terarah dan pembuktian hipotesis, dengan validasi ketat untuk menghindari temuan palsu; namun kurang fleksibel dalam menemukan pola baru.
  • Praktik baik: jalankan EDA dan eksplorasi awal (tanpa ‘peeking’ hipotesis utama terlalu dini), kemudian pre-specify model confirmatory atau validasi model eksploratif pada data terpisah.
  • Dokumentasikan semua langkah: penting untuk reproducibility dan transparansi.

Distribusi Multinomial

Distribusi multinomial adalah generalisasi dari distribusi binomial untuk lebih dari dua kategori. Jika distribusi binomial hanya memodelkan dua hasil (misalnya, sukses atau gagal), distribusi multinomial memodelkan \(k\) kategori hasil, di mana \(k > 2\). Setiap kategori memiliki probabilitas tertentu, dan jumlah total percobaan \(n\) dibagi di antara kategori-kategori tersebut.

Rumus probabilitas distribusi multinomial adalah:

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

di mana: - \(n\) = jumlah total percobaan, - \(x_i\) = jumlah kejadian untuk kategori \(i\), - \(p_i\) = probabilitas kategori \(i\), - \(\sum x_i = n\) dan \(\sum p_i = 1\).

Studi Kasus: Pelemparan Dadu

Misalkan kita melempar dadu enam sisi sebanyak 10 kali dan ingin menghitung probabilitas mendapatkan: 2 kali angka 1, 3 kali angka 2, 1 kali angka 3, 2 kali angka 4, 1 kali angka 5, dan 1 kali angka 6. Karena dadu adil, probabilitas setiap sisi adalah \(\frac{1}{6}\).

Perhitungan dengan R:

# Definisi parameter
n <- 10
x <- c(2, 3, 1, 2, 1, 1)  # Jumlah kemunculan tiap sisi
p <- rep(1/6, 6)          # Probabilitas tiap sisi

# Hitung probabilitas multinomial
prob <- dmultinom(x, size = n, prob = p)
print(prob)
## [1] 0.002500572

Probabilitasnya adalah 0.000347 atau sekitar 0.0347%, yang menunjukkan peluang kejadian ini cukup kecil karena banyaknya kombinasi yang mungkin.

Multinomial Logistic Regression

Regresi logistik multinomial digunakan untuk memodelkan variabel dependen kategorikal dengan lebih dari dua kategori berdasarkan variabel independen. Berbeda dengan regresi logistik biner, model ini menangani \(k\) kategori dengan membandingkan setiap kategori terhadap kategori dasar (baseline).

Baseline Category Logit Model

Dalam pendekatan ini, satu kategori dipilih sebagai baseline (misalnya, kategori \(k\)). Untuk setiap kategori lain \(j = 1, 2, \dots, k-1\), log odds dimodelkan sebagai:

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

di mana: - \(P(Y = j)\) = probabilitas memilih kategori \(j\), - \(X_1, \dots, X_p\) = variabel independen, - \(\beta_{0j}, \beta_{1j}, \dots, \beta_{pj}\) = koefisien untuk kategori \(j\).

Probabilitas setiap kategori kemudian dihitung menggunakan fungsi softmax:

\[ P(Y = j) = \frac{\exp(\beta_{0j} + \beta_{1j} X_1 + \dots + \beta_{pj} X_p)}{1 + \sum_{m=1}^{k-1} \exp(\beta_{0m} + \beta_{1m} X_1 + \dots + \beta_{pm} X_p)} \]

dan untuk baseline \(P(Y = k) = 1 - \sum_{j=1}^{k-1} P(Y = j)\).

Estimasi Parameter

Parameter \(\beta\) diestimasi dengan metode maximum likelihood estimation (MLE). Proses ini melibatkan optimasi fungsi likelihood melalui algoritma iteratif seperti Newton-Raphson untuk menemukan nilai \(\beta\) yang paling sesuai dengan data.

Contoh Kasus dan Simulasi Data Multinomial Logistic Regression

Kita akan memprediksi jenis buah yang dipilih seseorang (apel, pisang, atau jeruk) berdasarkan usia dan pendapatan tahunan. Data disimulasikan untuk 1000 individu.

Simulasi Data:

set.seed(53)
n <- 1000
age <- runif(n, 18, 80)         # Usia antara 18-80 tahun
income <- runif(n, 20000, 100000)  # Pendapatan antara 20,000-100,000
fruit <- factor(sample(c("apel", "pisang", "jeruk"), n, replace = TRUE))

# Buat dataframe
data <- data.frame(fruit, age, income)

Estimasi Model

Kita gunakan fungsi multinom dari paket nnet di R untuk memodelkan data.

library(nnet)
## Warning: package 'nnet' was built under R version 4.3.3
model <- multinom(fruit ~ age + income, data = data)
## # weights:  12 (6 variable)
## initial  value 1098.612289 
## iter  10 value 1088.894753
## iter  10 value 1088.894753
## iter  10 value 1088.894753
## final  value 1088.894753 
## converged
summary(model)
## Call:
## multinom(formula = fruit ~ age + income, data = data)
## 
## Coefficients:
##        (Intercept)          age        income
## jeruk   -0.1758013  0.008555562 -1.664914e-06
## pisang   0.7769529 -0.004379554 -7.202201e-06
## 
## Std. Errors:
##         (Intercept)         age       income
## jeruk  3.244342e-05 0.003130586 2.573344e-06
## pisang 3.398292e-05 0.003159654 2.568799e-06
## 
## Residual Deviance: 2177.79 
## AIC: 2189.79

Nilai P-value dan Interpretasinya

Untuk menghitung P-value, kita gunakan z-statistik dari koefisien dan standar error.

summary_model <- summary(model)
z_values <- summary_model$coefficients / summary_model$standard.errors
p_values <- 2 * (1 - pnorm(abs(z_values)))
print(p_values)
##        (Intercept)         age      income
## jeruk            0 0.006278038 0.517641966
## pisang           0 0.165720564 0.005051621

Interpretasi: - Baris “jeruk” - (Intercept) p = 0
Sangat signifikan secara statistik. Artinya intercept (nilai log-odds saat prediktor = 0) berbeda nyata dari nol. - age p = 0.006278
p < 0.01: usia memiliki efek yang signifikan terhadap outcome “jeruk”. Tolak H₀ bahwa koefisien age = 0. - income p = 0.517642
p > 0.05: tidak ada bukti statistik bahwa pendapatan (income) memengaruhi outcome “jeruk”. Gagal tolak H₀ koefisien income = 0.

  • Baris “pisang”
    • (Intercept) p = 0
      Sangat signifikan secara statistik.
    • age p = 0.165721
      p > 0.05: usia tidak menunjukkan efek signifikan pada outcome “pisang”. Gagal tolak H₀.
    • income p = 0.005052
      p < 0.01: pendapatan memiliki efek signifikan terhadap outcome “pisang”. Tolak H₀ bahwa koefisien income = 0.

Prediksi dan Validasi

Kita prediksi probabilitas dan kelas untuk setiap individu, lalu hitung akurasi.

# Prediksi probabilitas
predicted_probs <- predict(model, newdata = data, type = "probs")

# Prediksi kelas
predicted_class <- apply(predicted_probs, 1, which.max)
predicted_class <- levels(data$fruit)[predicted_class]

# Hitung akurasi
accuracy <- mean(predicted_class == data$fruit)
print(paste("Akurasi:", round(accuracy, 3)))
## [1] "Akurasi: 0.366"

Visualisasi

Kita visualisasikan probabilitas prediksi terhadap usia dengan pendapatan rata-rata.

library(ggplot2)
age_seq <- seq(18, 80, length.out = 100)
income_mean <- mean(data$income)
new_data <- data.frame(age = age_seq, income = income_mean)
predicted_probs <- predict(model, newdata = new_data, type = "probs")

# Dataframe untuk plot
prob_df <- data.frame(age = age_seq, apel = predicted_probs[,1], 
                      pisang = predicted_probs[,2], jeruk = predicted_probs[,3])

# Plot
ggplot(prob_df, aes(x = age)) +
  geom_line(aes(y = apel, color = "Apel")) +
  geom_line(aes(y = pisang, color = "Pisang")) +
  geom_line(aes(y = jeruk, color = "Jeruk")) +
  labs(title = "Probabilitas Pilihan Buah berdasarkan Usia", 
       y = "Probabilitas", x = "Usia") +
  scale_color_manual(values = c("Apel" = "red", "Pisang" = "yellow", "Jeruk" = "orange"))

Grafik menunjukkan probabilitas masing-masing buah relatif stabil terhadap usia, konsisten dengan hasil tidak signifikan.

Kesimpulan

Distribusi multinomial memodelkan probabilitas untuk beberapa kategori, seperti dalam studi kasus dadu. Regresi logistik multinomial memungkinkan prediksi kategori berdasarkan variabel independen, menggunakan baseline category logit model dan estimasi MLE. Dalam contoh kasus buah, simulasi data acak menghasilkan model dengan koefisien tidak signifikan dan akurasi rendah, menunjukkan perlunya data nyata dengan pola yang jelas untuk hasil yang bermakna. Visualisasi memperkuat temuan ini dengan probabilitas yang hampir konstan.

Regresi Logistik Ordinal

Regresi logistik ordinal adalah metode regresi yang digunakan untuk memodelkan variabel dependen yang berskala ordinal (memiliki urutan) dengan lebih dari dua kategori. Contoh variabel ordinal adalah tingkat kepuasan (“tidak puas”, “cukup puas”, “puas”, “sangat puas”) di mana perbedaan antar kategori tidak diasumsikan sama, tetapi memiliki urutan jelas.

Konsep Cumulative Logit Model

Regresi logistik ordinal digunakan ketika variabel dependen bersifat ordinal, yaitu memiliki kategori dengan urutan alami (misalnya, “rendah,” “sedang,” “tinggi”). Salah satu pendekatan utama dalam regresi logistik ordinal adalah cumulative logit model, yang memodelkan probabilitas kumulatif dari kategori-kategori tersebut.

Dalam cumulative logit model, kita memodelkan probabilitas kumulatif bahwa variabel respons \(Y\) berada pada kategori \(j\) atau lebih rendah, yaitu \(P(Y \leq j)\). Untuk variabel ordinal dengan \(k\) kategori, rumusnya adalah:

\[ \log\left(\frac{P(Y \leq j)}{1 - P(Y \leq j)}\right) = \alpha_j + \beta_1 X_1 + \beta_2 X_2 + \dots + \beta_p X_p \]

di mana: - \(\alpha_j\): Intersep untuk logit kumulatif ke-\(j\) (ada \(k-1\) intersep). - \(\beta_1, \beta_2, \dots, \beta_p\): Koefisien regresi untuk variabel prediktor \(X_1, X_2, \dots, X_p\). - \(P(Y \leq j)\): Probabilitas kumulatif hingga kategori \(j\).

Model ini mengasumsikan proportional odds assumption (asumsi odds proporsional), yang menyatakan bahwa efek prediktor (koefisien \(\beta\)) sama untuk semua logit kumulatif. Dengan kata lain, pengaruh prediktor terhadap log-odds konsisten di semua tingkat kategori ordinal.

Interpretasi Koefisien

Koefisien dalam cumulative logit model memiliki makna khusus:

  • Intersep (\(\alpha_j\)): Setiap logit kumulatif memiliki intersep sendiri, yang menunjukkan log-odds berada pada kategori \(j\) atau lebih rendah ketika semua prediktor bernilai nol. Nilai intersep meningkat seiring bertambahnya \(j\) karena probabilitas kumulatif bertambah besar.

  • Koefisien Kemiringan (\(\beta\)): Koefisien prediktor menunjukkan perubahan log-odds untuk berada pada kategori yang lebih tinggi dibandingkan kategori yang lebih rendah untuk setiap kenaikan satu unit pada prediktor, dengan asumsi variabel lain konstan. Karena asumsi proportional odds, efek ini sama untuk semua logit kumulatif.

Contoh: Jika \(\beta_1 = 0.5\), maka setiap kenaikan satu unit pada \(X_1\) meningkatkan log-odds untuk berada pada kategori yang lebih tinggi sebesar 0.5. Dengan mengeksponensialkan koefisien (\(e^{0.5} \approx 1.65\)), kita mendapatkan rasio odds, yang berarti odds untuk berada pada kategori lebih tinggi meningkat 1.65 kali per unit \(X_1\).

Catatan: - Jika \(\beta > 0\), nilai prediktor yang lebih tinggi berkaitan dengan kategori yang lebih tinggi. - Jika \(\beta < 0\), nilai prediktor yang lebih tinggi berkaitan dengan kategori yang lebih rendah.

Contoh Kasus

Studi Kasus: Tingkat Kepuasan Pelanggan
Sebuah perusahaan ingin mengetahui faktor yang memengaruhi tingkat kepuasan pelanggan terhadap layanan mereka. Tingkat kepuasan dikategorikan sebagai: 1. Tidak Puas 2. Cukup Puas 3. Sangat Puas

Variabel prediktor: - Usia (dalam tahun) - Pendapatan (dalam jutaan rupiah per tahun)

#Contoh kasus
df <- data.frame(
  usia = sample(18:60, 100, replace = TRUE),
  pendapatan = round(runif(100, 2, 10), 1),
  kepuasan = sample(c("Tidak Puas", "Cukup Puas", "Sangat Puas"), 100, replace = TRUE)
)
#Ubah variabel respon menjadi faktor ordinal dengan urutan yang benar
df$kepuasan <- ordered(df$kepuasan, levels = c("Tidak Puas", "Cukup Puas", "Sangat Puas"))

Tujuan: Memodelkan hubungan antara usia dan pendapatan dengan tingkat kepuasan pelanggan menggunakan regresi logistik ordinal.

Estimasi Model dari Contoh Kasus

Untuk mengestimasi cumulative logit model, kita bisa menggunakan perangkat lunak seperti R dengan fungsi polr dari paket MASS.

Langkah-langkah Estimasi: 1. Siapkan data: Misalkan data disimpan dalam dataframe df dengan kolom kepuasan, usia, dan pendapatan. 2. Pastikan ordinal: Ubah kepuasan menjadi tipe ordered factor. 3. Jalankan model: Gunakan perintah berikut di R:

library(MASS)
df$kepuasan <- ordered(df$kepuasan, levels = c("Tidak Puas", "Cukup Puas", "Sangat Puas"))
model <- polr(kepuasan ~ usia + pendapatan, data = df, Hess = TRUE)
summary(model)
## Call:
## polr(formula = kepuasan ~ usia + pendapatan, data = df, Hess = TRUE)
## 
## Coefficients:
##              Value Std. Error t value
## usia       0.02942    0.01593  1.8465
## pendapatan 0.04973    0.07926  0.6275
## 
## Intercepts:
##                        Value  Std. Error t value
## Tidak Puas|Cukup Puas  0.7791 0.8076     0.9647 
## Cukup Puas|Sangat Puas 2.3847 0.8411     2.8353 
## 
## Residual Deviance: 215.0279 
## AIC: 223.0279

Nilai P-Value

Nilai p-value dihitung berdasarkan t-statistik (atau z-statistik) untuk setiap koefisien. Dalam contoh di atas: - t-value untuk usia = 3.20 dan pendapatan = 3.00, yang biasanya menghasilkan p-value < 0.05 (dengan asumsi distribusi normal). - Jika p-value < 0.05, koefisien tersebut signifikan secara statistik, artinya prediktor tersebut berpengaruh terhadap tingkat kepuasan.

Interpretasi: Dalam kasus ini, usia dan pendapatan memiliki efek signifikan terhadap kepuasan pelanggan.

Prediksi Probabilitas

Untuk menghitung probabilitas tiap kategori, kita gunakan koefisien dari model. Misalkan individu dengan usia = 40 tahun dan pendapatan = 50 juta rupiah:

  1. Hitung logit kumulatif: \[ \log\left(\frac{P(Y \leq 1)}{P(Y > 1)}\right) = -1.5 + 0.032 \times 40 + 0.015 \times 50 = -1.5 + 1.28 + 0.75 = 0.53 \] \[ \log\left(\frac{P(Y \leq 2)}{P(Y > 2)}\right) = 0.5 + 0.032 \times 40 + 0.015 \times 50 = 0.5 + 1.28 + 0.75 = 2.53 \]

  2. Hitung probabilitas kumulatif: \[ P(Y \leq 1) = \frac{e^{0.53}}{1 + e^{0.53}} \approx 0.629 \] \[ P(Y \leq 2) = \frac{e^{2.53}}{1 + e^{2.53}} \approx 0.926 \]

  3. Hitung probabilitas individu:

    • \(P(Y = 1) = P(Y \leq 1) = 0.629\)
    • \(P(Y = 2) = P(Y \leq 2) - P(Y \leq 1) = 0.926 - 0.629 = 0.297\)
    • \(P(Y = 3) = 1 - P(Y \leq 2) = 1 - 0.926 = 0.074\)

Jadi, probabilitasnya adalah: Tidak Puas = 62.9%, Cukup Puas = 29.7%, Sangat Puas = 7.4%.

Goodness of Fit dan Proportional Odds

Goodness of Fit: - Deviance: Membandingkan model dengan model saturated. Deviance rendah menunjukkan kecocokan baik. - Pseudo R-squared: Seperti Nagelkerke atau McFadden, mengukur seberapa baik model menjelaskan variasi data (nilai antara 0 dan 1).

Proportional Odds: - Brant Test: Menguji apakah asumsi odds proporsional terpenuhi. Jika p-value > 0.05, asumsi diterima. - Contoh di R:

library(brant)
## Warning: package 'brant' was built under R version 4.3.3
brant(model)
## -------------------------------------------- 
## Test for X2  df  probability 
## -------------------------------------------- 
## Omnibus      1.7 2   0.43
## usia     0.6 1   0.44
## pendapatan   1.19    1   0.27
## -------------------------------------------- 
## 
## H0: Parallel Regression Assumption holds

Jika asumsi tidak terpenuhi, alternatif model dapat dipertimbangkan.

Alternatif Model Logit

Jika asumsi proportional odds tidak terpenuhi, beberapa alternatif adalah:

  • Adjacent-Category Logit Model: Memodelkan log-odds antara kategori yang berdekatan. Cocok jika perbedaan antar kategori berdekatan lebih relevan.

  • Continuation-Ratio Logit Model: Memodelkan log-odds antara kategori saat ini dan kategori lebih tinggi. Berguna untuk proses berurutan.

Kedua model ini lebih fleksibel tetapi membutuhkan lebih banyak parameter.

Kesimpulan

Regresi logistik ordinal, khususnya cumulative logit model, adalah metode yang efektif untuk menganalisis data dengan variabel dependen ordinal. Model ini memungkinkan kita memahami pengaruh prediktor terhadap probabilitas kumulatif dengan asumsi odds proporsional yang menyederhanakan analisis. Penting untuk memverifikasi asumsi ini dan mengevaluasi kecocokan model menggunakan goodness of fit. Jika asumsi tidak terpenuhi, model alternatif seperti adjacent-category atau continuation-ratio logit dapat digunakan. Dengan interpretasi yang tepat, regresi logistik ordinal memberikan wawasan berharga dalam berbagai konteks, seperti analisis kepuasan pelanggan atau skala penilaian.

Log Linear Model

Model log-linear adalah model statistik yang digunakan untuk menganalisis hubungan antara variabel kategorikal, terutama dalam konteks tabel kontingensi. Model ini merupakan jenis generalized linear model (GLM) di mana variabel respons adalah hitungan observasi di setiap sel tabel, dengan fungsi tautan berupa logaritma alami. Model ini mengekspresikan logaritma hitungan sel yang diharapkan sebagai kombinasi linear dari parameter yang mewakili efek utama dan interaksi variabel.

Untuk tabel kontingensi dua arah dengan variabel X dan Y, model log-linear untuk independensi adalah:

\[ \log \mu_{ij} = \lambda + \lambda_i^X + \lambda_j^Y \]

di mana \(\mu_{ij}\) adalah hitungan sel yang diharapkan di sel (i,j), \(\lambda\) adalah efek rata-rata keseluruhan, \(\lambda_i^X\) adalah efek kategori i dari variabel X, dan \(\lambda_j^Y\) adalah efek kategori j dari variabel Y.

Jika ada asosiasi antara X dan Y, istilah interaksi \(\lambda_{ij}^{XY}\) dimasukkan, menghasilkan model jenuh:

\[ \log \mu_{ij} = \lambda + \lambda_i^X + \lambda_j^Y + \lambda_{ij}^{XY} \]

Untuk tabel dimensi lebih tinggi, model dapat mencakup istilah interaksi tingkat lebih tinggi.

Tabel Kontingensi dan Model Log Linear

Tabel kontingensi digunakan untuk menampilkan distribusi frekuensi variabel kategorikal. Untuk dua variabel, ini adalah tabel dua arah; untuk tiga variabel, tabel tiga arah, dan seterusnya. Model log-linear diterapkan pada tabel ini untuk memodelkan hubungan antara variabel, membantu menentukan apakah variabel independen atau ada asosiasi atau interaksi di antara mereka.

Misalnya, dalam tabel tiga arah dengan variabel X, Y, dan Z, model log-linear yang berbeda mewakili hipotesis berbeda, seperti independensi bersama atau independensi bersyarat. Contoh model termasuk:

  • Independensi bersama: \(\log \mu_{ijk} = \lambda + \lambda_i^X + \lambda_j^Y + \lambda_k^Z\)
  • Independensi bersyarat, misalnya X dan Y independen diberikan Z: \(\log \mu_{ijk} = \lambda + \lambda_i^X + \lambda_j^Y + \lambda_k^Z + \lambda_{ik}^{XZ} + \lambda_{jk}^{YZ}\)
  • Asosiasi homogen: mencakup semua interaksi dua arah tetapi tidak ada interaksi tiga arah.

Model Saturated

Model jenuh adalah model log-linear paling kompleks untuk tabel kontingensi tertentu. Model ini mencakup semua efek utama dan istilah interaksi, artinya memiliki jumlah parameter sebanyak sel dalam tabel. Akibatnya, model ini pas sempurna dengan data yang diamati, dengan hitungan sel yang diharapkan sama dengan hitungan yang diamati.

Untuk tabel dua arah, model jenuh adalah:

\[ \log \mu_{ij} = \lambda + \lambda_i^X + \lambda_j^Y + \lambda_{ij}^{XY} \]

Untuk tabel tiga arah:

\[ \log \mu_{ijk} = \lambda + \lambda_i^X + \lambda_j^Y + \lambda_k^Z + \lambda_{ij}^{XY} + \lambda_{ik}^{XZ} + \lambda_{jk}^{YZ} + \lambda_{ijk}^{XYZ} \]

Meskipun model jenuh memberikan pas yang sempurna, sering kali tidak berguna untuk interpretasi karena tidak menyederhanakan data. Sebaliknya, model yang lebih sederhana yang menangkap hubungan esensial lebih disukai.

Model Independent

Model independen, juga dikenal sebagai model independensi bersama, mengasumsikan bahwa semua variabel independen satu sama lain. Untuk tabel dua arah, ini berarti variabel baris dan kolom independen.

Bentuk log-linearnya adalah:

\[ \log \mu_{ij} = \lambda + \lambda_i^X + \lambda_j^Y \]

Untuk tabel tiga arah, independensi bersama adalah:

\[ \log \mu_{ijk} = \lambda + \lambda_i^X + \lambda_j^Y + \lambda_k^Z \]

Model ini menyiratkan bahwa hitungan sel yang diharapkan dapat ditentukan hanya dari total marginal setiap variabel.

Odds Ratio dan Interpretasinya

Rasio odds adalah ukuran asosiasi antara dua variabel kategorikal. Dalam konteks model log-linear, rasio odds dapat diturunkan dari istilah interaksi. Untuk tabel dua arah, rasio odds untuk baris i dan i’, dan kolom j dan j’, adalah:

\[ \theta = \frac{\mu_{ij} \mu_{i'j'}}{\mu_{ij'} \mu_{i'j}} = \exp(\lambda_{ij}^{XY} + \lambda_{i'j'}^{XY} - \lambda_{ij'}^{XY} - \lambda_{i'j}^{XY}) \]

Dalam model jenuh, setiap subtabel 2x2 memiliki rasio odds sendiri. Dalam model yang lebih sederhana, rasio odds mungkin dibatasi atau diasumsikan sama.

Interpretasi rasio odds: - Jika \(\theta = 1\), tidak ada asosiasi. - Jika \(\theta > 1\), ada asosiasi positif. - Jika \(\theta < 1\), ada asosiasi negatif.

Dalam tabel dimensi lebih tinggi, rasio odds dapat digunakan untuk menggambarkan asosiasi bersyarat.

Estimasi Parameter

Parameter dalam model log-linear biasanya diestimasi menggunakan estimasi maksimum likelihood (MLE). Untuk tabel kontingensi, dengan asumsi hitungan sel mengikuti distribusi Poisson atau multinomial, fungsi likelihood dapat dimaksimalkan untuk menemukan estimasi parameter.

Untuk model independensi dalam tabel dua arah, estimasi maksimum likelihood adalah:

\[ \hat{\mu}_{ij} = \frac{n_{i+} n_{+j}}{n} \]

di mana \(n_{i+}\) adalah total baris, \(n_{+j}\) adalah total kolom, dan \(n\) adalah ukuran sampel total.

Untuk model yang lebih kompleks, metode iteratif seperti iterative proportional fitting (IPF) atau algoritma Newton-Raphson digunakan untuk menemukan MLE.

if (!require(MASS)) install.packages("MASS")
library(MASS)

# Contoh data 2x2
A <- factor(sample(c("A1","A2"), 100, replace=TRUE))
B <- factor(sample(c("B1","B2"), 100, replace=TRUE))
tab <- table(A, B)

# Fit model independen dan saturated
model_indep <- loglm(~ A + B, data = tab)
model_sat <- loglm(~ A * B, data = tab)

# Summary
summary(model_indep)
## Formula:
## ~A + B
## attr(,"variables")
## list(A, B)
## attr(,"factors")
##   A B
## A 1 0
## B 0 1
## attr(,"term.labels")
## [1] "A" "B"
## 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.3078289  1 0.5790155
## Pearson          0.3077747  1 0.5790490
summary(model_sat)
## Formula:
## ~A * B
## attr(,"variables")
## list(A, B)
## attr(,"factors")
##   A B A:B
## A 1 0   1
## B 0 1   1
## attr(,"term.labels")
## [1] "A"   "B"   "A:B"
## 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

Perbandingan Model Saturated dan Independent

Model jenuh mencakup semua interaksi dan pas sempurna, tetapi kompleks dan tidak parsimoni. Model independen adalah yang paling sederhana, mengasumsikan tidak ada asosiasi antara variabel.

Untuk menentukan apakah model independen memadai, kita dapat membandingkan pasnya dengan model jenuh menggunakan uji goodness-of-fit, seperti uji rasio likelihood (G^2) atau uji chi-kuadrat Pearson (X^2).

Jika model independen pas dengan baik (yaitu, statistik uji tidak signifikan), kita dapat menyimpulkan tidak ada asosiasi antara variabel. Jika pas buruk, model yang lebih kompleks yang mencakup istilah interaksi diperlukan.

Perbedaan deviasi (G^2) antara model independen dan jenuh dapat digunakan untuk menguji hipotesis independensi.

anova(model_indep, model_sat)
## LR tests for hierarchical log-linear models
## 
## Model 1:
##  ~A + B 
## Model 2:
##  ~A * B 
## 
##            Deviance df Delta(Dev) Delta(df) P(> Delta(Dev)
## Model 1   0.3078289  1                                    
## Model 2   0.0000000  0  0.3078289         1        0.57902
## Saturated 0.0000000  0  0.0000000         0        1.00000

Jika p-value < 0.05, maka model independen tidak cukup menjelaskan data, dan interaksi diperlukan.

Simulasi Data

Dilakukan simulasi data yang kemudian akan dianalisisnmenggunakan log-linear model dengan interaksi dua dan tiga arah:

# Simulasi data tiga variabel
set.seed(53)
A <- factor(sample(c("Yes","No"), 500, replace=TRUE))
B <- factor(sample(c("Yes","No"), 500, replace=TRUE))
C <- factor(sample(c("Yes","No"), 500, replace=TRUE))
tbl3 <- table(A, B, C)

# Model saturated dan tanpa interaksi 3 arah
model_sat3 <- loglm(~ A * B * C, data = tbl3)
model_2way <- loglm(~ (A + B + C)^2, data = tbl3)

summary(model_sat3)
## Formula:
## ~A * B * C
## attr(,"variables")
## list(A, B, C)
## attr(,"factors")
##   A B C A:B A:C B:C A:B:C
## A 1 0 0   1   1   0     1
## B 0 1 0   1   0   1     1
## C 0 0 1   0   1   1     1
## attr(,"term.labels")
## [1] "A"     "B"     "C"     "A:B"   "A:C"   "B:C"   "A:B:C"
## attr(,"order")
## [1] 1 1 1 2 2 2 3
## 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
summary(model_2way)
## Formula:
## ~(A + B + C)^2
## attr(,"variables")
## list(A, B, C)
## attr(,"factors")
##   A B C A:B A:C B:C
## A 1 0 0   1   1   0
## B 0 1 0   1   0   1
## C 0 0 1   0   1   1
## attr(,"term.labels")
## [1] "A"   "B"   "C"   "A:B" "A:C" "B:C"
## attr(,"order")
## [1] 1 1 1 2 2 2
## attr(,"intercept")
## [1] 1
## attr(,"response")
## [1] 0
## attr(,".Environment")
## <environment: R_GlobalEnv>
## 
## Statistics:
##                       X^2 df  P(> X^2)
## Likelihood Ratio 2.689416  1 0.1010168
## Pearson          2.686626  1 0.1011939
anova(model_2way, model_sat3)
## LR tests for hierarchical log-linear models
## 
## Model 1:
##  ~(A + B + C)^2 
## Model 2:
##  ~A * B * C 
## 
##           Deviance df Delta(Dev) Delta(df) P(> Delta(Dev)
## Model 1   2.689416  1                                    
## Model 2   0.000000  0   2.689416         1        0.10102
## Saturated 0.000000  0   0.000000         0        1.00000

Kesimpulan

Untuk menyimpulkan, model log-linear adalah alat penting untuk menganalisis hubungan antara variabel kategorikal dalam tabel kontingensi. Model ini memungkinkan kita memodelkan hitungan sel yang diharapkan berdasarkan efek utama dan interaksi, memberikan wawasan tentang asosiasi dan ketergantungan di antara variabel.

Model jenuh menawarkan pas yang sempurna tetapi sering kali terlalu kompleks, sedangkan model independen mengasumsikan tidak ada asosiasi, yang mungkin tidak berlaku dalam praktik. Dengan membandingkan model yang berbeda dan menggunakan uji statistik, kita dapat menemukan keseimbangan antara pas dan kesederhanaan.

Rasio odds yang diturunkan dari model log-linear membantu mengkuantifikasi kekuatan dan arah asosiasi, dan estimasi parameter melalui maksimum likelihood memastikan model dipas dengan tepat.

Studi kasus, seperti yang pada penggunaan zat adiktif di kalangan siswa SMA, mengilustrasikan penerapan praktis model log-linear dalam memahami hubungan kompleks dalam data dunia nyata.

Kesimpulannya, model log-linear esensial untuk analisis data kategorikal, terutama saat menangani tabel kontingensi multi-arah, dan melengkapi metode lain seperti regresi logistik dengan memberikan perspektif berbeda pada data.

Daftar Pustaka