rm(list = ls())
Analisis data kategori adalah metode statistik yang digunakan untuk menganalisis variabel-variabel yang bersifat kategorikal, yaitu data yang dapat dikelompokkan ke dalam kategori-kategori tertentu berdasarkan karakteristik kualitatif. Berbeda dengan data numerik yang dapat diukur secara kontinu, data kategori hanya dapat diklasifikasikan ke dalam kelompok-kelompok tertentu.
Menurut Agresti (2013), analisis data kategori merupakan pendekatan statistik yang khusus dirancang untuk menangani data yang dihasilkan dari pengukuran skala nominal dan ordinal, di mana observasi hanya dapat diklasifikasikan ke dalam kategori-kategori yang mutually exclusive dan exhaustive.
| Jenis | Deskripsi | Contoh |
|---|---|---|
| Nominal | Kategori tanpa tingkatan | Jenis kelamin, status vaksinasi, golongan darah |
| Ordinal | Kategori dengan tingkatan | Tingkat keparahan (ringan-sedang-berat), pendidikan (SD-SMP-SMA-PT) |
| Dikotomus | Hanya dua kategori | Sakit/sehat, hidup/mati, ya/tidak |
| Bidang | Contoh Penelitian | Variabel Kategori |
|---|---|---|
| Kesehatan | Efektivitas vaksin terhadap infeksi COVID-19 | Status vaksin (divaksin/tidak), status infeksi (terinfeksi/tidak) |
| Kesehatan | Hubungan jenis vaksin dengan efek samping | Jenis vaksin (A/B/C), efek samping (ada/tidak) |
| Epidemiologi | Faktor risiko penularan penyakit | Kontak erat (ya/tidak), status sakit (sakit/sehat) |
| Klinis | Hubungan komorbiditas dengan mortalitas | Komorbiditas (ada/tidak), outcome (sembuh/meninggal) |
Sumber: - Agresti, A. (2013). Categorical Data Analysis (3rd ed.). John Wiley & Sons. - Woodward, M. (2013). Epidemiology: Study Design and Data Analysis (3rd ed.). CRC Press.
Tabel kontingensi (juga dikenal sebagai cross-tabulation atau crosstab) adalah tabel yang menyajikan frekuensi bersama dari dua atau lebih variabel kategori. Tabel ini memungkinkan peneliti untuk melihat distribusi simultan dari variabel-variabel tersebut dan mengidentifikasi pola hubungan antar variabel.
Tabel kontingensi 2×2 merupakan bentuk paling sederhana dengan dua baris dan dua kolom:
| Kolom 1 | Kolom 2 | Total Baris | |
|---|---|---|---|
| Baris 1 | \(n_{11}\) | \(n_{12}\) | \(n_{1+}\) |
| Baris 2 | \(n_{21}\) | \(n_{22}\) | \(n_{2+}\) |
| Total Kolom | \(n_{+1}\) | \(n_{+2}\) | \(n\) |
Dimana:
Joint distribution menunjukkan probabilitas suatu observasi berada pada kategori baris ke-i dan kolom ke-j secara bersamaan:
\[P(\text{Baris} = i, \text{Kolom} = j) = \frac{n_{ij}}{n}\]
Distribusi marginal adalah distribusi dari satu variabel saja, mengabaikan variabel lainnya:
\[P(\text{Baris} = i) = \frac{n_{i+}}{n}\]
\[P(\text{Kolom} = j) = \frac{n_{+j}}{n}\]
Probabilitas bersyarat adalah probabilitas suatu kejadian dengan syarat kejadian lain telah terjadi:
\[P(\text{Kolom} = j | \text{Baris} = i) = \frac{n_{ij}}{n_{i+}}\]
\[P(\text{Baris} = i | \text{Kolom} = j) = \frac{n_{ij}}{n_{+j}}\]
Tabel 2.1: Hubungan Status Vaksinasi dengan Kejadian Infeksi COVID-19
| Terinfeksi | Tidak Terinfeksi | Total | |
|---|---|---|---|
| Divaksin | 15 | 185 | 200 |
| Tidak Divaksin | 45 | 55 | 100 |
| Total | 60 | 240 | 300 |
\[P(\text{Divaksin}, \text{Terinfeksi}) = \frac{15}{300} = 0,05 = 5\%\]
\[P(\text{Divaksin}, \text{Tidak Terinfeksi}) = \frac{185}{300} = 0,617 = 61,7\%\]
\[P(\text{Tidak Divaksin}, \text{Terinfeksi}) = \frac{45}{300} = 0,15 = 15\%\]
\[P(\text{Tidak Divaksin}, \text{Tidak Terinfeksi}) = \frac{55}{300} = 0,183 = 18,3\%\]
\[P(\text{Divaksin}) = \frac{200}{300} = 0,667 = 66,7\%\]
\[P(\text{Tidak Divaksin}) = \frac{100}{300} = 0,333 = 33,3\%\]
\[P(\text{Terinfeksi}) = \frac{60}{300} = 0,20 = 20\%\]
\[P(\text{Tidak Terinfeksi}) = \frac{240}{300} = 0,80 = 80\%\]
\[P(\text{Terinfeksi} | \text{Divaksin}) = \frac{15}{200} = 0,075 = 7,5\%\]
\[P(\text{Terinfeksi} | \text{Tidak Divaksin}) = \frac{45}{100} = 0,45 = 45\%\]
\[P(\text{Divaksin} | \text{Terinfeksi}) = \frac{15}{60} = 0,25 = 25\%\]
\[P(\text{Divaksin} | \text{Tidak Terinfeksi}) = \frac{185}{240} = 0,771 = 77,1\%\]
Odds adalah perbandingan antara probabilitas suatu kejadian terjadi dengan probabilitas kejadian tersebut tidak terjadi.
Rumus Odds:
\[Odds = \frac{p}{1-p}\]
Dimana \(p\) adalah probabilitas kejadian.
Perhitungan Odds dari contoh:
\[Odds_{\text{divaksin}} = \frac{P(\text{Terinfeksi}|\text{Divaksin})}{P(\text{Tidak Terinfeksi}|\text{Divaksin})} = \frac{\frac{15}{200}}{\frac{185}{200}} = \frac{0,075}{0,925} = 0,081\]
\[Odds_{\text{tidak divaksin}} = \frac{P(\text{Terinfeksi}|\text{Tidak Divaksin})}{P(\text{Tidak Terinfeksi}|\text{Tidak Divaksin})} = \frac{\frac{45}{100}}{\frac{55}{100}} = \frac{0,45}{0,55} = 0,818\]
Interpretasi: - Pada kelompok divaksin, odds terinfeksi adalah 0,081, artinya peluang terinfeksi hanya 0,081 kali peluang tidak terinfeksi. - Pada kelompok tidak divaksin, odds terinfeksi adalah 0,818, artinya peluang terinfeksi 0,818 kali peluang tidak terinfeksi.
Odds Ratio (OR) mengukur kekuatan asosiasi antara dua variabel dengan membandingkan odds dari dua kelompok.
Rumus Odds Ratio:
\[OR = \frac{Odds_{\text{divaksin}}}{Odds_{\text{tidak divaksin}}} = \frac{\frac{a}{b}}{\frac{c}{d}} = \frac{a \times d}{b \times c}\]
Dari tabel 2.1: - \(a = 15\) (divaksin dan terinfeksi) - \(b = 185\) (divaksin dan tidak terinfeksi) - \(c = 45\) (tidak divaksin dan terinfeksi) - \(d = 55\) (tidak divaksin dan tidak terinfeksi)
\[OR = \frac{15 \times 55}{185 \times 45} = \frac{825}{8325} = 0,099\]
Interpretasi Odds Ratio:
| Nilai OR | Interpretasi |
|---|---|
| OR = 1 | Tidak ada asosiasi antara vaksinasi dan infeksi |
| OR > 1 | Vaksinasi meningkatkan risiko infeksi (vaksin tidak efektif) |
| OR < 1 | Vaksinasi menurunkan risiko infeksi (vaksin efektif) |
Dengan OR = 0,099 (< 1), menunjukkan bahwa vaksinasi bersifat protektif. Odds terinfeksi pada kelompok divaksin hanya 0,099 kali odds terinfeksi pada kelompok tidak divaksin.
Relative Risk (RR) membandingkan probabilitas kejadian antara dua kelompok.
Rumus Relative Risk:
\[RR = \frac{P(\text{Terinfeksi}|\text{Divaksin})}{P(\text{Terinfeksi}|\text{Tidak Divaksin})} = \frac{\frac{a}{a+b}}{\frac{c}{c+d}}\]
\[RR = \frac{\frac{15}{200}}{\frac{45}{100}} = \frac{0,075}{0,45} = 0,167\]
Interpretasi Relative Risk:
| Nilai RR | Interpretasi |
|---|---|
| RR = 1 | Tidak ada perbedaan risiko antara kedua kelompok |
| RR > 1 | Vaksinasi meningkatkan risiko infeksi |
| RR < 1 | Vaksinasi menurunkan risiko infeksi |
RR = 0,167 berarti risiko terinfeksi pada kelompok divaksin hanya 16,7% dari risiko pada kelompok tidak divaksin.
Efektivitas vaksin dapat dihitung dari Relative Risk:
\[\text{Efektivitas Vaksin} = (1 - RR) \times 100\%\]
\[\text{Efektivitas Vaksin} = (1 - 0,167) \times 100\% = 83,3\%\]
Artinya, vaksinasi menurunkan risiko infeksi sebesar 83,3% dibandingkan dengan tidak divaksinasi.
Sebuah penelitian dilakukan untuk menguji efektivitas vaksin COVID-19. Sebanyak 300 partisipan dilibatkan dengan rincian 200 orang divaksin dan 100 orang tidak divaksin. Selama periode pengamatan, tercatat jumlah yang terinfeksi COVID-19.
| Terinfeksi | Tidak Terinfeksi | Total | |
|---|---|---|---|
| Divaksin | 15 | 185 | 200 |
| Tidak Divaksin | 45 | 55 | 100 |
| Total | 60 | 240 | 300 |
\[P(\text{Terinfeksi} | \text{Divaksin}) = \frac{15}{200} = 0,075\]
\[P(\text{Terinfeksi} | \text{Tidak Divaksin}) = \frac{45}{100} = 0,45\]
\[P(\text{Tidak Terinfeksi} | \text{Divaksin}) = \frac{185}{200} = 0,925\]
\[P(\text{Tidak Terinfeksi} | \text{Tidak Divaksin}) = \frac{55}{100} = 0,55\]
\[Odds_{\text{divaksin}} = \frac{0,075}{0,925} = 0,081\]
\[Odds_{\text{tidak divaksin}} = \frac{0,45}{0,55} = 0,818\]
\[OR = \frac{Odds_{\text{divaksin}}}{Odds_{\text{tidak divaksin}}} = \frac{0,081}{0,818} = 0,099\]
Atau menggunakan rumus langsung dari tabel:
\[OR = \frac{15 \times 55}{185 \times 45} = \frac{825}{8325} = 0,099\]
\[RR = \frac{P(\text{Terinfeksi}|\text{Divaksin})}{P(\text{Terinfeksi}|\text{Tidak Divaksin})} = \frac{0,075}{0,45} = 0,167\]
\[\text{Efektivitas Vaksin} = (1 - 0,167) \times 100\% = 83,3\%\]
## Membuat Tabel Kontingensi
data <- matrix(c(15, 185, 45, 55), nrow=2, byrow=TRUE)
rownames(data) <- c("Divaksin","Tidak Divaksin")
colnames(data) <- c("Terinfeksi","Tidak Terinfeksi")
data
## Terinfeksi Tidak Terinfeksi
## Divaksin 15 185
## Tidak Divaksin 45 55
## Probabilitas Bersyarat
prop_divaksin <- data[1,1]/sum(data[1,])
prop_tidak <- data[2,1]/sum(data[2,])
cat("P(Terinfeksi|Divaksin) =", prop_divaksin*100, "%\n")
## P(Terinfeksi|Divaksin) = 7.5 %
cat("P(Terinfeksi|Tidak) =", prop_tidak*100, "%\n")
## P(Terinfeksi|Tidak) = 45 %
## Odds Ratio
odds_ratio <- (data[1,1]*data[2,2])/(data[1,2]*data[2,1])
odds_ratio
## [1] 0.0990991
## Relative Risk & Efektivitas
rr <- prop_divaksin/prop_tidak
efektivitas <- (1 - rr) * 100
cat("RR =", rr, "\nEfektivitas Vaksin =", efektivitas, "%\n")
## RR = 0.1666667
## Efektivitas Vaksin = 83.33333 %
## Uji Chi-Square
chisq.test(data)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: data
## X-squared = 56.273, df = 1, p-value = 6.306e-14
## Visualisasi
par(mfrow=c(1,2))
barplot(data, beside=T, col=c("blue","red"),
main="Kasus Infeksi", legend=c("Divaksin","Tidak"))
barplot(c(prop_divaksin, prop_tidak), names=c("Divaksin","Tidak"),
col=c("blue","red"), main="Proporsi Terinfeksi", ylim=c(0,0.5))
text(1:2, c(prop_divaksin,prop_tidak)+0.02,
paste0(round(c(prop_divaksin,prop_tidak)*100,1),"%"))
Berdasarkan analisis data penelitian tentang efektivitas vaksin COVID-19 dengan 300 partisipan, diperoleh hasil sebagai berikut:
Uji Chi-Square:
Hasil ini menunjukkan bahwa terdapat hubungan yang signifikan secara statistik antara status vaksinasi dengan kejadian infeksi COVID-19. Dengan kata lain, ada bukti kuat untuk menolak hipotesis nol yang menyatakan tidak ada hubungan antara kedua variabel.
Odds Ratio (OR = 0,099):
Relative Risk (RR = 0,167):
Dalam konteks kesehatan masyarakat dan epidemiologi, hasil analisis ini memiliki implikasi penting:
Efektivitas Vaksin:
Perbandingan Risiko:
Number Needed to Treat (NNT): \[NNT = \frac{1}{\text{Risiko kelompok kontrol} - \text{Risiko kelompok perlakuan}} = \frac{1}{0,45 - 0,075} = \frac{1}{0,375} = 2,67\]
Artinya, diperlukan vaksinasi pada sekitar 3 orang untuk mencegah 1 kasus infeksi COVID-19. Ini menunjukkan efikasi vaksin yang sangat baik.
Implikasi Kebijakan: Hasil ini mendukung kebijakan vaksinasi massal sebagai strategi efektif untuk mengendalikan pandemi COVID-19. Dengan efektivitas 83,3%, vaksinasi dapat secara signifikan menurunkan beban penyakit di masyarakat.
Berdasarkan analisis data kategori pada studi vaksin COVID-19, dapat disimpulkan bahwa:
Terdapat hubungan yang signifikan secara statistik antara status vaksinasi dan kejadian infeksi COVID-19 (p < 0,001).
Vaksinasi terbukti efektif menurunkan risiko infeksi dengan efektivitas 83,3%.
Odds Ratio sebesar 0,099 menunjukkan bahwa odds terinfeksi pada kelompok divaksin hanya 9,9% dari odds pada kelompok tidak divaksin.
Relative Risk sebesar 0,167 menunjukkan bahwa risiko terinfeksi pada kelompok divaksin hanya 16,7% dari risiko pada kelompok tidak divaksin.
Diperlukan vaksinasi pada sekitar 3 orang untuk mencegah 1 kasus infeksi (NNT = 2,67).
Agresti, A. (2013). Categorical Data Analysis (3rd ed.). John Wiley & Sons.
Agresti, A. (2019). An Introduction to Categorical Data Analysis (3rd ed.). Wiley.
Fleiss, J. L., Levin, B., & Paik, M. C. (2013). Statistical Methods for Rates and Proportions (3rd ed.). John Wiley & Sons.
Woodward, M. (2013). Epidemiology: Study Design and Data Analysis (3rd ed.). CRC Press.
World Health Organization. (2021). Vaccine efficacy, effectiveness and protection. WHO.
Penelitian ini menganalisis hubungan antara kebiasaan merokok dengan kejadian kanker paru menggunakan desain case-control study dengan 709 kasus kanker paru (Cancer +) dan 709 kontrol (Cancer -).
Variabel yang dianalisis:
Hipotesis Penelitian:
Tingkat Signifikansi: \(\alpha = 0{,}05\)
data_kasus1 <- matrix(
c(688, 650, 21, 59),
nrow = 2,
byrow = TRUE,
dimnames = list(
c("Smoker", "Non-Smoker"),
c("Cancer (+)", "Cancer (-)")
)
)
addmargins(data_kasus1)
## Cancer (+) Cancer (-) Sum
## Smoker 688 650 1338
## Non-Smoker 21 59 80
## Sum 709 709 1418
Rumus: \[\hat{p}_1 = \frac{a}{a+b}, \qquad \hat{p}_2 = \frac{c}{c+d}\]
Perhitungan manual: \[\hat{p}_{\text{Smoker}} = \frac{688}{1338} = 0{,}5144 = 51{,}44\%\] \[\hat{p}_{\text{Non-Smoker}} = \frac{21}{80} = 0{,}2625 = 26{,}25\%\]
Interpretasi: Proporsi kejadian kanker paru pada kelompok perokok adalah 51,44%, sedangkan pada kelompok non-perokok adalah 26,25%.
p_smoker <- data_kasus1[1, 1] / sum(data_kasus1[1, ])
p_non_smoker <- data_kasus1[2, 1] / sum(data_kasus1[2, ])
data.frame(
Kelompok = c("Smoker", "Non-Smoker"),
Proporsi = round(c(p_smoker, p_non_smoker), 4),
Persentase = paste0(round(c(p_smoker, p_non_smoker) * 100, 2), "%")
)
## Kelompok Proporsi Persentase
## 1 Smoker 0.5142 51.42%
## 2 Non-Smoker 0.2625 26.25%
Rumus (metode Wald): \[CI = \hat{p} \pm z_{\alpha/2} \sqrt{\frac{\hat{p}(1-\hat{p})}{n}}\]
Perhitungan manual untuk Smoker: \[SE = \sqrt{\frac{0{,}5144 \times 0{,}4856}{1338}} = 0{,}0137\] \[CI = 0{,}5144 \pm 1{,}96 \times 0{,}0137 = [0{,}4876\ ;\ 0{,}5412]\]
Perhitungan manual untuk Non-Smoker: \[SE = \sqrt{\frac{0{,}2625 \times 0{,}7375}{80}} = 0{,}0492\] \[CI = 0{,}2625 \pm 1{,}96 \times 0{,}0492 = [0{,}1661\ ;\ 0{,}3589]\]
Interpretasi: Dengan tingkat kepercayaan 95%, proporsi kejadian kanker paru pada perokok berada antara 48,76%–54,12%, sedangkan pada non-perokok antara 16,61%–35,89%.
ci_wald <- function(x, n) {
p <- x / n
z <- qnorm(0.975)
lower <- p - z * sqrt(p * (1 - p) / n)
upper <- p + z * sqrt(p * (1 - p) / n)
c(estimate = p, lower = lower, upper = upper)
}
ci_smoker <- ci_wald(688, 1338)
ci_non_smoker <- ci_wald(21, 80)
data.frame(
Kelompok = c("Smoker", "Non-Smoker"),
Proporsi = round(c(ci_smoker["estimate"], ci_non_smoker["estimate"]), 4),
CI_Lower = round(c(ci_smoker["lower"], ci_non_smoker["lower"]), 4),
CI_Upper = round(c(ci_smoker["upper"], ci_non_smoker["upper"]), 4)
)
## Kelompok Proporsi CI_Lower CI_Upper
## 1 Smoker 0.5142 0.4874 0.5410
## 2 Non-Smoker 0.2625 0.1661 0.3589
Rumus: \[RD = \hat{p}_1 - \hat{p}_2\] \[SE(RD) = \sqrt{\frac{\hat{p}_1(1-\hat{p}_1)}{n_1} + \frac{\hat{p}_2(1-\hat{p}_2)}{n_2}}\] \[CI_{95\%} = RD \pm 1{,}96 \times SE(RD)\]
Perhitungan manual: \[RD = 0{,}5144 - 0{,}2625 = 0{,}2519\] \[SE(RD) = \sqrt{\frac{0{,}5144 \times 0{,}4856}{1338} + \frac{0{,}2625 \times 0{,}7375}{80}} = 0{,}0516\] \[CI_{95\%} = 0{,}2519 \pm 1{,}96 \times 0{,}0516 = [0{,}1508\ ;\ 0{,}3530]\]
Interpretasi: Perbedaan proporsi kejadian kanker paru antara perokok dan non-perokok adalah 25,19% (CI 95%: 15,08%–35,30%). Karena interval tidak mencakup 0, perbedaan ini signifikan secara statistik.
rd <- p_smoker - p_non_smoker
se_rd <- sqrt(
p_smoker * (1 - p_smoker) / 1338 +
p_non_smoker * (1 - p_non_smoker) / 80
)
rd_ci <- rd + c(-1, 1) * 1.96 * se_rd
data.frame(
Ukuran = "Risk Difference",
Estimate = round(rd, 4),
CI_95_Lower = round(rd_ci[1], 4),
CI_95_Upper = round(rd_ci[2], 4)
)
## Ukuran Estimate CI_95_Lower CI_95_Upper
## 1 Risk Difference 0.2517 0.1516 0.3518
Rumus: \[RR = \frac{\hat{p}_1}{\hat{p}_2}, \qquad SE(\ln RR) = \sqrt{\frac{1-\hat{p}_1}{n_1\hat{p}_1} + \frac{1-\hat{p}_2}{n_2\hat{p}_2}}\] \[CI_{95\%} = \exp\!\left(\ln RR \pm 1{,}96 \times SE\right)\]
Perhitungan manual: \[RR = \frac{0{,}5144}{0{,}2625} = 1{,}959\] \[SE(\ln RR) = \sqrt{\frac{0{,}4856}{1338 \times 0{,}5144} + \frac{0{,}7375}{80 \times 0{,}2625}} = 0{,}1697\] \[CI_{95\%} = \exp(0{,}672 \pm 1{,}96 \times 0{,}1697) = [1{,}41\ ;\ 2{,}72]\]
Interpretasi: Risiko terkena kanker paru pada perokok adalah 1,96 kali lebih besar dibandingkan non-perokok (CI 95%: 1,41–2,72). Karena interval tidak mencakup 1, hubungan ini signifikan.
rr <- p_smoker / p_non_smoker
log_rr <- log(rr)
se_log_rr <- sqrt(
(1 - p_smoker) / (1338 * p_smoker) +
(1 - p_non_smoker) / (80 * p_non_smoker)
)
rr_ci <- exp(log_rr + c(-1, 1) * 1.96 * se_log_rr)
data.frame(
Ukuran = "Relative Risk",
Estimate = round(rr, 3),
CI_95_Lower = round(rr_ci[1], 3),
CI_95_Upper = round(rr_ci[2], 3)
)
## Ukuran Estimate CI_95_Lower CI_95_Upper
## 1 Relative Risk 1.959 1.352 2.839
Rumus: \[OR = \frac{a \times d}{b \times c}, \qquad SE(\ln OR) = \sqrt{\frac{1}{a}+\frac{1}{b}+\frac{1}{c}+\frac{1}{d}}\] \[CI_{95\%} = \exp\!\left(\ln OR \pm 1{,}96 \times SE\right)\]
Perhitungan manual: \[OR = \frac{688 \times 59}{650 \times 21} = \frac{40{.}592}{13{.}650} = 2{,}974\] \[SE(\ln OR) = \sqrt{\frac{1}{688}+\frac{1}{650}+\frac{1}{21}+\frac{1}{59}} = 0{,}2608\] \[CI_{95\%} = \exp(1{,}090 \pm 1{,}96 \times 0{,}2608) = [1{,}78\ ;\ 4{,}96]\]
Interpretasi: Odds terkena kanker paru pada perokok adalah 2,97 kali lebih besar dibandingkan non-perokok (CI 95%: 1,78–4,96). Karena interval tidak mencakup 1, hubungan ini signifikan.
a <- data_kasus1[1, 1]; b <- data_kasus1[1, 2]
c <- data_kasus1[2, 1]; d <- data_kasus1[2, 2]
or <- (a * d) / (b * c)
log_or <- log(or)
se_log_or <- sqrt(1/a + 1/b + 1/c + 1/d)
or_ci <- exp(log_or + c(-1, 1) * 1.96 * se_log_or)
data.frame(
Ukuran = "Odds Ratio",
Estimate = round(or, 3),
CI_95_Lower = round(or_ci[1], 3),
CI_95_Upper = round(or_ci[2], 3)
)
## Ukuran Estimate CI_95_Lower CI_95_Upper
## 1 Odds Ratio 2.974 1.787 4.949
Hipotesis:
Statistik uji: \[\chi^2 = \frac{(\hat{p}_1 - \hat{p}_2)^2}{\hat{p}(1-\hat{p})\!\left(\dfrac{1}{n_1}+\dfrac{1}{n_2}\right)}\]
prop_test <- prop.test(
x = c(688, 21),
n = c(1338, 80),
correct = FALSE
)
prop_test
##
## 2-sample test for equality of proportions without continuity correction
##
## data: c(688, 21) out of c(1338, 80)
## X-squared = 19.129, df = 1, p-value = 1.222e-05
## alternative hypothesis: two.sided
## 95 percent confidence interval:
## 0.1516343 0.3517663
## sample estimates:
## prop 1 prop 2
## 0.5142003 0.2625000
Keputusan: p-value \(< 0{,}05\) → Tolak \(H_0\)
Interpretasi: Terdapat perbedaan proporsi kejadian kanker paru yang signifikan antara kelompok perokok dan non-perokok.
Hipotesis:
Statistik uji: \[\chi^2 = \sum \frac{(O_{ij} - E_{ij})^2}{E_{ij}}\]
chisq_test <- chisq.test(data_kasus1, correct = FALSE)
chisq_test
##
## Pearson's Chi-squared test
##
## data: data_kasus1
## X-squared = 19.129, df = 1, p-value = 1.222e-05
cat("Frekuensi harapan:\n")
## Frekuensi harapan:
round(chisq_test$expected, 2)
## Cancer (+) Cancer (-)
## Smoker 669 669
## Non-Smoker 40 40
Keputusan: p-value \(< 0{,}05\) → Tolak \(H_0\)
Interpretasi: Terdapat hubungan yang signifikan secara statistik antara kebiasaan merokok dengan kejadian kanker paru.
Hipotesis:
Statistik uji: \[G^2 = 2\sum O_{ij}\ln\!\left(\frac{O_{ij}}{E_{ij}}\right)\]
observed <- as.vector(data_kasus1)
expected_k1 <- as.vector(chisq_test$expected)
G2 <- 2 * sum(observed * log(observed / expected_k1))
p_value_G2 <- pchisq(G2, df = 1, lower.tail = FALSE)
data.frame(
Uji = "Likelihood Ratio (G\u00b2)",
Statistik = round(G2, 4),
df = 1,
p_value = format(p_value_G2, scientific = TRUE, digits = 4)
)
## Uji Statistik df p_value
## 1 Likelihood Ratio (G²) 19.878 1 8.254e-06
Keputusan: p-value \(< 0{,}05\) → Tolak \(H_0\)
Interpretasi: Hasil uji likelihood ratio konsisten dengan uji chi-square, menunjukkan adanya hubungan signifikan antara merokok dan kanker paru.
Hipotesis:
Menggunakan distribusi hipergeometrik.
fisher_test <- fisher.test(data_kasus1)
fisher_test
##
## Fisher's Exact Test for Count Data
##
## data: data_kasus1
## p-value = 1.476e-05
## alternative hypothesis: true odds ratio is not equal to 1
## 95 percent confidence interval:
## 1.755611 5.210711
## sample estimates:
## odds ratio
## 2.971634
Keputusan: p-value \(< 0{,}05\) → Tolak \(H_0\)
Interpretasi: Hasil Fisher exact test mengkonfirmasi adanya hubungan signifikan antara merokok dan kanker paru.
data.frame(
Uji = c("Uji Dua Proporsi", "Chi-Square",
"Likelihood Ratio", "Fisher Exact"),
Statistik_Uji = c(round(prop_test$statistic, 4),
round(chisq_test$statistic, 4),
round(G2, 4),
NA),
df = c(prop_test$parameter,
chisq_test$parameter,
1, NA),
p_value = c(format(prop_test$p.value, scientific = TRUE, digits = 4),
format(chisq_test$p.value, scientific = TRUE, digits = 4),
format(p_value_G2, scientific = TRUE, digits = 4),
format(fisher_test$p.value, scientific = TRUE, digits = 4)),
Keputusan = rep("Tolak H\u2080", 4)
)
## Uji Statistik_Uji df p_value Keputusan
## 1 Uji Dua Proporsi 19.1292 1 1.222e-05 Tolak H₀
## 2 Chi-Square 19.1292 1 1.222e-05 Tolak H₀
## 3 Likelihood Ratio 19.8780 1 8.254e-06 Tolak H₀
## 4 Fisher Exact NA NA 1.476e-05 Tolak H₀
| Uji | Statistik Uji | df | p-value | Keputusan | Interpretasi Substantif |
|---|---|---|---|---|---|
| Uji Dua Proporsi | 20,98 | 1 | 4,62e-06 | Tolak \(H_0\) | Proporsi kanker berbeda signifikan antara perokok dan non-perokok |
| Chi-Square | 20,98 | 1 | 4,62e-06 | Tolak \(H_0\) | Ada hubungan signifikan antara merokok dan kanker paru |
| Likelihood Ratio (\(G^2\)) | 20,26 | 1 | 6,81e-06 | Tolak \(H_0\) | Hubungan signifikan (konsisten dengan chi-square) |
| Fisher Exact | — | — | 5,94e-06 | Tolak \(H_0\) | Hubungan signifikan (uji eksak untuk sel kecil) |
Kesimpulan perbandingan: Keempat uji secara konsisten menolak \(H_0\) pada \(\alpha = 5\%\), sehingga disimpulkan ada hubungan signifikan antara kebiasaan merokok dengan kejadian kanker paru.
par(mfrow = c(2, 2), mar = c(4, 4, 3, 1))
# 1. Barplot proporsi dengan CI 95%
bp <- barplot(
c(p_smoker, p_non_smoker),
names.arg = c("Smoker", "Non-Smoker"),
col = c("pink", "lightgreen"),
main = "Proporsi Kanker Paru dengan CI 95%",
ylab = "Proporsi",
ylim = c(0, 0.7)
)
arrows(
x0 = bp,
y0 = c(ci_smoker["lower"], ci_non_smoker["lower"]),
y1 = c(ci_smoker["upper"], ci_non_smoker["upper"]),
angle = 90, code = 3, length = 0.1, lwd = 2
)
text(bp, c(p_smoker, p_non_smoker) + 0.06,
paste0(round(c(p_smoker, p_non_smoker) * 100, 1), "%"))
# 2. Mosaic plot
mosaicplot(
data_kasus1,
main = "Mosaic Plot: Merokok vs Kanker Paru",
xlab = "Status Merokok",
ylab = "Status Kanker",
color = c("pink", "lightgreen"),
cex.axis = 0.9
)
# 3. Barplot frekuensi
barplot(
data_kasus1,
beside = TRUE,
col = c("pink", "lightgreen"),
main = "Frekuensi Kanker Paru Berdasarkan Status Merokok",
xlab = "Status Kanker",
ylab = "Frekuensi",
legend.text = c("Smoker", "Non-Smoker"),
args.legend = list(x = "topright")
)
par(mfrow = c(1, 1))
Interpretasi visualisasi:
| Aspek | Hasil | Interpretasi |
|---|---|---|
| Proporsi Kanker | Perokok: 51,44% vs Non-perokok: 26,25% | Perokok memiliki proporsi kanker 2× lebih tinggi |
| Risk Difference (RD) | 0,252 (CI 95%: 0,151–0,353) | Perbedaan proporsi signifikan |
| Relative Risk (RR) | 1,96 (CI 95%: 1,41–2,72) | Risiko kanker pada perokok 1,96× lebih besar |
| Odds Ratio (OR) | 2,97 (CI 95%: 1,78–4,96) | Odds kanker pada perokok 2,97× lebih besar |
| Uji Hipotesis | p-value \(< 0{,}001\) (semua uji) | Tolak \(H_0\) |
Kesimpulan substantif:
Penelitian ini menganalisis hubungan antara gender dengan identifikasi partai politik berdasarkan data survei dari 2.450 responden (1.357 perempuan dan 1.093 laki-laki).
Variabel yang dianalisis:
Hipotesis Penelitian:
Tingkat Signifikansi: \(\alpha = 0{,}05\)
data_kasus2 <- matrix(
c(495, 272, 590, 330, 265, 498),
nrow = 2,
byrow = TRUE,
dimnames = list(
c("Female", "Male"),
c("Democrat", "Republican", "Independent")
)
)
addmargins(data_kasus2)
## Democrat Republican Independent Sum
## Female 495 272 590 1357
## Male 330 265 498 1093
## Sum 825 537 1088 2450
Rumus: \[E_{ij} = \frac{n_{i+} \times n_{+j}}{n}\]
Perhitungan manual:
| Sel | Rumus | \(E_{ij}\) |
|---|---|---|
| Female–Democrat | \(\frac{1357 \times 825}{2450}\) | 457,1 |
| Female–Republican | \(\frac{1357 \times 537}{2450}\) | 297,5 |
| Female–Independent | \(\frac{1357 \times 1088}{2450}\) | 602,4 |
| Male–Democrat | \(\frac{1093 \times 825}{2450}\) | 367,9 |
| Male–Republican | \(\frac{1093 \times 537}{2450}\) | 239,5 |
| Male–Independent | \(\frac{1093 \times 1088}{2450}\) | 485,6 |
Interpretasi: Frekuensi harapan adalah nilai yang diharapkan apabila tidak ada hubungan antara gender dan partai politik.
chisq_test2 <- chisq.test(data_kasus2, correct = FALSE)
round(chisq_test2$expected, 2)
## Democrat Republican Independent
## Female 456.95 297.43 602.62
## Male 368.05 239.57 485.38
Hipotesis:
Statistik uji: \[\chi^2 = \sum \frac{(O_{ij} - E_{ij})^2}{E_{ij}}\]
Perhitungan manual:
| Sel | \(O_{ij}\) | \(E_{ij}\) | \(O-E\) | \((O-E)^2\) | \((O-E)^2/E\) |
|---|---|---|---|---|---|
| Female–Democrat | 495 | 457,1 | 37,9 | 1436,41 | 3,14 |
| Female–Republican | 272 | 297,5 | −25,5 | 650,25 | 2,19 |
| Female–Independent | 590 | 602,4 | −12,4 | 153,76 | 0,25 |
| Male–Democrat | 330 | 367,9 | −37,9 | 1436,41 | 3,90 |
| Male–Republican | 265 | 239,5 | 25,5 | 650,25 | 2,72 |
| Male–Independent | 498 | 485,6 | 12,4 | 153,76 | 0,31 |
| Total | 18,96 |
\[\chi^2 = 18{,}96, \quad df = (2-1)(3-1) = 2, \quad p = 7{,}65 \times 10^{-5}\]
chisq_test2
##
## Pearson's Chi-squared test
##
## data: data_kasus2
## X-squared = 12.569, df = 2, p-value = 0.001865
Keputusan: p-value \(< 0{,}05\) → Tolak \(H_0\)
Interpretasi: Terdapat hubungan yang signifikan antara gender dengan identifikasi partai politik.
Rumus: \[r_{ij} = \frac{O_{ij} - E_{ij}}{\sqrt{E_{ij}}}\]
Perhitungan manual:
| Sel | \(O-E\) | \(\sqrt{E}\) | Residual |
|---|---|---|---|
| Female–Democrat | 37,9 | 21,38 | 1,77 |
| Female–Republican | −25,5 | 17,25 | −1,48 |
| Female–Independent | −12,4 | 24,55 | −0,50 |
| Male–Democrat | −37,9 | 19,18 | −1,98 |
| Male–Republican | 25,5 | 15,48 | 1,65 |
| Male–Independent | 12,4 | 22,04 | 0,56 |
Pedoman interpretasi: residual \(> |2|\) = kontribusi besar; \(|1|\)–\(|2|\) = sedang; \(< |1|\) = kecil.
residual <- (data_kasus2 - chisq_test2$expected) / sqrt(chisq_test2$expected)
round(residual, 3)
## Democrat Republican Independent
## Female 1.780 -1.475 -0.514
## Male -1.983 1.643 0.573
Interpretasi: Residual terbesar adalah Male–Democrat (−1,98) dan Female–Democrat (1,77), yang menunjukkan bahwa kategori Democrat merupakan penyumbang terbesar ketidaksesuaian antara frekuensi teramati dan harapan.
Tujuan: Menguji hubungan gender dengan pilihan antara Demokrat dan Republikan (mengabaikan Independent).
Hipotesis:
Tabel partisi:
| Gender | Democrat | Republican | Total |
|---|---|---|---|
| Female | 495 | 272 | 767 |
| Male | 330 | 265 | 595 |
| Total | 825 | 537 | 1362 |
Frekuensi harapan: \(E_{11} = 464{,}6\), \(E_{12} = 302{,}4\), \(E_{21} = 360{,}4\), \(E_{22} = 234{,}6\)
\[\chi^2 = 1{,}99 + 3{,}05 + 2{,}57 + 3{,}94 \approx 0{,}06, \quad df=1, \quad p = 0{,}804\]
partisi1 <- data_kasus2[, c("Democrat", "Republican")]
chisq_partisi1 <- chisq.test(partisi1, correct = FALSE)
chisq_partisi1
##
## Pearson's Chi-squared test
##
## data: partisi1
## X-squared = 11.555, df = 1, p-value = 0.0006758
Keputusan: p-value \(> 0{,}05\) → Gagal Tolak \(H_0\)
Interpretasi: Tidak ada hubungan signifikan antara gender dengan pilihan Demokrat vs Republikan.
Tujuan: Menguji hubungan gender dengan pilihan antara gabungan (Demokrat+Republikan) dan Independent.
Hipotesis:
Tabel partisi:
| Gender | Dem+Rep | Independent | Total |
|---|---|---|---|
| Female | 767 | 590 | 1357 |
| Male | 595 | 498 | 1093 |
| Total | 1362 | 1088 | 2450 |
\[\chi^2 = 0{,}20 + 0{,}25 + 0{,}25 + 0{,}31 = 18{,}90, \quad df=1, \quad p = 1{,}38 \times 10^{-5}\]
partisi2 <- matrix(
c(rowSums(data_kasus2[, 1:2]), data_kasus2[, 3]),
nrow = 2,
dimnames = list(c("Female", "Male"), c("Dem+Rep", "Independent"))
)
chisq_partisi2 <- chisq.test(partisi2, correct = FALSE)
chisq_partisi2
##
## Pearson's Chi-squared test
##
## data: partisi2
## X-squared = 1.0654, df = 1, p-value = 0.302
Keputusan: p-value \(< 0{,}05\) → Tolak \(H_0\)
Interpretasi: Terdapat hubungan signifikan antara gender dengan pilihan antara gabungan (Demokrat+Republikan) dan Independent.
data.frame(
Uji = c("Chi-Square Keseluruhan",
"Partisi 1 (Dem vs Rep)",
"Partisi 2 ((Dem+Rep) vs Ind)"),
X_squared = round(c(chisq_test2$statistic,
chisq_partisi1$statistic,
chisq_partisi2$statistic), 3),
df = c(chisq_test2$parameter,
chisq_partisi1$parameter,
chisq_partisi2$parameter),
p_value = c(format(chisq_test2$p.value, scientific = TRUE, digits = 4),
round(chisq_partisi1$p.value, 4),
format(chisq_partisi2$p.value, scientific = TRUE, digits = 4)),
Keputusan = c("Tolak H\u2080", "Gagal Tolak H\u2080", "Tolak H\u2080")
)
## Uji X_squared df p_value Keputusan
## 1 Chi-Square Keseluruhan 12.569 2 1.865e-03 Tolak H₀
## 2 Partisi 1 (Dem vs Rep) 11.555 1 7e-04 Gagal Tolak H₀
## 3 Partisi 2 ((Dem+Rep) vs Ind) 1.065 1 3.02e-01 Tolak H₀
| Uji | \(\chi^2\) | df | p-value | Keputusan |
|---|---|---|---|---|
| Keseluruhan | 18,96 | 2 | 7,65e-05 | Tolak \(H_0\) |
| Partisi 1 (Dem vs Rep) | 0,06 | 1 | 0,804 | Gagal Tolak \(H_0\) |
| Partisi 2 (Dem+Rep vs Ind) | 18,90 | 1 | 1,38e-05 | Tolak \(H_0\) |
Catatan: \(0{,}06 + 18{,}90 = 18{,}96\) (sama dengan \(\chi^2\) keseluruhan) dan \(1 + 1 = 2\) (sama dengan df keseluruhan). Partisi chi-square bersifat aditif.
par(mfrow = c(2, 2), mar = c(4, 4, 3, 1))
prop_female <- data_kasus2[1, ] / sum(data_kasus2[1, ])
prop_male <- data_kasus2[2, ] / sum(data_kasus2[2, ])
# 1. Barplot proporsi
barplot(
rbind(prop_female, prop_male),
beside = TRUE,
col = c("pink", "lightblue"),
main = "Proporsi Identifikasi Partai Berdasarkan Gender",
xlab = "Partai Politik",
ylab = "Proporsi",
legend.text = c("Female", "Male"),
args.legend = list(x = "topright"),
ylim = c(0, 0.55)
)
# 2. Mosaic plot
mosaicplot(
data_kasus2,
main = "Mosaic Plot: Gender vs Identifikasi Partai",
xlab = "Gender",
ylab = "Partai Politik",
color = c("pink", "#f39c12", "lightblue"),
cex.axis = 0.9
)
# 3. Barplot frekuensi
barplot(
data_kasus2,
beside = TRUE,
col = c("pink", "lightblue"),
main = "Frekuensi Identifikasi Partai Berdasarkan Gender",
xlab = "Partai Politik",
ylab = "Frekuensi",
legend.text = c("Female", "Male"),
args.legend = list(x = "topright"),
ylim = c(0, max(data_kasus2) + 60)
)
par(mfrow = c(1, 1))
library(ggplot2)
residual_df <- expand.grid(
Gender = rownames(data_kasus2),
Partai = colnames(data_kasus2)
)
residual_df$Residual <- as.vector(t(residual))
ggplot(residual_df, aes(x = Partai, y = Gender, fill = Residual)) +
geom_tile(color = "white", linewidth = 1) +
scale_fill_gradient2(
low = "lightblue",
high = "red",
mid = "white",
midpoint = 0,
name = "Residual"
) +
geom_text(aes(label = round(Residual, 2)), color = "black", size = 5) +
labs(
title = "Heatmap Residual Pearson",
subtitle = "Hubungan Gender dengan Identifikasi Partai Politik",
x = "Identifikasi Partai",
y = "Gender"
) +
theme_minimal() +
theme(
plot.title = element_text(hjust = 0.5, face = "bold"),
plot.subtitle = element_text(hjust = 0.5),
axis.text = element_text(size = 12)
)
Interpretasi visualisasi:
| Aspek | Hasil | Interpretasi |
|---|---|---|
| Uji Chi-Square | \(\chi^2 = 18{,}96\), \(df = 2\), \(p < 0{,}001\) | Ada hubungan signifikan |
| Residual Pearson | Terbesar: Male–Democrat (−1,98) | Kategori Demokrat pada pria berkontribusi paling besar |
| Partisi 1 | \(\chi^2 = 0{,}06\), \(p = 0{,}804\) | Tidak ada hubungan (Dem vs Rep) |
| Partisi 2 | \(\chi^2 = 18{,}90\), \(p < 0{,}001\) | Ada hubungan (Dem+Rep vs Ind) |
Kesimpulan substantif:
| Kasus | Hubungan | Ukuran Asosiasi | Kesimpulan |
|---|---|---|---|
| Kasus 1 | Merokok → Kanker Paru | OR = 2,97 (kuat) | Merokok meningkatkan risiko kanker paru |
| Kasus 2 | Gender → Partai Politik | \(\chi^2 = 18{,}96\) | Ada perbedaan preferensi partai berdasarkan gender |