Professional Documents
Culture Documents
Data kategori setidaknya terdiri atas dua hal yaitu data yang diukur pada skala nominal
yang apabila diberikan nilai maka nilainya hanya berfungsi sebagai simbol dan tidak menyatakan
urutan dan data yang diukur pada skala nominal yang apabila diberikan nilai memberikan arti
urutan tetapi bukan nilai numerik tetapi hanya berupa simbol. Variabel kategori terkadang disebut
juga variabel diskrit karena nilainya hanya diperoleh dengan cara mencacah.
Dalam Agresti (2007) tiga distribusi utama yang dapat digunakan untuk data kategori
yaitu:
1.
Binomial yaitu distribusi yang menyatakan banyaknya percobaan yang saling bebas dari
percobaan bernoulli yang memiliki hasil biner (terdiri hanya dua kategori: sukses atau
gagal). Peluang sukses (p) adalah tetap untuk setiap percobaan dan variabel X
menyatakan banyaknya sukses dari seluruh percobaan (n).
2.
Multinomial merupakan perluasan dari distribusi binomial akan tetapi mempunyai hasil
percobaan lebih dari dua.
3.
Poisson adalah distribusi yang menyatakan banyaknya peristiwa yang terjadi dalam waktu
yang lama (jangka panjang) yang setiap kejadiannya saling bebas. Dengan kata lain
Distribusi Poisson dapat dikatakan sebagai distribusi untuk peristiwa yang jarang terjadi.
1.1 Distribusi Peluang Diskrit dalam R
Software R come mendukung banyak distribusi peluang baik diskrit yaitu Poisson,
negative binomial, geometric, hypergeometric, dan uniform diskrit. Selain itu juga ada beberapa
distribusi-distribusi peluang khusus yang dapat diperoleh dari website CRAN seperti negatifbinomial
yang terdapat pada fungsi rnegbin() paket MASS, beta-binomial terdapat pada paket
rmutil dan gnlm dan masih banyak lagi.
Setiap distribusi peluang mempunyai fungsi untuk memperoleh peluang kumulatif, nilai
densitas dan kuantil. Selain itu juga bisa membangkitkan data (random data) dari distribusi
1
tersebut. Berikut adalah beberapa fungsi yang dapat digunakan untuk menghitung nilai-nilai dari
distribusi di dalam R.
> dmultinom(x, p)
> rmultinom(n, size, prob)
Contoh:
2
dan gagal terhingga yang digunakan. Banyak sukses dan gagal harus bernilai positif dan tidak
lebih besar dari banyaknya percobaan dan nilai setiap sel harus bertipe integer. Jika nilai peluang
sukses “p” tidak didefinisikan dan terdiri lebih dari satu kelompok maka hipotesisi nol yang
digunakan adalah proporsi tiap kelompok adalah sama. Apabila ada dua kelompok, hipotesis
alternatif adalah bahwa peluang sukses pada kelompok satu lebih kecil, tidak sama atau lebih
besar dari peluang sukses pada kelompok kedua dengan derajat kepercayaan sebesar nilai
‘conf.level’. Apabila ada lebih dari dua kelompok hipotesis alternatif yang digunakan selalu tidak
sama atau "two.sided".
Jika hanya ada satu kelompok maka hipotesis nol yang digunakan dalam pengujian adalah
sama dengan nilai 'p' atau 0.5 apabila nilai 'p' tidak didefinisikan. Hipotesis alternatif hipotesis
alternatif adalah bahwa peluang sukses pada kelompok satu lebih kecil, tidak sama atau lebih
besar dari 'p' atau '0.5' apabila nilai 'p' tidak didefinisikan. Selang kepercayaan untuk proporsi
dihitung dengan derajat kepercayaan sebesar ‘conf.level’.
Keterangan:
x: adalah vektor banyak sukses atau berupa tabel satu dimensi dengan dua
taraf atau tabel dua dimensi (atau matriks) dengn dua kolom berisi
banyak sukses dan gagal.
n: adalah vektor banyaknya percobaan, diabaikan apabila 'x' adalah
matriks atau tabel.
p: adalah vektor peluang sukses. Panjang vektor p harus sama dengan
banyaknya kelompok yang bersesuaian dengan vektor x dan nilainya
harus lebih besar dari nol dan lebih kecil dari 1.
alternative: adalah hipotesis alternatif yang digunakan yaitu "two.sided"
(default) untuk tidak sama, "greater" untuk lebih besar atau "less"
3
untuk lebih kecil. Dapat pula menggunakan huruf inisialnya saja.
Opsi ini hanya digunakan untuk pengujian satu sampel dengan
hipotesis sama dengan nilai tertentu, atau pada pengujian kesamaan
dua proporsi.
parameter: adalah derajat kebebasan yang digunakan pada statistik uji yang
mengikuti distribusi chi-kuadrat.
conf.int: adalah selang kepercayaan untuk proporsi satu sampel atau untuk
perbedaan proporsi dua sampel Selang kepercayaan untuk proporsi
dihitung dengan derajat kepercayaan sebesar ‘conf.level’ yang telah
didefinisikan.
null.value: adalah nilai spesifik ‘p’ pada hipotesis nol.
4
Contoh
Pengamat ekonomi memiliki dugaan bahwa 70% perusahaan besar di Indonesia dimiliki oleh
warga negara asing. Untuk membuktikan dugaannya, diambil sampel acak 210 perusahaan yang
digolongkan perusahaan besar. Dari 210 perusahaan besar sebanyak 130 perusahaan dimiliki oleh
Orang Asing. Dengan tingkat signifikansi sebesar 0.05 Lakukan pengujian hipotesisnya!
0.5493720 0.6842925
sample estimates:
p
0.6190476
Karena p-value lebih kecil dari 0.05 maka hipotesis ditolak. Artinya, proporsi sampel tidak sama
dengan 0.7 sehingga kesimpulannya tidak cukup alasan untuk setuju dengan pendapat ahli
ekonomi tersebut dengan keyakinan 95%.
> ztes.prop<-function(x,n,p,conf.level){
> prop=x/n
> alpha=1-conf.level
> zstar=qnorm(1-alpha/2)
> SE=(prop*(1-prop)/n)^0.5
> zhitung=(prop-p)/SE
> pvalue=1-pnorm(abs(zhitung))
> BB=(prop1-prop2)-zstar*SE
5
> BA=(prop1-prop2)+zstar*SE
> Ringkasan<data.
frame(n=c(n),sukses=c(x),proporsi=c(prop),StandarError=c(SE),
> zhitung=c(zhitung),pvalue=c(pvalue),BatasAtas=c(BA),BatasBawah=c(BB))
> Ringkasan$Kesimpulan<-ifelse(Ringkasan$pvalue>=0.05,c("H0 Diterima"),c("Ho
Ditolak"))
> print(Ringkasan)
>}
>prop.test(c(a,b),c(n1,n2))
keterangan:
Contoh
Suatu kegiatan survey dilakukan sebanyak dua kali untuk mengetahui apakah ada perbedaan
pilihan masyarakat terhadap calon tertentu dalam pemilihan presiden. Data disajikan sebagai
berikut:
Minggu ke 1 Minggu ke 2
Memilih 45 56
Tidak Memilih 35 47
6
Dengan tingkat signifikansi 5% lakukan pengujian apakah terdapat perbedaan proporsi minggu 1
dan minggu 2
> prop.test(c(45,56),c(45+35,56+47))
-0.1374478 0.1750692
sample estimates:
prop 1 prop 2
0.5625000 0.5436893
Karena p-value lebih besar dari 0.05 maka hipotesis diterima. Artinya, proporsi sampel 1 tidak
berbeda dengan sampel 2 sehingga kesimpulannya dengan keyakinan 95% sampel 1 tidak
berbeda nyata dengan sampel 2.
Seperti pada kasus satu asmpel pengujian proporsi dalam software R merupakan
pengujian proporsi menggunakan uji chi-kuadrat. Pendekatan lain untuk menguji proporsi adalah
menggunakan statistik uji Z. Secara default R tidak menyediakan uji proporsi menggunakan
statiistik Z. tetapi dalam R dimungkinkan untuk membuat fungsi yang dapat digunakan untuk
menguji proporsi dengan statistik uji Z. Berikut adalah contoh pembuatan fungsi pengujian
proporsi dua sampel.
> ztes.prop2<-function(x1,x2,n1,n2,conf.level){
> prop1=x1/n1;prop2=x2/n2
> alpha=1-conf.level
> zstar=qnorm(1-alpha/2)
> SE=(prop1*(1-prop1)/n1+prop2*(1-prop2)/n2)^0.5
> zhitung=(prop1-prop2)/SE
> pvalue=1-pnorm(abs(zhitung))
> BB=(prop1-prop2)-zstar*SE
> BA=(prop1-prop2)+zstar*SE
>Ringkasan<-data.frame(n=c(n1,n2),sukses=c(x1,x2),proporsi=c(prop1,prop2),StandarError=c(S
E),
> zhitung=c(zhitung),pvalue=c(pvalue),BatasAtas=c(BA),BatasBawah=c(BB))
> Ringkasan$Kesimpulan<-ifelse(Ringkasan$pvalue>=0.05,c("H0 Diterima"),c("Ho
Ditolak"))
> print(Ringkasan)
>}
8
MODUL 2
TABEL KONTINGENSI
2.1. Pendahuluan
Dalam modul ini akan dijelaskan mengenai asosiasi antara dua variabel dalam tabel
kontingensi. 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.
9
> 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.
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:
Kepercayaan
JK Percaya Tidak
[1] 1091
> afterlife/tot
10
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. Penjelasan mengenai fungsi apply adalah sebagai berikut
Deskripsi:
Penggunaan:
Keterangan:
FUN: Fungsi yang akan digunakan seperti '+”, %*%', 'sum' dan lain-lain.
Hasil:
Apabila pada setiap memanggil 'FUN' menghasilkan sebuah vektor dengan 'n'
elemen, maka 'apply' menghasilkan array berdimensi ‘c(n, dim(X)[MARGIN])’
apabila ‘n > 1’. Jika 'n = 1' fungsi 'apply' akan menghasilkan vektor
jika 'MARGIN' mempunyai panjang 1 dan array berdimensi ‘dim(X)[MARGIN]’
jika selainnya. Apabila n bernilai '0' maka hasil yang diperoleh akan
berdimensi '0' juga. Jika saat memanggil 'FUN' menghasilkan vektor-vektor
berdimensi berbeda, fungsi 'apply' akan menghasilkan list dari
‘prod(dim(X)[MARGIN])’ dengan ‘dim’ di set sama dengan ‘MARGIN’ jika
panjangnya lebih besar dari satu.
11
Sedangkan untuk menghitung proporsi sel terhadap ni. (pi.) dan proporsi sel terhadap (p.j) dapat
menggunakan fungsi sweep. Berikut penjelasan mengenai fungsi tersebut
Deskripsi:
Menghasilkan sebuah array yang diperoleh dari input array dengan
melakukan 'sweeping' (penyapuan) ringkasan statistik.
Penggunaan:
sweep(x, MARGIN, STATS, FUN="-", check.margin=TRUE, ...)
Keterangan:
x: sebuah array.
MARGIN: sebuah vektor yang mengindikasikan tingkatan dari 'x' yang berkaitan
dengan ‘STATS’.
STATS: ringkasan statistik yang akan digunakan.
FUN: Sebuah fungsi yang akan digunakan dalam penyapuan. Dalam kasus
operator biner seperti “/” dan lain-lain, nama fungsi harus
menggunakan tanda kutip.
check.margin: Bernilai ‘TRUE’ (default), atau 'FALSE'
Hasil: Sebuah array dengan bentuk yang sama dengan 'x' tetapi berisi hasil
Adapun penggunaan kedua fungsi tersebut pada data adalah sebagai berikut
12
Laki-laki Perempuan
509 582
> totKolom
Percaya Tidak
810 281
> (Prop.Baris <-sweep(afterlife,1,totBaris,"/"))
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
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
> JK <-c("Wanita","Wanita","Pria","Pria")
> Kepercayaan <-c("Ya","Tidak","Ya","Tidak")
> Jumlah <-c(435,147,375,134)
> afterlife <-data.frame(JK,Kepercayaan,Jumlah)
13
> 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:
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
14
> 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:
15
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$estimate
prop 1 prop 2
0.01712887 0.00942285
> odds <-phs.test$estimate/(1-phs.test$estimate)
16
> odds
prop 1 prop 2
0.017427386 0.009512485
> odds[1]/odds[2]
prop 1
1.832054
[1] 1.832054
Apabila kita akan membuat selang kepercayaan (Confident Interval) bagi odds ratio maka
langkah-langkah berikut dapat digunakan:
[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(phs)
$estimator
[1] 1.832054
$ASE
[1] 0.1228416
$conf.interval
[1] 1.440042 2.330780
$conf.level
[1] 0.95
2.5 Uji Independensi Chi-Kuadrat
Uji Independensi Chi-Kuadrat (statistik Pearson’s chi-squared test) dapat dihitung
menggunakan fungsi chisq.test berikut dengan p-valuenya. Tabel berikut adalah data Survei
Sosial Umum mengenai klasifikasi silang antara jenis kelamin dengan pemilihan partai politik.
Responden adalah penduduk yang dipilih dalam survei dan lebih cenderung memilih partai
Demokrat atau Republik atau mungkin tidak memilih. Pada tabel juga disertakan nilai ekspektasi
dari setiap sel (berada didalam kurung)
Jenis
Kelamin
Pilihan Partai
Total Demokrat Tidak
Memilih
Republik
Wanita
762 327 468 1557
(703.7) (319.6) (533.7)
Pria
484 239 477 1200
(542.3) (246.4) (411.3)
Total 1246 566 945 2757
18
Untuk data tersebut aplikasi untuk statistik ini adalah sebagai berikut:
+ Partai=c("Demokrat","Tidak Memilih","Republik"))
> JK.partai
Partai
JK Demokrat Tidak Memilih Republik
Apabila ada kekhawatiran akan pendekatan chi-kuadrat terhadap distribusi sampling dari
statistik uji, kita dapat membuat suatu simulasi untuk menentukan pendekatan nilai p-value atau
bisa menggunakan uji eksak.
Uraian berikut ini menjelaskan bagaimana simulasi dilakukan untuk menentukan nilai
pendekatan p-value. Banyaknya pengulangan dalam simulasi ini secara default adalah 2000 tetapi
kita dapat mengubahnya dengan nilai yang lain. Tentu saja semakin banyak ulangannya simulasi
akan semakin baik. Tetapi semakin banyak ulangan akan menggunakan waktu dan memori yang
lebih besar. Hal penting dalam studi simulasi adalah mendapatkan nilai yang konvergen dalam
waktu yang lebih cepat (atau dengan kata lain ulangan yang lebih sedikit). Simulasi dalam contoh
ini nilai pendekatan p-value mendekati nilai pendekatan chi-kuadrat.
> chisq.test(JK.partai,simulate.p.value=TRUE,B=10000)
Pearson’s Chi-square test with simulated p-value
(based on 10000 replicates)
data: JK.partai
X-squared = 7.0095, df = NA, p-value = 0.032
> chisq.test(JK.partai,simulate.p.value=TRUE,B=10000)
Pearson’s Chi-square test with simulated p-value
(based on 10000 replicates)
data: JK.partai
X-squared = 7.0095, df = NA, p-value = 0.0294
19
Uji eksak Fisher untuk tabel kontingensi terdapat dalam fungsi fisher.test dari paket ctest
(classical tests). Paket ini disertakan dalam bagian dari distribusi dasari dari R dan secara
otomatis sudah dapat dipergunakan pada saat fungsinya dipanggil. Uji eksak Fisher juga dapat
digunakan untuk tabel yang lebih umum yaitu tabel I x J.
Dalam contoh berikut mengenai kepuasan kerja digunakan penggunaan uji Chi-Kuadrat,
pendekatan simulasi dan Uji eksak Fisher.
Penghasilan
Kepuasan Kerja
Total Tidak
Puas
Kurang
Puas
Puas Sangat
Puas
< 5 2 4 13 3 22
5 – 15 2 6 22 4 34
15 – 25 0 1 15 8 24
> 25 0 3 13 8 24
Total 4 14 63 23 104
20
15-25 0 1 15 8
>25 0 3 13 8
> chisq.test(puas)
> chisq.test(puas,simulate.p.value=TRUE,B=10000)
Pearson’s Chi-square test with simulated p-value
(based on 10000 replicates)
data: puas
X-squared = 11.5243, df = NA, p-value = 0.2408
> fisher.test(puas)
Fisher’s Exact Test for Count Data
data: puas
p-value = 0.2315
alternative hypothesis: two.sided
21
rowprop <-sweep(x,1,rowsum,"/")
colprop <-sweep(x,2,colsum,"/")
expected <-(matrix(rowsum) %*% t(matrix(colsum))) / total
dimnames(expected) <-dimnames(x)
resid <-(x-expected)/sqrt(expected)
adj.resid <-resid /
sqrt((1-matrix(rowsum)/total) %*% t(1-matrix(colsum)/total))
df <-prod(dim(x)-1)
X2 <-sum(residˆ2)
attr(X2,"P-value") <-1-pchisq(X2,df) # Perhatikan Nilai frekuensi yang nol.
tmp <-x*log(x/expected)
tmp[x==0] <-0
G2 <-2 * sum(tmp)
attr(G2,"P-value") <-1-pchisq(G2,df)
list(sample.size=total,row.totals=rowsum,
col.totals=colsum, overall.proportions=prop,
row.proportions=rowprop, col.proportions=colprop,
expected.freqs=expected, residuals=resid,
adjusted.residuals=adj.resid, chi.square=X2,
likelihood.ratio.stat=G2, df=df)
Kita dapat menyimpan fungsi ini ke dalam software R sehingga dapat digunakan kembali pada
saat dibutuhkan. Berikut adalah contohnya setelah fungsi tersebut disimpan dengan nama
“procfreq.R” kemudian dipanggil kembali untuk digunakan dengan cara sebagai berikut dan
digunakan dalam data kepuasan kerja:
> source("procfreq.R")
> puas.freq <-procfreq(puas)
> names(puas.freq)
[1] "sample.size" "row.totals"
[3] "col.totals" "overall.proportions"
[5] "row.proportions" "col.proportions"
[7] "expected.freqs" "residuals"
[9] "adjusted.residuals" "chi.square"
[11] "likelihood.ratio.stat" "df"
22
> puas.freq$expected
Kepuasan.Kerja
Penghasilan TP KP P SP
<5 0.8461538 2.961538 13.32692 4.865385
5-15 1.3076923 4.576923 20.59615 7.519231
15-25 0.9230769 3.230769 14.53846 5.307692
>25 0.9230769 3.230769 14.53846 5.307692
> round(puas.freq$adjusted.residuals,2)
Kepuasan.Kerja
Penghasilan TP KP P SP
Contoh
Data berikut diambil dari buku Agresti (2007) pada bagian 2.5.2. Data mengenai studi
prospektif dari ibu yang peminum dan cacat bawaan. Setelah 3 bulan pertama kehamilan, wanita
23
yang di sampel melengkapi kuesioner mengenai konsumsi alkohol. Seiring kelahiran bayi,
pengamatan dicatat ada tidaknya cacat organ kelamin bawaan. Konsumsi alkohol, diukur sebagai
rata-rata banyaknya minum per hari yang dicatat berskala ordinal. Cacat bawaan di ukur sebagai
variabel biner. Tabel berikut merupakan hasil dari pengamatan
Sumber Data : B. I. Graubard and E. L. Korn, Biometrics, 43: 471–476, 1987. Reprinted with
permission from the Biometric Society.
Untuk menguji independensi antar variabel baris dan kolom pada data Tabel 2.4
digunakan Statistik uji M2. Untuk itu diberikan skor untuk variabel cacat bawaan (kolom): 'Ya'
=1 dan 'Tidak' = 0 dan untuk variabel konsumsi alkohol (baris): '0' = 0, '< 1' = 0.5, '1 - 2' = 1.5, '3
-5' = 4, '>= 6' = 7. dengan nilai skor ini kita dapat menghitung korelasi antara variabel baris
dengan variabel kolom sebagai berikut
Cacat
Alkohol Tidak Ya
0 17066 48
<1 14464 38
1-2 788 5
3-5 126 1
>=6 37 1
24
## skor untuk baris dan kolom
> u=c(0,1)
> v=c(0,0.5,1.5,4,7)
> prop.tot=cacat/sum(cacat)
> prop.row=apply(prop.tot,1,sum)
> prop.col=apply(prop.tot,2,sum)
> u.rat=sum(u*prop.col)
> v.rat=sum(v*prop.row)
## Korelasi
[1] 0.01420207
## Statistik Uji M2
> M2<-(sum(cacat)-1)*r^2
> 1-pchisq(M2,1) # p-value
[1] 0.01037159
## Pendekatan normal untuk sampel besar
> (M=sqrt(M2))
[1] 2.563188
> 1-pnorm(M) # p-value
[1] 0.005185795
Untuk statistik M2 kita dapat membuat fungsi agar dapat digunakan pada tabel yang lebih
umum. Berikut contoh fungsi yang dapat diaplikasikan pada tabel kontingensi I x J yang berskala
ordinal.
25
u.rat)^2*prop.col)*sum((v-v.rat)^2*prop.row))
M2<-(sum(x)-1)*r^2
attr(M2,"P-value")<-1-pchisq(M2,1)
M<-sqrt(M2)
attr(M,"P-value")<-1-pnorm(M)
list(korelasi=r,
stat.uji.M2=M2,
stat.uji.M=M)
}
> tren.test(cacat, u, v)
$korelasi
[1] 0.01420207
$stat.uji.M2
[1] 6.569932
attr(,"P-value")
[1] 0.01037159
$stat.uji.M
[1] 2.563188
attr(,"P-value")
[1] 0.005185795
2.7 Uji Eksak untuk Ukuran Sampel Kecil
Contoh berikut diambil dari buku Agresti (2007) Bagian 2.6.2. Pada saat meminum teh,
kolega Fisher di Stasiun Eksperimen Rothamsted dekat London mengkalim bahwa dia dapat
membedakan apakah susu atau the yang ditambahkan ke dalam cangkir pertama kali. Untuk
menguji hal tersebut Fisher merancang suatu percobaan sebagai berikut empat buah cangkir
ditambahkan susu pertama kali dan empat buah cangkir lainnya ditambahkan teh pertama kali.
Kemudian kedelapan cangkir tersebut diacak dan diberikan kepada koleganya untuk di rasakan
dan dia memberikan penilaian terhadap cangkir tersebut. Data mengenai percobaan rasa the
disajikan dalam tabel berikut ini.
26
Table 2.4. Percobaan Rasa Teh
Cangkir
Tamu
Susu Teh Total
Susu 3 1 4
Teh 1 3 4
Total 4 4 8
Penggunaan uji Eksak Fisher untuk data Rasa Teh dijelaskan dalam baris-baris berikut ini
> library(ctest)
> teh
Tamu
susu 31
teh 13
> fisher.test(teh)
Fisher’s Exact Test for Count Data
data: teh
p-value = 0.4857
0.2117329 621.9337505
sample estimates:
odds ratio
6.408309
> fisher.test(teh,alternative="greater")
data: teh
p-value = 0.2429
alternative hypothesis: true odds ratio is greater than 1
0.3135693 Inf
sample estimates:
odds ratio
6.408309
27
2.8 Tabel Kontingensi Tiga Arah
Salah satu bagian penting dalam suatu penelitian adalah memilih variabel kontrol. Dalam
mengamati pengaruh variabel penjelas X terhadap variabel respon Y seharusnya kita
menyesuaikan variabel-variabel (Z) yang dapat mempengaruhi hubungan tersebut karena
variabel-variabel tersebut (Z) berhubungan dengan X dan Y. Dengan kata lain asosiasi X dan Y
mungkin hanya menggambarkan efek dari variabel-variabel (Z) tersebut terhadap X dan Y.
Bagian cross-sectional dua arah dari tabel klasifikasi silang tiga arah X dan Y pada taraf
terpisah dari Z. Cross-sections ini disebut sebagai tabel parsial. Tabel parsial menunjukkan
hubungan X dengan Y pada taraf tetap Z, sehingga terlihat efek X terhadap Y pada saat di kontrol
oleh Z. Tabel parsial mengabaikan efek dari Z dengan menetapkan nilainya sebagai konstanta.
Tabel kontingensi dua-arah hasil dari kombinasi tabel parsial disebut sebagai tabel
marginal XY. Setiap isi sel adalah jumlah dari isi sel-sel pada lokasi yang sama dalam tabel
parsial. Tabel marginal tidak berisi informasi mengenai Z. Dengan demikian hubungan tabel dua
arah X dan Y disederhanakan. Metode-metode yang digunakan dalam tabel dua arah tidak dapat
menghitung pengaruh dari variabel lain. Asosiasi dalam tabel parsial disebut asosiasi bersyarat,
karena menjelaskan tentang efek X terhadap Y bersyarat pada Z yang tetap pada suatu taraf.
Asosiasi bersyarat dalam tabel parsial dapat menghasilkan kesimpulan yang sangat berbeda
dibandigkan dengan asosiasi dalam tabel marginal.
Contoh berikut diambil dari Agresti (2007) bagian 2.7.2. Data mengenai “The Death
Penalty” disajikan dalam tabel 2 x 2 x 2 berikut ini
Tabel 2.5. Death Penalty Verdict by Defendant’s Race and Victims Race
Defendant
, , Victim = black
Defendant
defendant
29
, , victim = black
defendant
Victim Defendant
> library(vcd)
> summary(oddsratio(dp, log=F, stratum=3))
Odds Ratio
white 0.4306
black 0.9394
Catatan: Nilai Odds ratio untuk korban “black” yang dihasilkan fungsi “oddsratio” berbeda
dengan nilai yang dihasilkan oleh fungsi “apply” karena dalam fungsi “oddsratio” menambahkan
0.5 pada setiap sel apabila ada sel yang bernilai nol.
## pengujian independensi
> mantelhaen.test(dp)
Mantel-Haenszel chi-square test with continuity correction
data: dp
Mantel-Haenszel X-square = 4.779, df = 1, p-value = 0.02881
> mantelhaen.test(dp,correct=FALSE)
30
Mantel-Haenszel chi-square test without continuity correction
data: dp
Mantel-Haenszel X-square = 5.7959, df = 1, p-value = 0.01606
Contoh berikut mengenai percobaan yang dilakukan di dua buah klinik dengan memberikan
perlakuan terhadap responden dan kemudian diukur berhasil tidaknya perlakuan tersebut. Data
dimabil dari Agresti (2007) bagian 2.7.5 sebagai berikut
Klinik Perlakuan
Respon
Berhasil Gagal
1
A 18 12
B 12 8
2
A28
B 8 32
Total
A 20 20
B 20 40
, , klinik = K2
31
respon
Odds Ratio
K1 1
K2 1
Terlihat bahwa dari hasil perhitungan nilai odds ratio untuk kedua klinik sama besar yaitu
1. Hal ini mengindikasikan bahwa variabel perlakuan independen secara bersyarat terhadap
respon. Apabila kita mengabaikan adanya Klinik maka kita dapat menghitung odds ratio dengan
cara sebagai berikut
> ktot<-xtabs(jumlah~perlakuan+respon,data.kl)
> ktot
respon
Dari hasil ini terlihat bahwa nilai odds ratio adalah 2 yang berarti pelakuan tidak saling
bebas secara marginal dengan respon. Hal ini menunjukkan bahwa meskipun secara suatu
variabel (X) saling bebas dengan variabel (Y) pada suatu taraf tetap sebuah variabel lain (Z) tidak
menjadikan varibel (X) saling bebas dengan variabel (Y) secara marginal. Artinya mengabaikan
keberadaan Klinik pada Tabel 2.6 akan memberikan kesimpulan yang keliru.
32
MODUL 3
Dalam Agresti (2007) Bab II Chapter 2 dijelaskan metode untuk menganalisis tabel
kontingensi. Metode-metode tersebut membantu kita menjelaskan pengaruh variabel penjelas
terhadap variabel respon kategori. Bagian lain dari Agresti (2007) ini membahas model-model
sebagai dassar analisis. Pada kenyataannya metode-metode pada Bab II juga menghasilkan
simpulan dari analisis dari data kategori, tetapi model dapat menangani situasi yang lebih rumit
seperti analisis dari beberapa variabel penjelas secara simultan.
Model yang fit memiliki beberapa keuntungan. Struktur persamaan dari model
menjelaskan pola dan interaksi diantara variabel. Besaran nilai parameter menjelaskan kekuatan
atau kepentingan pengaruh suatu variabel. Inferensi parameter variabel mengevaluasi variabel
penjelas mana yang memiliki pengaruh terhadap respon. Model juga digunakan untuk
memprediksi data dan menyempurnakan taksiran rata-rata respon pada suatu nilai variabel
penjelas.
Model-model dalam agresti (2007) menampilkan generalized linear model. Secara garis
besar model-model meliputi regresi biasa dan Analisis Varians (ANOVA) dengan respon kontinu
sebaik model-model dengan respon diskrit. Bab III dalam Agresti (2007) membahas generalized
linear models untuk data dengan respon kategori dan respon diskrit yang lain.
1.
Komponen Acak: Diidentifikasi oleh variabel respon (Y) dan diasumsikan memiliki
distribusi.
2.
Komponen sistematik: Meliputi variabel-variabel penjelas dari model.
3.
Fungsi penghubung (link function): yaitu suatu fungsi yang menjelaskan nilai ekspektasi
dari variabel respon (Y) yang menghubungkan dengan variabel-variabel penjelas melalui
persamaan linier.
33
g(µ) = ß0 + ß1X1 + … + ßkXk
Fungsi penghubung akan menentukan model yang akan digunakan dalam GLM. Fungsi
penghubung paling sederhana adalah g(µ)= µ disebut sebagai penghubung identitas (identity
link). Apabila GLM memiliki fungsi penghubung paling sederhana maka GLM merupakan model
regresi linier tentunya dengan respon kontinu. Fungsi penghubung yang lain akan
menghubungkan µ secara nonlinier terhadap prediktor
Penggunaan:
Keterangan:
family: adalah distribusi dari error berserta link function yang digunakan
dalam model. Untuk regresi logit “binomial”, probit
“binomial(probit)”, model loglinier “poisson”
data: input data berupa data frame berisi variabel-variabel dalam model
weights: (optional) berupa vektor bobot yang digunakan pada saat fit regresi
logistik dengan input respon berupa proporsi
subset: (optional) berupa vektor yang berisi subset pengamatan yang akan
digunakan dalam proses fitting.
34
na.action: fungsi yang digunakan dalam penanganan data hilang
start: nilai awal untuk taksiran parameter dalam prediktor linier.
etastart: nilai awal untuk prediktor linier.
mustart: nilai awal untuk vektor rata-rata.
model: berisi nilai logika yang mengindikasikan model yang akan disertakan
sebagai komponen dari model.
method: metode yang digunakan untuk fitting model. Secara default
metode yang diguanakan adalah ‘"glm.fit"’ yang menggunakan
sebaliknya
35
null.deviance: nilai devians dibawah hipotesis nol
Secara umum metode penaksiran yang digunakan dalam fungsi glm adalah iteratively
reweighted least squares (IWLS) yang menggunakan metode Fisher scoring untuk optimasinya.
Untuk metode lain seperti kemungkinan maksimum dan metode optimasi Newton-Rhapson untuk
optimasinya tidak diimplementasiakn dalam fungsi ini. Dengan demikian kita harus
menggunakan fungsi lain seperti fungsi optim atau kita dapat membuat fungsi sendiri atau
menggunakan fungsi yang telah dibuat oleh orang lain seperti fungsi berikut ini (Venables &
Ripley, 2002)
fmin <-function(beta, X, y, w)
p <-plogis(X %*% beta) -sum(2 * w * ifelse(y, log(p), log(1-p)))
gmin <-function(beta, X, y, w) {
eta <-X %*% beta; p <-plogis(eta)
t(-2 * (w *dlogis(eta) * ifelse(y, 1/p, -1/(1-p))))%*% X
}
36
cat("\nCoefficients:\n"); print(fit$par)
cat("\nResidual Deviance:", format(fit$value), "\n")
cat("\nConvergence message:", fit$convergence, "\n")
invisible(fit)
}
Untuk model linier probability ubah bagian yang diberi tanda “bagian yang dapat diubah” dengan
fungsi berikut ini
fmin <-function(beta, X, y, w)
p <-X %*% beta -sum(2 * w * ifelse(y, log(p), log(1-p)))
gmin <-function(beta, X, y, w) {
p <-X %*% beta;
t(-2 * (w * ifelse(y, 1/p, -1/(1-p))))%*% X
}
Untuk model probit ubah bagian yang diberi tanda “bagian yang dapat diubah” dengan fungsi
berikut ini
fmin <-function(beta, X, y, w) {
p <-X %*% beta
-sum(2 * w * ifelse(y, log(p), log(1-p)))
}
gmin <-function(beta, X, y, w) {
p <-X %*% beta;
t(-2 * (w * ifelse(y, 1/p, -1/(1-p))))%*% X
}
37
pengamatan Y akan mengikuti distribusi Bernoulli. Dengan demikian untuk n pengamatan yang
saling bebas, banyak “sukses” akan memiliki distribusi Binomial dengan parameter p .
Dalam bagian ini kita akan membahas GLM dengan respon biner dengan sebuah variabel
penjelas (X) saja meskipun sebenarnya GLM dapat digunakan untuk variabel penjelas lebih dari
satu. Perubahan nilai p dipengaruhi oleh perubahan X.
Dengkuran
Penyakit Jantung Proporsi
Ya Ya Tidak
Tidak Pernah 24 1355 0,017
Kadang-kadang 35 603 0,06
Sering 21 192 0,1
Selalu 30 224 0,12
Sumber: P. G. Norton and E. V. Dunn, Br. Med. J., 291: 630–632, 1985,
published by BMJ Publishing Group.
Analisis untuk data tersebut dilakukan untuk nilai skor yang diberikan bagi kategori prediktornya
yang digunakan dalam Agresti (2007) yaitu (0, 2, 4, 5). Berikut analisis untuk data tersebut
didalam R. Pertama-tama kita input datanya kedalam R dengan cara sebagai berikut
38
kadang 35 603
sering 21 192
selalu 30 224
Analisis data tersebut menggunakan regresi logistik dengan cara sebagai berikut
Deviance Residuals:
tidak kadang sering selalu
-0.8346 1.2521 0.2758 -0.6845
Coefficients:
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
> coef(dengkuran)
(Intercept) nilai
-3.8662481 0.3973366
> predict(dengkuran, type="response")
tidak kadang sering selalu
0.02050742 0.04429511 0.09305411 0.13243885
39
Dalam fungsi “glm” secara default digunakan fungsi penghubuang logit. Apabila fungsi
penghubung yang digunakan adalah probit maka kita dapat menggunakan cara berikut ini:
Call:
glm(formula = dengkur ~ nilai, family = binomial(link = "probit"))
Deviance Residuals:
tidak kadang sering selalu
-0.6188 1.0388 0.1684 -0.6175
Coefficients:
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
-2.0605516 0.1877705
> predict(dengkuran.probit, type="response")
40
Dalam fungsi “glm” tidak disertakan model linear probability sehingga kita harus
menggunakan fungsi “logit.reg” dengan menggunakan model linear probability sehingga akan
berbentuk sebagai berikut
Fungsi “lpm.reg” dapat digunakan pada data dengan format yang berbeda dengan data dengkur
diatas sehingga kita ubah data tersebut dengan cara sebagai berikut
0.01724645 0.01977784
Convergence message: 0
There were 38 warnings (use warnings() to see them)
> #standard error
> sqrt(diag(solve(fit.lpm$hessian)))
Catatan: fungsi “logit.reg” dapat digunakan juga untuk probit (misalnya diberi nama probit.reg)
dengan sedikit modifikasi dengan cara sebagai berikut
fmin <-function(beta, X, y, w) {
p <-pnorm(X %*% beta)
-sum(2 * w * ifelse(y, log(p), log(1-p)))
}
gmin <-function(beta, X, y, w) {
eta <-X %*% beta; p <-pnorm(eta)
t(-2 * (w *dnorm(eta) * ifelse(y, 1/p, -1/(1-p))))%*% X
}
42
if(intercept) {x <-cbind(1, x); dn <-c("(Intercept)", dn)}
if(is.factor(y)) y <-(unclass(y) != 1)
fit <-optim(start, fmin, gmin, X = x, y = y, w = wt, ...)
names(fit$par) <-dn
cat("\nCoefficients:\n"); print(fit$par)
cat("\nResidual Deviance:", format(fit$value), "\n")
cat("\nConvergence message:", fit$convergence, "\n")
invisible(fit)
}
Dengan fungsi ini kita dapat menghitung nilai peluang prediksi untuk fungsi penghubung
probit dan dengan fungsi logit.reg kita dapat menghitung peluang prediksi untuk fungsi
penghubuang logit. Untuk data yang sudah diubah menjadi x dan y cara yang digunakan adalah
sebagai berikut
Coefficients:
(Intercept) Var1
-3.8662448 0.3973350
Coefficients:
(Intercept) Var1
-2.0606309 0.1878692
43
> p.lpm<-(cbind(1, x)%*%fit.lpm$par)
> eta.logit<-(cbind(1, x)%*%fit.logit$par)
> p.logit=exp(eta.logit)/(1+exp(eta.logit))
> eta.probit<-(cbind(1, x)%*%fit.probit$par)
> p.probit<-pnorm(eta.probit)
> res<-cbind(lpm=unique(p.lpm),logit=unique(p.logit), probit=unique(p.probit))
> dimnames(res)<-list(unique(x),c("lpm","logit","probit"))
> res
Apabila kita akan menggambarkan plot dari ketiga peluang prediksi untuk fungsi
penghubung linear probability, probit dan logit dapat dilakukan dengan cara sebagai berikut
> dengkur.plot<-unique(x)
> plot(x,p.logit,type="n",xlim=c(0,5),ylim=c(-.005,.20),xlab="Tingkat
Dengkuran", ylab="Peluang Prediksi", bty="L")
> lines(dengkur.plot,unique(p.lpm),type="l",lty=1)
> lines(dengkur.plot,unique(p.logit),type="b",pch=16)
> lines(dengkur.plot,unique(p.probit),type="b",pch=17)
> legend(x=.05,y=.18,legend=c("Logistic","Probit","Linear"), lty=c(1,1,1),
pch=c(16,17,-1), cex=.85, text.width=1, adj=-.5)
44
Gambar 3.1 Grafik Peluang Prediksi dari tiga Fungsi Penghubung
....
x.
exp....
x.
e
..x .=
=
(3.1)
..
..
x.
1.exp....
x.
1.e
Persamaan diatas menggunakan fungsi eksponensial disebut fungsi regresi logistik. Sehingga
model regresi logistik dapat dinyatakan dengan persamaan berikut
45
..
x.
log=...
x (3.2)
..
1-..
x.
46
Gambar 3.2 (b) Plot Fungsi Regresi Logistik untuk ß < 0
probit[p(x)] = a + ß x (3.3)
Fungsi penghubuang probit mentrasformasikan p(x) menjadi nilai baku Z yang berdistribusi
Normal, misalnya untuk probit(0.05) = -1.645, karena untuk peluang 5% distribusi normal baku
berada di titik -1.645. Begitupula dengan probit(0.50) = 0, probit(0.95) = 1.645, dan
probit(0.975) = 1.96.
Untuk data hubungan penyakit jantung dengan kebiasaan mendengkur dengan nilai skor {0, 2, 4,
5} untuk tingkat dengkuran, taksiran kemungkinan maksimum probit model
Pada tingkat dengkuran x = 0, nilai probit adalah -2.061 + 0.188(0) = -2.06. Nilai fit peluang
p(0) adalah peluang dari distribusi normal baku pada z = -2.06, adalah 0.020. Pada tingkat
47
dengkuran x = 5, nilai probit adalah -2.061 + 0.188(5) = -1.12, yang nilai fit peluangnya adalah
0.131. Nilai fit yang terlihat dari Tabel 3.1 dan Gambar 3.1 sama dengan linear probability dan
regresi logistik. Pada praktiknya, model regresi probit dan logistik sama-sama fit. Jika model
regresi logistik fit maka model probit juga akan fit, begitu pula sebaliknya.
Contoh:
Data diambil dari Agresti (2007) mengenai Penelitian nasional mengenai perilaku anak remaja
umur 15 – 16 tahun yang pernah melakukan hubungan Intim. Data disajikan dalam tabel berikut
Ras Jenis
Kelamin
Pernah berhubungan
Intim
Ya Tidak
Kulit Putih
Laki-laki 43 134
Perempuan 26 149
Kulit Laki-laki 29 23
Hitam Perempuan 22 36
Sumber S. P. Morgan and J. D. Teachman, J Marriage Fam. 50, 929 – 936 (1988)
Analisis data tersebut menggunakan regresi logistik dengan fungsi penghubung logit dan probit
pada taraf keyakinan 95%.
> remaja<-array(c(43,134,26,149,29,23,22,36),c(2,2,2))
> dimnames(remaja)<-list(hub=c("ya","tidak"), jk=c("Lakilaki","
Perempuan"),ras=c("putih","hitam"))
> remaja
, , ras = putih
jk
48
, , ras = hitam
jk
[1] 491.7948
##devians untuk model di bawah hipotesis nol
> hubungan$null.deviance
[1] 529.2534
##Analisis Regresi Probit
> hubungan$null.deviance
[1] 529.2534
Dari hasil diatas ternyata nilai devians dari model sebesar 491.87 lebih besar dari devians untuk
Model dibawah hipotesis nol (Null Model) sehingga dapat dikatakan bahwa model fit.
Data berikut diambil dari survei nasional tahun 1974 dan 1975 oleh National Opinion Research
Centre, University of Chicago, Illinois (dalam Collet, 2003). Dalam survei tersebut diteliti
mengenai sikap responden mengenai wanita yang tinggal di rumah. Responden dalam hal ini
dibagi menjadi responden pria dan wanita dan diukur lamanya mereka sekolah dalam arti
49
semakin lama sekolah maka tingkat pendidikan semakin tinggi. Dalam penelitian ini ingin
diketahui apakah jenis kelamin dan tingkat pendidikan mempunyai pengaruh terhadap sikap
responden mengenai wanita yang tinggal dirumah.
a. Bagaimanakah asosiasi jenis kelamin dengan sikap responden berdasarkan tingkat pendidikan.
b. Analisis data tersebut menggunakan regresi logistik
3.3 Generalized Linear Models untuk Data Count
Dalam suatu penelitian terkadang variabel respon merupakan hasil pencacahan atau penghitungan
(counting). Count juga merupakan ringkasan variabel kategori dalam tabel kontingensi. Model
GLM yang digunakan untuk data count diasumsikan berdistribusi Poisson. Distribusi Poisson
merupakan distribusi unimodal dan miring kekanan untuk nilai-nilai 0, 1, 2, . . . . Poisson
mempunyai parameter tunggal yaitu µ > 0, yang mempunyai rata-rata dan varians yang sama
yaitu
E(Y) = Var(Y) = µ
-.
.y
P.
y .=
! , untuk y = 0, 1, 2, ...
Bentuk Distribusi Poisson sangat dipengaruhi oleh rata-ratanya. Bagaimanapun untuk sampel
besar, semakin besar rata-ratanya maka bentuk distribusinya akan semakin mendekati simetris.
Gambar 3.3 memperlihatkan bentuk Distribusi Poisson untuk dua rata-rata 2 dan 6.
50
Gambar 3.3 (a) Distribusi Poisson dengan Rata-rata 2.
51
adalah GLM dengan asumsi Y berdistribusi Poisson dan menggunakan fungsi penghubung log.
Untuk variabel penjelas tunggal x, model log linier Poisson memiliki persamaan sebagi berikut
log µ = a + ßx (3.5)
Setiap kenaikan x satu satuan akan berpengaruh secara eß pada µ: Rata-rata Y pada x + 1 sama
dengan rata-rata Y pada x dikalikan dengan eß. Jika ß = 0, maka eß = 1 dan faktor pengalinya
adalah 1. Dengan demikian rata-rata Y tidak akan berubah apabila x berubah. Jika ß > 0, maka eß
> 1, sehingga rata-rata Y meningkat seiring meningkatnya x. Jika ß < 0, rata-rata Y menurun
seiring menurunnya x.
$X.C:int 2334214222...
$S :int 3332323313...
$ W : num 28.3 26 25.6 21 29 25 26.2 24.9 25.7 27.5 ...
$ Wt : num 3.05 2.6 2.15 1.85 3 2.3 1.3 2.1 2 3.15 ...
$Sa:int 8400130086...
> mean(crabs$W)
[1] 26.29884
> sd(crabs$W)
[1] 2.109061
52
Dari data tersebut kita akan membuat plot antara lebar cangkang (cm) dengan banyaknya
satelit. Untuk keperluan itu data diubah dahulu sehingga setiap titik mengindikasikan banyaknya
pasangan yang unik dari variabel banyaknya satelit dengan variabel lebar cangkang. Dalam R
dapat kita gunakan baris-baris perintah berikut ini
Kemudian dari data yang telah di aggregate kita buat plot dengan cara berikut ini
Gambar 3.4 Banyak satelit berdasarkan Lebar Cangkang (cm) dari Kepiting Betina
53
Kemudian kita akan plot data tersebut berdasarkan rata-rata Lebar Cangkang kepiting
betina dengan rata-rata banyaknya satelit. Plot akan ditambahkan dengan garis pemulusan. Baris
perintah berikut dapat kita gunakan untuk menggambarkan hal tersebut.
Kemudian data tersebut akan dianalisis menggunakan model regresi Poisson menggunakan
fungsi glm.
54
> log.fit<-glm(Sa~W, family=poisson(link=log),data=crabs)
> summary(log.fit)
Call:
glm(formula = Sa ~ W, family = poisson(link = log), data = crabs)
Deviance Residuals:
Min 1Q Median 3Q Max
-2.8526 -1.9884 -0.4933 1.0970 4.9221
Coefficients:
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
log ....
x = -3.30476 + 0.16405x
=..
.
Efek dari ß = 0.164 mempunyai standard error 0.01997. Karena ß > 0, penaksir lebar mempunyai
efek positif pada banyaknya satelit. Model fit menghasilkan taksiran rata-rata banyak satelit µ,
nilai fit pada setiap lebar. Sebagai contoh untuk suatu lebar x = 26.3 maka rata-rata banyak satelit
adalah
2.744581
55
Selain itu dalam Agresti (2007) juga dijelaskan bagaimana model Poisson ini menggunakan
fungsi penghubung identitas. Dalam R dapat digunakan baris perintah berikut ini
start = coef(log.fit))
Deviance Residuals:
Coefficients:
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Sehingga berdasarkan hasil terseut model fit untuk fungsi penghubung identitas adalah
....
x = -11.52547 + 0.54925x
=..
.
Efek dari ß = 0.54925 mempunyai standard error 0.02968. Karena ß > 0, penaksir lebar
mempunyai efek positif pada banyaknya satelit.
56
> plot(x=plot.x, y=plot.y, ylab=expression(paste("Rata-rata Banyaknya
Satelit,",{mu})), xlab="Lebar Cangkang (cm)",bty="L",axes=F, type="p", pch=16)
> axis(2,at=0:5)
> axis(1,at=seq(20,34,2))
> ind<-order(crabs$W)
> lines(x=crabs$W[ind],y=log.fit$fitted.values[ind])
> lines(x=crabs$W[ind],y=id.fit$fitted.values[ind])
> arrows(x0=23.5,y0=2.9,x1=23.5,y1=predict(log.fit,newdata=data.frame(W=23.5),
type="response"), length=.2)
arrows(x0=29.75,y0=3.1,x1=29.75,y1=predict(id.fit,newdata=data.frame(W=29.75),
type="response"), length=.2)
> text(x=29.75,y=2.9,"Link Identitas")
57
Gambar 3.6 Penaksir rata-rata banyak satelit untuk fungsi penghubung Log dan Identitas.
58
MODUL 4
REGRESI LOGISTIK
Dalam modul ini kita akan fokuskan pada pemodelan statistik untuk variabel respon biner,
yang mana hanya memiliki dua kemungkinan yaitu “sukses” dan “gagal”. Model yang paling
sering digunakan untuk respon biner adalah model regresi logistik seperti yang telah
diperkenalkan pada modul 3 yang merupakan bagian dari GLM. Dalam modul ini akan dijelaskan
mengenai inferensi untuk parameter model regresi logistik yang meliputi penanganan prediktor
kategori, regresi logistik multipel dan membuat kesimpulan.
Secara umum ada tiga cara untuk membuat pemodelan regresi logistik dalam R. Dengan
menggunakan fungsi “glm”. Venables and Ripley menjelaskan ketiga cara tersebut sebagai
berikut
1.
Variabel respon merupakan vektor biner (bernilai 0 dan 1) atau vektor bernilai logika
(TRUE/FALSE).
2.
Variabel respon merupakan nilai numerik yang berisi proporsi “sukses”, tetapi banyaknya
“sukses” harus didefinisikan bobot menggunakan vektor bobot.
3.
Variabel respon merupakan sebuah matriks dua kolom yang diasumsikan bahwa kolom
pertama berisi banyak “sukses” dan kolom kedua berisi banyak “gagal”.
4.1 Data Biner
Dalam regresi logistik respon biner dapat berupa data terkelompok (group) atau data tidak
terkelompok (ungroup). Kedua jenis data ini dapat ditentukan model regresi logistiknya. Sebagai
contoh untuk data sebelumnya (pada modul 3) mengenai kebiasaan mendengkur dan serangan
jantung merupakan data yang terkelompok (group data). Dalam modul ini akan dijelaskan
bagaimana menggunakan regresi logistik untuk data tersebut. Mula-mula kita input datanya
sebagai data frame dengan skor tingkat dengkuran adalah:
+ dengkur = c(0,2,4,5),
59
+ sakit.jantung = c(24,35,21,30),
+ n = c(1379,638,213,254) )
> dengkuran
dengkur sakit.jantung n
1 0 24 1379
2 2 35 638
3 4 21 213
4 5 30 254
Kemudian kita gunakan model regresi logistik untuk data tersebut menggunakan proporsi
dengan serangan jantung sebagai respon dan n (banyak kejadian) sebagai bobot:
Coefficients:
(Intercept) dengkur
-3.8662 0.3973
Untuk menentukan model regresi logistik menggunakan matriks dapat melalui cara sebagai
berikut: Pertama-tama kita buat matriks didalam data frame “dengkuran”:
60
3 4 21 213 21 192
4 5 30 254 30 224
Dengan menggunakan YN kita dapat membuat model regresi logistik seperti contoh sebelumnya
dengan memperlakukan matriks YN sebagai respon (tanpa pembobotan):
Coefficients:
(Intercept) dengkur
-3.8662 0.3973
Untuk data yang tidak terkelompok (ungroup data) kita gunakan data pada Modul 3
mengenai Kepiting Horseshoe Betina dan Satelitnya. Variabel respon adalah banyaknya “satelit”
dari kepiting betina. Variabel penjelas adalah lebar cangkang kepiting betina. Dalam menganalisis
data ini penulis telah membuat data dalam format csv dengan nama “crabs.csv” sehingga dapat
dipanggil dalam software R. Rata-rata dan simpangan baku dari Berat kepiting adalah sebagai
berikut
$X.C:int 2334214222...
$S :int 3332323313...
$ W : num 28.3 26 25.6 21 29 25 26.2 24.9 25.7 27.5 ...
$ Wt : num 3.05 2.6 2.15 1.85 3 2.3 1.3 2.1 2 3.15 ...
$Sa:int 8400130086...
61
> mean(Wt);sd(Wt)
[1] 2.437225
[1] 0.5772553
Keterangan: X.C=warna, S=kondisi duri, W=lebar cangkang (cm), Wt = berat (kg), Sa = banyak
satelit
Dari data tersebut kita akan membuat plot antara berat (kg) dengan banyaknya satelit.
Untuk keperluan itu data diubah dahulu sehingga setiap titik mengindikasikan banyaknya
pasangan yang unik dari variabel banyaknya satelit dengan variabel berat. Dalam R dapat kita
gunakan baris-baris perintah berikut ini
Kemudian dari data yang telah di aggregate kita buat plot dengan cara berikut ini
62
Gambar 4.1 Banyak satelit berdasarkan Berat (kg) dari Kepiting Betina
Pertama-tama kita ubah variabel banyak satelit menjadi biner dengan cara sebagai berikut
Untuk contoh ini model regresi logistik akan digunakan terhadap data yang tidak dikelompokkan.
Kemudian kita gunakan model regresi logistik sederhana dengan lebar cangkang kepiting sebagai
prediktor.
63
> summary(kepiting.1)
Call:
glm(formula = Sat ~ W, family = binomial(), data = crabs)
Deviance Residuals:
Min 1Q Median 3Q Max
-2.0281 -1.0458 0.5480 0.9066 1.6941
Coefficients:
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Model ini dibandingkan dengan model dibawah hipotesis nol (model tanpa prediktor) dengan
menggunakan uji Wald atau uji rasio kemungkinan
Signif. Codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
64
Atau tanpa menggunakan model dibawah hipotesis nol sebagai berikut:
> anova(kepiting.1,test="Chisq")
Response: Sat
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Kemudian dari data tersebut kita buat plot untuk model regresi logistiknya dengan menggunakan
cara sebagai berikut
65
Hasil plot dapat dilihat dari gambar dibawah ini
Gambar 4.2 Plot Model Regresi Logistik Lebar cangkang terhadap Proporsi Memiliki Satelit
+ 1.0 yaitu penambahan satu sentimeter, kita dapat menghitung bahwa nilai p(x) = 0.773 dan
nilai odds = 0.773/0. 227 = 3.40. Kenaikan sebesar 64% adalah 3.40 = 2.07(1.64).
66
4.3 Regresi Logistik dengan Variabel Prediktor Kategori
Seperti pada model regresi biasa, prediktor dalam regresi logistik bisa lebih dari satu
(multipel). Variabel prediktor tersebut dapat berbentuk data kategori maupun data kuantitatif.
Dalam bagian ini akan dijelaskan bagaimana fit model regresi logistik dengan menyertakan
variabel kategori (biasa disebut faktor).
Dalam menyertakan variabel kategori kedalam model regresi logistik kita harus membuat
konstrain bagi parameternya untuk menangani “redundance” dalam spesifikasi model. Dalam
membuat konstrain perlu adanya sebuah kategori yang dijadikan nol nilainya yaitu kategori
pertama atau kategori terakhir.
Data yang digunakan dalam hal ini adalah contoh pada Modul 2 sub bagian 2.6 mengenai
Data mengenai studi prospektif dari ibu yang peminum alkohol dan cacat bawaan bayi. Dengan
menggunakan fungsi “options “ dalam penggunaan fungsi glm. Pertama-tama kita inputkan
dahulu datanya dengan cara sebagai berikut
> alkohol<-factor(c("0","<1","1-2","3-5",">=6"),
+ levels=c("0","<1","1-2","3-5",">=6"))
> cacat<-c(48,38,5,1,1)
> n<-c(17066,14464,788,126,37)+cacat
Kemudian kita akan membuat konstrain untuk variabel alkohol dengan mendefinisikan kategori
pertama bernilai nol dengan cara sebagai berikut
Coefficients:
(Intercept) alkohol<1 alkohol1-2 alkohol3-5 alkohol>=6
67
Sebaliknya untuk kategori terakhir yang nilainya di set menjadi nol dengan cara sebagai berikut
Coefficients:
(Intercept) alkohol.rev3-5 alkohol.rev1-2 alkohol.rev<1 alkohol.rev0
-3.611 -1.225 -1.449 -2.331 -2.263
Peluang prediksi untuk setiap kontras akan bernilai sama pada setiap kategorinya. Untuk
menghitung peluang prediksi dari model diatas dapat dilihat pada baris-baris perintah berikut ini.
logit fitted.prop
1 -5.873642 0.002804721
2 -5.941832 0.002620328
3 -5.060060 0.006305170
4 -4.836282 0.007874016
5 -3.610918 0.026315789
logit fitted.prop
1 -5.873642 0.002804721
2 -5.941832 0.002620328
3 -5.060060 0.006305170
4 -4.836282 0.007874016
5 -3.610918 0.026315789
68
Terlihat bahwa proporsi sampel terlihat meningkat dengan meningkatnya konsumsi alkohol.
Untuk melihat independensi antara konsumsi alkohol wanita hamil dengan cacat bawaan
pada bayi dapat ditunjukkan melalui model berikut ini
Coefficients:
(Intercept)
-5.856
[1] 6.201998
> # Statistik Uji Pearson chi-kuadrat
> (a<-sum(residuals(alkohol.logit3, type="pearson")^2))
[1] 12.08205
> # derajat kebebasan
> df<-alkohol.logit3$df.residual
> #p-value
> 1-pchisq(a, df=df)
[1] 0.01675140
4.4 Model Regresi Logistik Multipel
Dalam Agresti (2007) Contoh 4.3.2 mengenai 338 veteran perang yang terinfeksi virus
AIDS dengan dua prediktor yaitu Ras (hitam, putih) dan penggunaan AZT (ya, tidak), dengan
variabel tak bebas adalah terjadi simptom AIDS (ya, tidak). Data dapat dilihat pada tabel berikut
ini
69
Tabel 4.1 Perkembangan Simptom AIDS berdasarkan Ras dan Penggunaan AZT
Ras
Penggunaan
AZT
Simptom AIDS
Ya Tidak
Hitam
Ya 14 93
Tidak 32 81
Putih
Ya 11 52
Tidak 12 43
AZT Ras
logit [
P(Y =1)]=ßYa +ßPutih
> simptom<expand.
grid(AZT=factor(c("Ya","Tidak"),levels=c("Tidak","Ya")),Ras=factor(c("H
itam","Putih"),levels=c("Putih","Hitam")))
> simptom<-data.frame(simptom,Yes=c(14,32,11,12), No=c(93,81,52,43))
> simptom
1 Ya Hitam 14 93
2 Tidak Hitam 32 81
3 Ya Putih 11 52
4 Tidak Putih 12 43
Kemudian kita fit model regresi logistiknya menggunakan fungsi glm dengan options melalui
perintah berikut ini
> options(contrasts=c("contr.treatment","contr.poly"))
> summary(fit<-glm(cbind(Ya,Tidak) ~ AZT + Ras , family=binomial,
data=simptom) )
Call:
glm(formula = cbind(Ya, Tidak) ~ AZT + Ras, family = binomial,
data = simptom)
70
Deviance Residuals:
1234
-0.5547 0.4253 0.7035 -0.6326
Coefficients:
Estimate Std. Error z value Pr(>|z|)
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Kemudian kita dapat menghitung taksiran odds ratio antara penggunaan AZT dan perkembangan
AIDS dengan cara
> exp(-0.7195)
[1] 0.4869957
Interval kepercayaan menggunakan statistik Wald diperoleh menggunakan approximate standard
error. Penaksran interval menggunakan statistik rasio kemungkinan dapat diperoleh
menggunakan fungsi confint dalam Paket MASS.
> confint(fit)
Waiting for profiling to be done...
2.5% 97.5%
(Intercept) -1.6088054 -0.5734959
AZTYa -1.2773237 -0.1798769
RasHitam -0.5022982 0.6334104
71
Model fit diatas variabel Ras tidak signifikan. Kita akan membuat model memodifikasi yaitu
dengan tidak menyertakan variabel Ras pada model sebelumnya kemudian kita uji kedua model
dengan menggunakan perbedaan devians dengan cara sebagai berikut
Dari tabel anova diatas terlihat bahwa perbedaan devians tidak signifikan yang artinya model
yang terbaik adalah model tanpa variabel Ras. Kemudian kita hitung nilai peluang prediksi dan
standard errornya sehingga diperoleh dengan cara sebagai berikut
+{
+ fit <-results.predict$fit
+ limits <-qnorm(1. -(1. -coverage)/2.) * results.predict$se.fit
+ list(upper = fit + limits, fit = fit, lower = fit -limits)
+}
> (AIDS.bars<-pointwise.normal(res, coverage=.95))
$upper
1234
0.2095717 0.3412561 0.2108849 0.3525588
$fit
1234
0.1496245 0.2653998 0.1427012 0.2547241
72
$lower
1234
0.08967738 0.18954345 0.07451749 0.15688935
Statistik Chi-Kuadrat dan statistik Pearson untuk kecocokan model diperoleh dengan cara sebagai
berikut
> fit$deviance
[1] 1.38353
> sum(residuals(fit,type="pearson")^2)
[1] 1.391026
Soal Latihan:
Sebuah eksperimen dilakukan oleh Strand (1930) untuk melihat respon dari kumbang lantai,
dengan nama latin Tribolium Confusum, terhadap gas karbon disulfur (CS2). Dalam eksperimen
tersebut sekitar 30 kumbang dalam suatu batch diberikan CS2 dengan konsentrasi yang berbeda,
kemudian diukur berapa banyak kumbang yang mati. Setelah 5 jam diukur kembali berapa
banyak kumbang yang mati.
Konsentrasi
CS2 (mg/l)
Replikasi 1 Replikasi 2
ynyn
49.06 2 29 4 30
52.99 7 30 6 30
56.91 9 28 9 34
60.84 14 27 14 29
64.76 23 30 29 33
68.69 29 31 24 28
72.61 29 30 32 32
76.54 29 29 31 31
1.
Buat plot antara logit proporsi kumbang yang mati terhadap konsentrasi CS2 dengan garis
73
linier dan garis regresi logistik
74
MODUL 5
MODEL LOG LINIER
5.1 Pendahulaun
Model log linier digunakan pada tabel kontingensi untuk melihat hubungan antara dua
atau lebih variabel kategori. Semua variable dalam tabel kontingensi dianggap sebagai respon,
dengan kata lain tidak ada pemisahan variabel bebas (independent) dan variebel tak bebas
(dependent). Bila terjadi pemisahan variabel bebas dan variabel tak bebas maka digunakan
regresi logistik.
Pada modul sebelumnya telah dibahas mengenai model regresi logistik yang modelnya
mendefinisikan variabel prediktor dan variabel respon. Dalam modul ini akan dibahas apabila
semua variabel adalah respon dan kita ingin melihat hubungan antar respon tersebut untuk
masing-masing kategorinya maka digunakan model log linier. Dalam model log linier ada
beberapa model yang dapat digunakan. Model awal yang biasa digunakan adalah:
1.
Saturated model. Yaitu model yang melibatkan seluruh kemungkinan efek dari setiap
variabel berikut interaksinya. Untuk tabel kontingensi dua arah model saturated adalah
sebgai berikut
log µij = . + .iX + .jY + .ij
XY
(5.1)
2.
Independence model. Yaitu model tanpa melibatkan interaksi untuk tabel kontingensi dua
arah model independen adalah sebgai berikut
log µij = . + .iX + .jY
(5.2)
1.
Dimulai dari model saturated. Apabila model tidak diterima, eliminasi interaksi pada
order tertinggi, demikian seterusnya hingga didapat model yang fit.
2.
Dimulai dari model independent. Apabila model diterima, tambahkan interaksi pada order
yang paling rendah, demikian seterusnya hingga didapat model yang fit.
Untuk analisis model log-linier dapat menggunakan software R.
75
5.2 Log Linier Dalam R
Dalam software R model log linier dapat dilakukan melalui tiga cara yaitu
Ras
Kepercayaan
Total
Ya Tidak
Putih 1339 300 1639
Hitam 260 55 315
Lainnya 88 22 110
Total 1687 377 2064
Pertama-tama kita Input data terlebih dahlu, kemudian analisis data menggunakan fungsi glm
dengan family poisson untuk model independen dengan cara sebagai berikut
> afterlife2<-data.frame(expand.grid(ras=factor(c("Putih","Hitam","Lainnya"),
+ levels=rev(c("Putih","Hitam","Lainnya"))),
+ percaya=factor(c("Ya","Tidak"),levels=c("Tidak","Ya"))),
+ count=c(1339,260,88,300,55,22))
> afterlife2
76
ras percaya count
1 Putih Ya 1339
2 Hitam Ya 260
3 Lainnya Ya 88
4 Putih Tidak 300
5 Hitam Tidak 55
6 Lainnya Tidak 22
> options(contrasts=c("contr.treatment","contr.poly"))
> (fit.glm<-glm(count~.,family=poisson, data=afterlife2))
Call: glm(formula = count ~ ., family = poisson, data = afterlife2)
Coefficients:
(Intercept) rasHitam rasPutih percayaYa
Dari hasil diatas terlihat bahwa model cukup fit. Untuk kontras yang digunakan, yaitu
menetapkan kategori terakhir bernilai 0, .Ya
Y = 1.498 dan .Tidak
Y = 0. Dengan demikian penaksir
odds dari variabel percaya adalah exp(1.498) = 4.473 untuk setiap ras.
77
Call: glm(formula = count ~ ras * percaya, family = poisson, data =
afterlife2)
Coefficients:
(Intercept) rasHitam rasPutih percayaYa
3.0910 0.9163 2.6127 1.3863
rasHitam:percayaYa rasPutih:percayaYa
0.1671 0.1096
Hasil diatas memperlihatkan bahwa penaksir odds ratio antara percaya dan ras adalah
exp(0.1096) = 1.12 untuk kategori “Putih” dan exp(0.1671) = 1.18 untuk kategori “Hitam” dan
exp(0.1096 - 0.1671) = 0.94 untuk kategori “Putih” dan “Hitam”. Artinya penaksir odds dari
Percaya untuk kategori ras “Putih” 0.94 kali odds untuk kategori ras “Hitam”. Secara umum
model tersebut cukup fit dengan penaksir odds ratio relatif mendekati 1.
Beberapa model yang dapat dibentuk untuk klasifikasi tiga arah adalah sebagai berikut
•
Mutually Independent Model (X, Y, Z) . log µijk = . + .iX + .jY + .kZ
XY +.jk
YZ
•
Conditional assosiation model (XY, YZ) . log µijk = . + .iX + .jY + .kZ +.ij
•
Homogenous assosiation model (XY, XZ, YZ) . log µijk = . + .iX + .jY + .jZ +.ij
XY +.ik
XZ +.jk
YZ
XY +.ik
XYZ
•
Saturated Model (XYZ) . log µijk = . + .iX + .jY + .jZ +.ij
XZ +.jk
YZ+.ijk
78
Contoh: Penggunaan Alkohol, Rokok, dan Mariyuana
Data berikut, diambil dari Agresti (2007) bagian 7.1.6, hal 209, adalah hasil survei yang
dilakukan oleh Wright State University School of Medicine dan United Health Services di
Dayton, Ohio. Dalam survei tersebut siswa ditanya pada akhir tahun ajaran mengenai apakah
mereka pernah mengkonsumsi alkohol, rokok dan mariyuana. Data disajikan dalam tabel berikut
ini
Alkohol Rokok
Mariyuana
Total
Ya Tidak
Ya
Ya 911 538 1449
Tidak 44 456 500
Tidak
Ya 3 43 46
Tidak 2 279 281
Total 960 1316 2276
Dari Tabel 5.2 didefinisikan variabel A adalah penggunaan Alkohol, variabel R adalah
penggunaan Rokok dan variabel M untuk penggunaan Mariyuana masing-masing memiliki dua
kategori. Analisis untuk data tersebut untuk semua model yang mungkin adalah sebagai berikut
## Input Data
> pengguna<-data.frame(expand.grid(
+ mariyuana=factor(c("Ya","Tidak"),levels=c("Ya","Tidak")),
+ rokok=factor(c("Ya","Tidak"),levels=c("Ya","Tidak")),
+ alkohol=factor(c("Ya","Tidak"),levels=c("Ya","Tidak"))),
+ count=c(911,538,44,456,3,43,2,279))
## Fit Model
> library(MASS)
# Model (ARM) (saturated)
> fitARM<-loglm(count~alkohol*rokok*mariyuana,data=pengguna,param=T,fit=T)
79
> fitAR.M<-update(fitAR.AM.RM, .~. -alkohol:mariyuana -rokok:mariyuana)
> data.frame(alkohol=pengguna$alkohol,rokok=pengguna$rokok,
+ mariyuana=pengguna$mariyuana, A.R.M=c(aperm(fitted(fitA.R.M))),
+ AR.M=c(aperm(fitted(fitAR.M))), AM.RM=c(aperm(fitted(fitAM.RM))),
+ AR.AM.RM=c(aperm(fitted(fitAR.AM.RM))), ARM=c(aperm(fitted(fitARM))))
alkohol rokok mariyuana A.R.M AR.M AM.RM AR.AM.RM ARM
Selanjutnya dari hasil output diatas dapat ditentukan pola asosiasi untuk model-model
tersebut dengan menampilkan penaksir odds ratio bersyarat dan marjinal. Untuk menentukan
odds ratio bersyarat dapat langsung ditentukan melalui fungsi yang kita buat sendiri dengan cara
sebagai berikut
> array.A.R.M<-fitted(fitA.R.M)
> array.AR.M<-fitted(fitAR.M)
> array.AM.RM<-fitted(fitAM.RM)
> array.AR.AM.RM<-fitted(fitAR.AM.RM)
> array.ARM<-fitted(fitARM)
80
+ res<-aperm(array,perm)
+ colSums(res)
+}
# menghitung odds ratio bersyarat dan marjinal
> nilai.odd<-data.frame(AR.Bersyarat=c(apply(array.A.R.M,3,odds.rasio)[1],
+ apply(array.AR.M,3,odds.rasio)[1],apply(array.AM.RM,3,odds.rasio)[1],
+ apply(array.AR.AM.RM,3,odds.rasio)[1],apply(array.ARM,3,odds.rasio)),
+ AM.Bersyarat=c(apply(array.A.R.M,2,odds.rasio)[1],
+ apply(array.AR.M,2,odds.rasio[1], apply(array.AM.RM,2,odds.rasio)[1],
+ apply(array.AR.AM.RM,2,odds.rasio)[1],apply(array.ARM,2,odds.rasio)),
+ RM.Bersyarat=c(apply(array.A.R.M,1,odds.rasio)[1],
+ apply(array.AR.M,1,odds.rasio)[1], apply(array.AM.RM,1,odds.rasio)[1],
+ apply(array.AR.AM.RM,1,odds.rasio)[1], apply(array.ARM,1,odds.rasio)),
+ AR.Marjinal=c(odds.rasio(sum.array(array.A.R.M)),
+ odds.rasio(sum.array(array.AR.M)), odds.rasio(sum.array(array.AM.RM)),
+ odds.rasio(sum.array(array.AR.AM.RM)),
+ odds.rasio(sum.array(array.ARM)),odds.rasio(sum.array(array.ARM))),
+ AM.Marjinal=c(odds.rasio(sum.array(array.A.R.M,perm=c(2,1,3))),
+ odds.rasio(sum.array(array.AR.M,perm=c(2,1,3))),
+ odds.rasio(sum.array(array.AM.RM,perm=c(2,1,3))),
+ odds.rasio(sum.array(array.AR.AM.RM,perm=c(2,1,3))),
+ odds.rasio(sum.array(array.ARM,perm=c(2,1,3))),
+ odds.rasio(sum.array(array.ARM,perm=c(2,1,3)))),
+ RM.Marjinal=c(odds.rasio(sum.array(array.A.R.M,perm=c(1,2,3))),
+ odds.rasio(sum.array(array.AR.M,perm=c(1,2,3))),
+ odds.rasio(sum.array(array.AM.RM,perm=c(1,2,3))),
+ odds.rasio(sum.array(array.AR.AM.RM,perm=c(1,2,3))),
+ odds.rasio(sum.array(array.ARM,perm=c(1,2,3))),
•
odds.rasio(sum.array(array.ARM,perm=c(1,2,3)))))
•
#menampilkan odds ratio bersyarat dan marjinal
> rownames(nilai.odd)<-c("(A,R,M)","(AR,M)","(AM,RM)","(AR,AM,RM)",
81
AR.Bersyarat AM.Bersyarat RM.Bersyarat AR.Marjinal AM.Marjinal
Berdasarkan hasil output ini kita dapat menginterpretasi setiap model berdasarkan masing-masing
nilai odds ratio bersyarat dan marjinalnya.
library(MASS)
fitARM<-loglm(count~alkohol*rokok*mariyuana,data=pengguna,param=T,fit=T)
fitAR.AM.RM<-update(fitARM, .~. -alkohol:rokok:mariyuana)
fitAR.AM<-update(fitAR.AM.RM, .~. -rokok:mariyuana)
fitAR.RM<-update(fitAR.AM.RM, .~. -alkohol:mariyuana)
fitAM.RM<-update(fitAR.AM.RM, .~. -alkohol:rokok)
82
fitAR.M<-update(fitAR.AM.RM, .~. -alkohol:mariyuana -rokok:mariyuana)
fitAM.R<-update(fitAR.AM.RM, .~. -alkohol:rokok -rokok:mariyuana)
fitRM.A<-update(fitAR.AM.RM, .~. -alkohol:mariyuana -alkohol:rokok)
fitA.R.M<-update(fitAR.M, .~. -alkohol:rokok)
> gof<-data.frame(A.R.M=c(summary(fitA.R.M)$test),
+ A.RM=c(summary(fitRM.A)$test),R.AM=c(summary(fitAM.R)$test),
+ M.AR=c(summary(fitAR.M)$test), AR.AM=c(summary(fitAR.AM)$test),
+ AR.RM=c(summary(fitAR.RM)$test),AM.RM=c(summary(fitAM.RM)$test),
+ AR.AM.RM=c(summary(fitAR.AM.RM)$test),
+ ARM=c(summary(fitARM)$test))
> gof<-gof[-3,]
> rownames(gof)<-c("G^2","X^2","df", "p-value G^2", "p-value X^2")
> round(t(gof),2)
G^2 X^2 df p-value G^2 p-value X^2
Dari seluruh model yang mungkin hanya model (AR,AM,RM) yang tidak signifikan.
Selanjutnya dari model (AR,AM,RM) kita akan melihat nilai taksiran dari setiap variabel dengan
menggunakan fungsi glm dengan cara sebagai berikut
> options(contrasts=c("contr.treatment","contr.poly"))
> summary(fit.glm<-glm(count~.^2, data=pengguna, family=poisson))
83
Call:
glm(formula = count ~ .^2, family = poisson, data = pengguna)
Deviance Residuals:
12345678
0.02044 -0.02658 -0.09256 0.02890 -0.33428 0.09452 0.49134 -0.03690
Coefficients:
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Hasil output diatas merupakan model untuk setiap variabel memberikan kode 0 untuk
kategori “Ya” dan 1 untuk kategori “Tidak” . Apabila kita menginginkan model menentukan
kategori “Ya” bernilai 1 untuk setiap variabel kita tidak perlu mengubah dari data “pengguna”
tetapi dengan cara mengubah kontras menggunakan baris perintah berikut ini
Deviance Residuals:
12345678
0.02044 -0.02658 -0.09256 0.02890 -0.33428 0.09452 0.49134 -0.03690
Coefficients:
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
[1] 0.4011005
85
Langkah selanjutnya adalah menghitung nilai residual untuk model terpilih yaitu
(AR,AM,RM). Model tersebut mempunyai nilai G2 dan X2 yang kecil sehingga residual dari
model ini mengindikasikan model good fit. Karena nilai df=1 maka nilai statistik X2 sama dengan
kuadrat setiap residual.
> fit.glm$fitted.values-pengguna$count
123456
-0.6168303 0.6168303 0.6168303 -0.6168303 0.6168303 -0.6168303 -0.6168303
8
0.6168303
Untuk menguji asosiasi bersyarat dari model, kita dapat membandingkan model dengan
model yang lebih sederhana yang tidak mengandung asosiasi yang akan diuji. Sebagai contoh
apabila kita akan menguji asosiasi AR dalam model (AR,AM,RM) maka kita bandingkan model
tersebut dengan model yang lebih sederhana yang tida mengandung AR yaitu model (AM,RM)
yang merupakan model conditional independence dari AR. Hal yang sama juga dapat diterapkan
untuk asosiasi AM dan RM.
Dalam R kita dapat menggunakan fungsi anova untuk ini yang mana dalam fungsi
tersebut statistik yang digunakan adalah selisih statistik rasio kemungkinan (G2). Untuk menguji
asosiasi AR, AM dan RM dalam model (AR,AM,RM) dapat menggunakan baris perintah berikut
Model 1:
86
Deviance df Delta(Dev) Delta(df) P(> Delta(Dev)
Model 1 497.3692752 2
Model 2 0.3739859 1 496.9952893 1 0.00000
Saturated 0.0000000 0 0.3739859 1 0.54084
LR tests for hierarchical log-linear models
Model 1:
Model 1:
Dari hasil output ternyata semua asosiasi mempunyai p-value sangat kecil yang berarti signifikan.
Hal ini berarti bahwa bukti kuat adanya asosiasi bersyarat untuk AR, AM dan RM sehingga
model yang terbaik untuk digunakan adalah model (AR,AM,RM) .
87
dari model untuk tabel tiga arah. Model log linier untuk tabel empat arah tentunya dengan empat
variabel W, X, Y dan Z dapat dianalisis menggunakan cara yang sama dengan tabel tiga arah
tetapi model yang mungkin untuk tabel empat arah akan semakin banyak diantaranya
•
Mutually Independent Model (W, X, Y, Z)
•
Conditional assosiation model (WXY,WXZ,WYZ), (WXY,WZ,XZ), (WXZ, WY,XY),
(WX,WY,WZ,XY, XZ)
•
Homogenous assosiation model (WXY,WXZ,WYZ,XYZ), (WX,WY,WZ,XY, XZ, YZ)
•
Saturated Model (WXYZ)
5.5 Menggunakan Model Logistik untuk Interpretasi Model Log Linier
Model loglinear untuk tabel kontingensi membahas mengenai asosisasi antara variabelvariabel
respon kategori. Sementara model regresi logistik memperlihatkan bagaimana varibel
respon kategori yang bergantung pada set variabel penjelas. Ternyata ada kaitan antara model
logistik dengan model loglinier yang didasarkan atas model yang digunakan, sehingga untuk
model loglinier kita dapat membentuk logit dari sebuah respon untuk menginterpretasi model.
Lebih jauh, model logistik dengan variabel penjelas kategori mempunyai ekivalensi dengan
model loglinier. Untuk memahami implikasi dari model loglinier dapat dibentuk logit untuk
sebuah variabel. Misalkan kita memiliki model homogeneous association untuk tabel tiga arah
sebagai berikut
XY +.ik
YZ
Dalam hal ini kita perlakukan Y sebagai variabel respon, tentunya harus biner, sedangkan X dan Z
sebagai variabel penjelas.
88
Contoh
Data diambil dari Agresti (2007) sub bab 7.2.6 mengenai Kecelakaan mobil dan penggunaan
sabuk pengaman pada mobil di negara bagian Maine dari 68694 penumpang mobil dan truk.
Tabel 5.3 memperlihatkan penumpang berdasarkan Gender (G), Lokasi kejadian (L), penggunaan
sabuk keselamatan (S), and mengalami celaka (I).
Tabel 5.3 Data Kecelakaan berdasarkan Lokasi, Jenis Kelamin dan Sabuk Keselamatan
> kecelakaan<-data.frame(expand.grid(sabuk=c("Tidak","Ya"),
+ lokasi=c("Kota","Desa"),
+ gender=c("Perempuan","Laki-laki"), celaka=c("Tidak","Ya")),
+ count=c(7287,11587,3246,6134,10381,10969,6123, 6693,996, 759, 973, 757, 812,
+ 380,1084, 513))
> kecelakaan
sabuk lokasi gender celaka count
1 Tidak Kota Perempuan Tidak 7287
2 Ya Kota Perempuan Tidak 11587
3 Tidak Desa Perempuan Tidak 3246
4 Ya Desa Perempuan Tidak 6134
5 Tidak Kota Laki-laki Tidak 10381
6 Ya Kota Laki-laki Tidak 10969
7 Tidak Desa Laki-laki Tidak 6123
89
8 Ya Desa Laki-laki Tidak 6693
9 Tidak Kota Perempuan Ya 996
10 Ya Kota Perempuan Ya 759
11 Tidak Desa Perempuan Ya 973
12 Ya Desa Perempuan Ya 757
13 Tidak Kota Laki-laki Ya 812
14 Ya Kota Laki-laki Ya 380
15 Tidak Desa Laki-laki Ya 1084
16 Ya Desa Laki-laki Ya 513
Kemudian kita akan analisis data tersebut menggunakan model log linier dengan dimulai
dari model independen dengan cara sebagai berikut
> library(MASS)
# mutual independence
Model 1 2792.771103 11
Model 2 23.350991 5 2769.420111 6 0.00000
Model 3 1.325317 1 22.025675 4 0.00020
Saturated 0.000000 0 1.325317 1 0.24964
90
Berdasarkan hasil model (G, I, L, S) menyatakan mutual independence dari keempat
variabel. Dengan devians 2792,78 model ini sangat tidak fit. Model (GI, GL, GS, IL, IS, LS)
lebih baik dari model sebelumnya dengan devians 23,35 tetapi tetap signifikan. Model (GIL, GIS,
GLS, ILS) cukup fit dibanding kedua model sebelumnya tetapi cukup sulit untuk
diinterpretasikan. Sehingga perlu dibentuk model yang lebih rumit dari (GI, GL, GS, IL, IS, LS)
tetapi lebih sederhana dari (GIL, GIS, GLS, ILS). Untuk itu kita modifikasi model (GI, GL, GS,
IL, IS, LS) menjadi model (GI, IL, IS, GLS) dengan menambahkan interaksi tiga arah gender,
lokasi dan sabuk. Model ini lebih sederhana dari model (GIL, GIS, GLS, ILS) . Untuk membuat
model ini kita tinggal update model (GI, GL, GS, IL, IS, LS) dengan menambahkan
gender:lokasi:sabuk dengan cara sebagai berikut
Statistics:
lokasi
lokasi
91
, , gender = Perempuan, celaka = Ya
lokasi
Model ini sudah fit sehingga kita dapat menginterpretasikan dengan mudah. Kemudian
untuk menghitung odds ratio dari setiap variabelnya adalah sebagai berikut
sabuk Tidak Ya
Tidak 1.326766 1.326766
Ya 1.166682 1.166682
> apply(fit.array,c(2,4),odds.ratio)
celaka
lokasi Tidak Ya
Kota 0.6614758 0.6614758
Desa 0.5816641 0.5816641
> apply(fit.array,c(3,4),odds.ratio)
celaka
gender Tidak Ya
Perempuan 1.170603 1.170603
Laki-laki 1.029362 1.029362
> apply(fit.array,c(1,2),odds.ratio)
lokasi
sabuk Kota Desa
92
Tidak 0.579941 0.579941
Ya 0.579941 0.579941
> apply(fit.array,c(1,3),odds.ratio)
gender
> apply(fit.array,c(2,3),odds.ratio)
gender
[1] 0.002507358
Dari hasil tersebut kita buat model loglinier dan model logistik menggunakan fungsi glm
family =poisson)
> fit.loglinear$coefficients
(Intercept) sabukYa
8.8919536 0.4696151
lokasiDesa genderLaki-laki
-0.8041099 0.3536508
celakaYa sabukYa:lokasiDesa
-1.9744599 0.1575195
sabukYa:genderLaki-laki sabukYa:celakaYa
-0.4132820 -0.8170974
lokasiDesa:genderLaki-laki lokasiDesa:celakaYa
0.2827442 0.7580583
genderLaki-laki:celakaYa sabukYa:lokasiDesa:genderLaki-laki
-0.5448292 -0.1285802
93
> fit.logit <-glm(celaka ~ gender + lokasi + sabuk, data = kecelakaan, family
=binomial, weight = count)
> fit.logit$coefficients
Dalam perhitungan model logit menghasilkan koefisien yang sama dengan koefisien
model loglinier untuk setiap variabel yang tidak memiliki indeks i (taraf variabel celaka). Odds
ratios menghubungkan parameter dua faktor model loglinear dengan efek utama parameter
logistik. Misalnya saja log odds ratio untuk efek S terhadap I adalah ß1- ß2 = -0.817 nilainya
IS IS IS IS
sama dengan .11 + .11 -.11 -.11 = -0.817 dalam model loglinear. Nilai fit, statistik
goodness-of-fit, derajat kebebasan, residual dan standardized residuals untuk model logistik
identik dengan model loglinier (GLS, GI, IL, IS).
Soal Latihan
Seorang peneliti tertarik untuk melihat hubungan antara jenis kelamin, serangan jantung dan berat
badan. Sebanyak 200 orang diambil sebagai sampel yang masing-masing diukur serangan jantung
dan berat badannya. Dalam hal ini variable berat badan dikategorikan menjadi 2 (dua) yaitu,
kelebihan berat badan (over weight) atau tidak (not over weight). Hasil penelitiannya disajikan
dalam table kontingensi berikut ini
Berat
Badan Gender
Serangan Jantung
Total
Ya Tidak
Normal
Laki-laki 15 5 20
Perempuan 40 60 100
Kelebihan
Laki-laki 20 10 30
Perempuan 10 40 50
Total 85 115 200
Berdasarkan tabel ini mungkin saja variabel serangan jantung diambil sebagai variabel tak bebas
94
(dependent) dan jenis kelamin dan berat badan sebagai variabel bebas (independent) sehingga
analisis regresi logistik dapat dilakukan. Tetapi apabila yang diinginkan adalah melihat hubungan
antar variabel jenis kelamin, berat badan dan serangan jantung untuk setiap kategorinya
digunakan model log linier.
Agresti, Alan (2007) An Introduction to Categorical Data Analysis. John Wiley & Sons, Inc.,
New York.
______ (2002) Categorical Data Analysis: Second edition. John Wiley & Sons, Inc., New York.
Venables, W. N. and Ripley, B. D. (1997) Modern Applied Statistics With S-Plus: second edition.
Springer-Verlag, New York
96