MODUL 2
TABEL KONTINGENSI DUA ARAH
2.1. Pendahuluan
Dalam modul ini akan dijelaskan mengenai asosiasi antara dua variabel dalam tabel kontingensi 2 x 2. Pembahasan meliputi pada selang kepercayaan (Confidence intervals), odds ratio dan resiko relatif (relative risk), pengujian perbedaan proporsi dan uji independensi menggunakan pendekatan normal (untuk sampel besar) atau prosedur Wolf. Secara umum untuk tabel kontingensi I x J, pengujian independensi variabel baris dan kolom menggunkan uji chi kuadrat termasuk statistik rasio kemungkinan (likelihood ratio statistic) dan statistik Chi-Kuadrat Pearson. Sebagai catatan apabila variabel baris dan kolom mempunyai kategori order maka yang digunakan pada hipotesis alternatif adalah trend.
2.2 Input Tabel Kontingensi dalam Software R
Ada banyak cara untuk membuat tabel kontingensi didalam software R. Setidaknya ada tiga cara dapat dilakukan untuk membentuk tabel kontingensi untuk contoh berikut mengenai penelitian kepercayaan seseorang mengenai adanya kehidupan setelah kematian (akhirat). Data disajikan dalam pada tabel berikut ini
Percaya Tidak Percaya Jumlah
Laki-Laki 375 134 509
Perempuan 435 147 582
Jumlah 810 281 1091
(1) Menggunakan fungsi Matrix
Cara pertama menginputkan data tersebut kedalam software R adalah menggunakan fungsi matriks yaitu dengan menganggap bahwa tabel tersebut adalah sebuah matriks, cara ini sama dengan menggunakan fungsi array. > afterlife <- matrix(c(375,134,435,147),nrow=2,byrow=TRUE) > afterlife [,1] [,2] [1,] 375 134 [2,] 435 147
Tentu saja matriks diatas tidak menggambarkan apa-apa sehingga kita beri nama masing-masing kolom dan berisnya.
> dimnames(afterlife) <- list(c("Laki-laki","Perempuan"),c("Percaya","Tidak")) > afterlife Percaya Tidak Laki-laki 375 134 Perempuan 435 147
Selain itu kita juga bisa memberikan nama variabel (atau faktor) dari kolom dan barisnya dengan cara sebagai berikut: > names(dimnames(afterlife)) <- c("JK","Kepercayaan") > afterlife Kepercayaan JK Percaya Tidak Laki-laki 375 134 Perempuan 435 147
secara keseluruhan (pij). > tot <- sum(afterlife) > tot [1] 1091 > afterlife/tot Kepercayaan JK Percaya Tidak Laki-laki 0.3437214 0.1228231 Perempuan 0.3987168 0.1347388
Untuk menghitung total masing-masing kolom (ni.) dan total masing-masing baris (n.j) dapat menggunakan
fungsi apply. Sedangkan untuk menghitung proporsi sel terhadap ni. (pi.) dan proporsi sel terhadap (p.j) dapat
menggunakan fungsi sweep.
> totBaris <- apply(afterlife,1,sum) > totKolom <- apply(afterlife,2,sum) > totBaris Laki-laki Perempuan 509 582 > totKolom Percaya Tidak 810 281 > Prop.Baris <- sweep(afterlife,1,totBaris,"/") > Prop.Baris Kepercayaan JK Percaya Tidak Laki-laki 0.7367387 0.2632613 Perempuan 0.7474227 0.2525773
> round(Prop.Baris,3) Kepercayaan JK Percaya Tidak Laki-laki 0.737 0.263 Perempuan 0.747 0.253 > Prop.Kolom <- sweep(afterlife,2,totKolom,"/") > Prop.Kolom Kepercayaan JK Percaya Tidak Laki-laki 0.462963 0.4768683 Perempuan 0.537037 0.5231317 > round(Prop.Kolom,3) Kepercayaan JK Percaya Tidak Laki-laki 0.463 0.477 Perempuan 0.537 0.523 (2) Menggunakan Data Frame
bentuk data frame dapat memperlakukan variabel baris dan variabel kolom sebagai faktor. Pendekatan ini sebenarnya lebih tepat apabila data disimpan dalam file terpisah yang dapat dibaca di R. Baris-baris berikut adalah contohnya > JK <- c("Wanita","Wanita","Pria","Pria") > Kepercayaan <- c("Ya","Tidak","Ya","Tidak") > Jumlah <- c(435,147,375,134) > afterlife <- data.frame(JK,Kepercayaan,Jumlah) > afterlife JK Kepercayaan Jumlah 1 Wanita Ya 435 2 Wanita Tidak 147 3 Pria Ya 375 4 Pria Tidak 134
> rm(JK,Kepercayaan,Jumlah) # tidak dibutuhkan lagi
Kita dapat membuat tabel kontingensi dengan memperlakukan data frame sebagai matriks atau menggunakan fungsi tapply dengan cara sebagai berikut:
> attach(afterlife) # mengunakan data frame afterlife > beliefs <- tapply(Jumlah,list(JK,Kepercayaan),c) > beliefs Tidak Ya Wanita 147 435 Pria 134 375
> detach(afterlife) # Kalau data tidak lagi dibutuhkan > names(dimnames(beliefs)) <- c("JK","Kepercayaan") > beliefs Kepercayaan JK Tidak Ya Wanita 147 435 Pria 134 375
> beliefs <- beliefs[,c(2,1)] # Menukar kolom > beliefs
Kepercayaan JK Ya Tidak Wanita 435 147 Pria 375 134
2.3 Membandingkan Proporsi Tabel 2 x 2
Secara umum data dapat di sajikan dalam berbagai cara berbeda. Untuk data kategori data dapat disajikan dalam tabel kontingensi 2 x 2 maupun dalam bentuk matriks. Untuk data yang disajikan dalam bentuk matriks perhatikan contoh berikut ini. Data yang digunakan adalah studi mengenai kesehatan psikologis pasien yang telah diberikan obat
> phs <- matrix(c(189,10845,104,10933),byrow=TRUE,ncol=2) > phs [,1] [,2] [1,] 189 10845 [2,] 104 10933 > dimnames(phs) <-+ list(Group=c("Placebo","Aspirin"),MI=c("Yes","No")) > phs MI Group Yes No Placebo 189 10845 Aspirin 104 10933
> prop.test(phs)
2-sample test for equality of proportions with continuity correction
data: phs
X-squared = 24.4291, df = 1, p-value = 7.71e-07 alternative hypothesis: two.sided
95 percent confidence interval: 0.004597134 0.010814914
sample estimates: prop 1 prop 2
0.01712887 0.00942285
Koreksi dalam statistik uji digunakan sebagai default dalam prop.test. Apabila koreksi ini tidak digunakan maka akan ada sedikit perbedaan dalam hasil (output) untuk contoh diatas seperti berikut ini:
> prop.test(phs,correct=F)
2-sample test for equality of proportions without continuity correction
X-squared = 25.0139, df = 1, p-value = 5.692e-07 alternative hypothesis: two.sided
95 percent confidence interval: 0.004687751 0.010724297
sample estimates: prop 1 prop 2
0.01712887 0.00942285
Selain itu output yang diperoleh juga dapat disimpan dan diubah sesuai dengan keinginan kita dengan beragam cara. Contoh untuk menyimpan output adalah sebagai berikut:
> phs.test <- prop.test(phs) > names(phs.test)
[1] "statistic" "parameter" "p.value" "estimate" [5] "null.value" "conf.int" "alternative" "method" [9] "data.name"
> phs.test$estimate prop 1 prop 2
> phs.test$conf.int [1] 0.004597134 0.010814914 attr(,"conf.level") [1] 0.95 > round(phs.test$conf.int,3) [1] 0.005 0.011 attr(,"conf.level") [1] 0.95
> phs.test$estimate[1]/phs.test$estimate[2] % relative risk prop 1
2.4 Odds Ratio
Resiko relatif (Relative risk) dan odds ratio secara mudah dapat dihitung dari tabel kontingensi 2 x 2 dengan berbagai cara. Berikut adalah contohnya:
> phs.test$estimate prop 1 prop 2 0.01712887 0.00942285 > odds <- phs.test$estimate/(1-phs.test$estimate) > odds prop 1 prop 2 0.017427386 0.009512485 > odds[1]/odds[2] prop 1 1.832054 > (phs[1,1]*phs[2,2])/(phs[2,1]*phs[1,2]) # as cross-prod ratio [1] 1.832054
Apabila kita akan membuat selang kepercayaan (Confident Interval) bagi odds ratio maka langkah-langkah berikut dapat digunakan:
> theta <- odds[1]/odds[2] > ASE <- sqrt(sum(1/phs)) > ASE
[1] 0.1228416
> logtheta.CI <- log(theta) + c(-1,1)*1.96*ASE > logtheta.CI
[1] 0.3646681 0.8462073 > exp(logtheta.CI)
[1] 1.440036 2.330790
Kita dapat membuat fungsi sederhana yang dapat dipanggil sewaktu-waktu untuk menghitung odds ratio dari tabel kontingensi 2 x 2 dengan cara sebagai berikut:
odds.ratio <- function(x, pad.zeros=FALSE, conf.level=0.95) { if (pad.zeros) {
if (any(x==0)) x <- x + 0.5 }
ASE <- sqrt(sum(1/x)) CI <- exp(log(theta) + c(-1,1) * qnorm(0.5*(1+conf.level)) *ASE ) list(estimator=theta, ASE=ASE, conf.interval=CI, conf.level=conf.level) }
Sehingga odds ratio dapat dihitung dengan cara sebagai berikut: > odds.ratio(phs) $estimator [1] 1.832054 $ASE [1] 0.1228416 $conf.interval [1] 1.440042 2.330780 $conf.level [1] 0.95