You are on page 1of 15

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

You might also like