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("Lakilaki","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
Berikutnya yang dapat dilakukan adalah menghitung proporsi masing-masing sel terhadap total sampel (n)
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.
Adapun penggunaan kedua fungsi tersebut pada data adalah sebagai berikut
> 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 Salah satu struktur data yang sering digunakan dalam R adalah data frame, untuk tabel kontingensi dalam
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
375
134
> detach(afterlife) # Kalau data tidak lagi dibutuhkan > names(dimnames(beliefs)) <- c("JK","Kepercayaan") > beliefs Kepercayaan JK
Tidak
Ya
Wanita 147
435
Pria
375
134
> beliefs <- beliefs[,c(2,1)] # Menukar kolom > beliefs Kepercayaan JK
Ya
Tidak
Wanita 435
147
Pria
134
375
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 data: phs
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 0.01712887 0.00942285
> 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 1.817802
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 } theta <- x[1,1] * x[2,2] / ( x[2,1] * x[1,2] )
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