Proporsi dan chi-square

Pengujian proporsi dengan prop.test dan tabel kategorikal dengan chisq.test.

Daftar isi

Data kategorikal tidak dirata-ratakan seperti data numerik, melainkan dihitung frekuensinya. Topik ini membahas dua alat pengujian untuk data semacam itu, yaitu prop.test() untuk membandingkan proporsi terhadap nilai acuan atau antar kelompok, dan chisq.test() untuk menguji hubungan dua variabel kategorikal pada tabel kontingensi. Setiap keluaran dibedah satu per satu, dan kesalahan yang paling sering terjadi pada pengujian ini ditutup dengan perbaikannya.

Pengujian satu proporsi dengan prop.test()#

Sebuah kuesioner sederhana meminta 120 siswa menjawab ya atau tidak terhadap usulan jam belajar tambahan. Sebanyak 78 siswa menjawab ya, sehingga proporsi sampelnya 0,65. Pertanyaan pengujian berbunyi apakah proporsi populasi yang mendukung berbeda dari 60 persen yang menjadi acuan pihak sekolah. Hipotesis nolnya menyatakan H0:p=0.6H_0: p = 0.6, sedangkan hipotesis alternatifnya menyatakan Ha:p≠0.6H_a: p \neq 0.6. Pembacaan statistik uji pada topik ini mengikuti pola yang sama dengan uji-t, yaitu membandingkan p-value dengan ambang 0,05.

r
library(tidyverse)

survei <- tibble(
  siswa = paste0("S", 1:120),
  jawaban = rep(c("ya", "tidak"), times = c(78, 42))
)
table(survei$jawaban)
text Keluaran
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.2.1     ✔ readr     2.2.0
✔ forcats   1.0.1     ✔ stringr   1.6.0
✔ ggplot2   4.0.3     ✔ tibble    3.3.1
✔ lubridate 1.9.5     ✔ tidyr     1.3.2
✔ purrr     1.2.2     
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors

tidak    ya 
   42    78 

Fungsi prop.test() menerima banyak kasus yang mendukung pada argumen x, banyak observasi pada argumen n, dan nilai acuan pada argumen p.

r
prop.test(x = 78, n = 120, p = 0.6)
text Keluaran

	1-sample proportions test with continuity correction

data:  78 out of 120, null probability 0.6
X-squared = 1.0503, df = 1, p-value = 0.3054
alternative hypothesis: true p is not equal to 0.6
95 percent confidence interval:
 0.5569559 0.7332917
sample estimates:
   p 
0.65 

Keluarannya berjudul 1-sample proportions test with continuity correction, dan koreksi kontinuitas itu membuat statistik uji sedikit lebih kecil daripada perhitungan tanpa koreksi. Nilai X-squared 1,0503 dengan df = 1 menghasilkan p-value 0,3054 yang jauh di atas 0,05. Dengan demikian hipotesis nol tidak ditolak, artinya data belum memberikan bukti yang cukup bahwa proporsi populasi berbeda dari 60 persen. Proporsi sampel 0,65 dengan interval kepercayaan 95 persen dari 0,56 sampai 0,73 memuat angka 0,6 di dalamnya, selaras dengan keputusan tersebut. Perlu dijaga bahwa gagal menolak hipotesis nol bukan berarti hipotesis nol terbukti benar, melainkan bukti terhadap perbedaannya memang belum cukup kuat.

Pengujian dua proporsi#

Proporsi dua kelompok dibandingkan dengan memberikan vektor pada argumen x dan n. Contohnya dua kelas yang menggunakan metode latihan berbeda, dengan kelas A meluluskan 42 dari 60 siswa dan kelas B meluluskan 33 dari 60 siswa. Hipotesis nol menyatakan kedua proporsi populasi sama, sehingga uji bertanya apakah selisih 0,70 berbanding 0,55 masih dapat dijelaskan oleh kebetulan sampling.

r
lulus <- c(42, 33)
total <- c(60, 60)
prop.test(lulus, total)
text Keluaran

	2-sample test for equality of proportions with continuity correction

data:  lulus out of total
X-squared = 2.2756, df = 1, p-value = 0.1314
alternative hypothesis: two.sided
95 percent confidence interval:
 -0.03781316  0.33781316
sample estimates:
prop 1 prop 2 
  0.70   0.55 

Keluaran menunjukkan X-squared 2,2756 dengan p-value 0,1314. Karena p-value berada di atas 0,05, hipotesis nol tidak ditolak dan selisih kelulusan kedua kelas belum dapat dinyatakan nyata. Interval kepercayaan 95 persen untuk selisih proporsinya berjalan dari -0,038 sampai 0,338, dan rentang yang memuat nol selaras dengan keputusan yang tidak menolak hipotesis nol. Dengan ukuran sampel 60 siswa per kelas, selisih 15 persen masih berada dalam wilayah kebetulan, sehingga kesimpulan yang lebih mantap menuntut data tambahan.

Banyaknya observasi pada kedua kelompok tidak harus sama. Apabila ukuran kelompoknya berbeda, argumen n cukup diisi dengan banyak observasi masing-masing kelompok, misalnya c(60, 45), dan uji tetap membandingkan proporsinya secara adil. Satu hal yang perlu dijaga adalah urutan vektornya, karena prop 1 pada keluaran mengikuti urutan argumen x, bukan urutan abjad maupun ukuran kelompoknya.

Tabel kontingensi dengan chisq.test()#

Apabila data berupa silang dua variabel kategorikal, uji chi-square memeriksa apakah kedua variabel saling berhubungan. Statistiknya dihitung dari selisih frekuensi yang diamati dan frekuensi yang diharapkan pada setiap sel, dengan OiO_i menyatakan frekuensi yang diamati dan EiE_i frekuensi yang diharapkan.

χ2=∑i=1k(Oi−Ei)2Ei \chi^2 = \sum_{i=1}^{k}\frac{(O_i - E_i)^2}{E_i}

Data kelulusan dua kelas di atas disusun sebagai tabel kontingensi berikut, satu baris per kelas dan satu kolom per hasil.

r
tabel <- matrix(c(42, 18, 33, 27), nrow = 2, byrow = TRUE)
rownames(tabel) <- c("Kelas A", "Kelas B")
colnames(tabel) <- c("Lulus", "Tidak lulus")
tabel
text Keluaran
        Lulus Tidak lulus
Kelas A    42          18
Kelas B    33          27
r
hasil_chi <- chisq.test(tabel)
hasil_chi
hasil_chi$expected
text Keluaran

	Pearson's Chi-squared test with Yates' continuity correction

data:  tabel
X-squared = 2.2756, df = 1, p-value = 0.1314

        Lulus Tidak lulus
Kelas A  37.5        22.5
Kelas B  37.5        22.5

Nilai X-squared 2,2756 dan p-value 0,1314 persis sama dengan hasil prop.test dua proporsi di atas, karena kedua uji itu setara secara matematis pada tabel 2x2. Komponen hasil_chi$expected menampilkan frekuensi harapan tiap sel yang dihitung dari proporsi marginal tabel, misalnya 37,5 untuk sel Lulus pada Kelas A. Derajat bebas uji ini dihitung dari (banyaknya baris dikurangi satu) dikalikan (banyaknya kolom dikurangi satu), sehingga tabel 2x2 selalu menghasilkan df = 1. Asumsi utama uji chi-square adalah frekuensi harapan yang cukup besar, dengan aturan praktis tidak ada sel yang diharapkan di bawah 5. Data contoh ini memenuhi aturan tersebut, sehingga hasil ujinya dapat dipercaya.

Kesalahan umum#

Kesalahan yang paling sering pada pengujian ini adalah memasukkan persentase ke chisq.test() alih-alih frekuensinya. Uji chi-square membandingkan jumlah kasus yang diamati dengan jumlah kasus yang diharapkan, sehingga masukannya wajib berupa hitungan kasus. Persentase tidak memicu pesan error apa pun, tetapi hasil ujinya menjadi menyesatkan, sebagaimana ditunjukkan berikut ini.

r
tabel_persen <- tabel / 60 * 100
tabel_persen
chisq.test(tabel_persen)
text Keluaran
        Lulus Tidak lulus
Kelas A    70          30
Kelas B    55          45

	Pearson's Chi-squared test with Yates' continuity correction

data:  tabel_persen
X-squared = 4.1813, df = 1, p-value = 0.04087

Tabel persentase menghasilkan X-squared 4,1813 dengan p-value 0,04087 yang tampak nyata, sedangkan uji pada frekuensi yang benar memberikan p-value 0,1314 yang tidak nyata. Kesimpulan yang berlawanan lahir dari data yang sama hanya karena satuannya diubah. Kesalahan berikutnya adalah mengabaikan frekuensi harapan yang kecil. Apabila ada sel dengan frekuensi harapan di bawah 5, chi-square menjadi tidak dapat diandalkan, dan perbaikannya adalah menggabungkan kategori yang jarang atau menggunakan uji eksak Fisher melalui fisher.test().

Kesalahan ketiga berupa menguji tabel yang sel-selnya dihitung ulang menjadi persentase per kolom. Persentase per kolom menghapus informasi ukuran kelompok, sehingga dua tabel dengan frekuensi yang sangat berbeda dapat menghasilkan persentase yang tampak sama. Perbaikannya adalah menghitung ulang tabel dari data mentah sebelum chisq.test() dipanggil.

Ringkasan#

  • prop.test(x, n, p) menguji satu proporsi terhadap nilai acuan, dan bentuk vektornya membandingkan proporsi dua kelompok.
  • chisq.test() menguji hubungan dua variabel kategorikal dari tabel frekuensi, dan hasil_chi$expected menampilkan frekuensi harapan tiap selnya.
  • Asumsi chi-square menuntut frekuensi harapan yang tidak ada satu pun di bawah 5.
  • Masukan chi-square wajib berupa hitungan kasus, bukan persentase, karena persentase tidak memicu error tetapi menghasilkan kesimpulan yang salah.

Referensi#