DAFTAR ISI
Analisis data kategori adalah metode statistik yang digunakan untuk menganalisis data yang bersifat kategorikal, di mana observasi dikelompokkan ke dalam kategori-kategori tertentu (Agresti, 2019). Data kategori berbeda dengan data numerik karena nilainya tidak memiliki makna kuantitatif, melainkan merepresentasikan kualitas atau atribut tertentu.
Variabel kategori memiliki karakteristik utama sebagai berikut:
| Bidang | Contoh Penelitian | Variabel Kategori |
|---|---|---|
| Kesehatan | Hubungan merokok dengan kanker paru | Status merokok (Ya/Tidak), Status kanker (Ya/Tidak) |
| Kesehatan | Efektivitas vaksin COVID-19 | Status vaksin (Ya/Tidak), Status infeksi (Ya/Tidak) |
| Pendidikan | Pengaruh metode belajar terhadap kelulusan | Metode belajar (A/B/C), Status kelulusan (Lulus/Tidak) |
| Sosial | Hubungan pendidikan dengan afiliasi politik | Tingkat pendidikan, Afiliasi partai (Demokrat/Republik/Independen) |
| Sosial | Perbedaan preferensi politik berdasarkan gender | Gender (Pria/Wanita), Afiliasi partai |
Sumber: Agresti, A. (2019). An Introduction to Categorical Data Analysis (3rd ed.). John Wiley & Sons.
Tabel kontingensi (cross-tabulation) adalah tabel yang menyajikan frekuensi bersama dari dua atau lebih variabel kategori. Tabel ini menunjukkan distribusi observasi berdasarkan kombinasi kategori dari variabel-variabel yang dianalisis.
Untuk tabel kontingensi \(r \times c\) (r baris dan c kolom), struktur umumnya adalah:
| Variabel X | \(Y_1\) | \(Y_2\) | … | \(Y_c\) | Total Baris |
|---|---|---|---|---|---|
| \(X_1\) | \(n_{11}\) | \(n_{12}\) | … | \(n_{1c}\) | \(n_{1.}\) |
| \(X_2\) | \(n_{21}\) | \(n_{22}\) | … | \(n_{2c}\) | \(n_{2.}\) |
| … | … | … | … | … | … |
| \(X_r\) | \(n_{r1}\) | \(n_{r2}\) | … | \(n_{rc}\) | \(n_{r.}\) |
| Total Kolom | \(n_{.1}\) | \(n_{.2}\) | … | \(n_{.c}\) | \(n\) |
Dimana: - \(n_{ij}\) = frekuensi observasi pada baris ke-i dan kolom ke-j - \(n_{i.} = \sum_{j=1}^c n_{ij}\) = total baris ke-i - \(n_{.j} = \sum_{i=1}^r n_{ij}\) = total kolom ke-j - \(n = \sum_{i=1}^r \sum_{j=1}^c n_{ij}\) = total keseluruhan observasi
Distribusi bersama menunjukkan probabilitas suatu observasi berada pada kategori tertentu dari kedua variabel secara bersamaan.
\[P(X = i, Y = j) = \frac{n_{ij}}{n}\]
Distribusi marginal menunjukkan probabilitas suatu observasi berada pada kategori tertentu dari satu variabel, tanpa memperhatikan variabel lainnya.
\[P(X = i) = \frac{n_{i.}}{n} = \sum_{j=1}^c P(X = i, Y = j)\]
\[P(Y = j) = \frac{n_{.j}}{n} = \sum_{i=1}^r P(X = i, Y = j)\]
Probabilitas bersyarat menunjukkan probabilitas suatu observasi berada pada kategori tertentu dari satu variabel, dengan syarat variabel lainnya diketahui.
\[P(Y = j | X = i) = \frac{n_{ij}}{n_{i.}} = \frac{P(X = i, Y = j)}{P(X = i)}\]
\[P(X = i | Y = j) = \frac{n_{ij}}{n_{.j}} = \frac{P(X = i, Y = j)}{P(Y = j)}\]
Berikut adalah contoh tabel kontingensi untuk hubungan merokok dengan kanker paru:
Tabel 2.1: Hubungan Merokok dengan Kanker Paru
| Status Merokok | Kanker Paru | Tidak Kanker Paru | Total |
|---|---|---|---|
| Merokok | 60 | 40 | 100 |
| Tidak Merokok | 20 | 80 | 100 |
| Total | 80 | 120 | 200 |
Perhitungan Distribusi:
Joint Distribution: - \(P(\text{Merokok, Kanker}) = 60/200 = 0.30\) - \(P(\text{Merokok, Tidak Kanker}) = 40/200 = 0.20\) - \(P(\text{Tidak Merokok, Kanker}) = 20/200 = 0.10\) - \(P(\text{Tidak Merokok, Tidak Kanker}) = 80/200 = 0.40\)
Marginal Distribution: - \(P(\text{Merokok}) = 100/200 = 0.50\) - \(P(\text{Tidak Merokok}) = 100/200 = 0.50\) - \(P(\text{Kanker}) = 80/200 = 0.40\) - \(P(\text{Tidak Kanker}) = 120/200 = 0.60\)
Conditional Probability: - \(P(\text{Kanker}|\text{Merokok}) = 60/100 = 0.60\) - \(P(\text{Tidak Kanker}|\text{Merokok}) = 40/100 = 0.40\) - \(P(\text{Kanker}|\text{Tidak Merokok}) = 20/100 = 0.20\) - \(P(\text{Tidak Kanker}|\text{Tidak Merokok}) = 80/100 = 0.80\)
Odds adalah perbandingan antara probabilitas suatu kejadian terjadi dengan probabilitas kejadian tersebut tidak terjadi.
\[\text{Odds} = \frac{P(\text{Kejadian})}{P(\text{Tidak Kejadian})} = \frac{\pi}{1-\pi}\]
Dari tabel 2.1:
Odds kanker pada perokok: \[\text{Odds}_{\text{perokok}} = \frac{60/100}{40/100} = \frac{60}{40} = 1.5\]
Odds kanker pada tidak merokok: \[\text{Odds}_{\text{tidak merokok}} = \frac{20/100}{80/100} = \frac{20}{80} = 0.25\]
Odds Ratio adalah perbandingan odds antara dua kelompok. Ukuran ini menunjukkan kekuatan asosiasi antara variabel prediktor dan variabel respons.
Untuk tabel \(2 \times 2\) dengan notasi:
| Y=1 (Kejadian) | Y=2 (Tidak Kejadian) | |
|---|---|---|
| X=1 (Terpapar) | \(a\) | \(b\) |
| X=2 (Tidak Terpapar) | \(c\) | \(d\) |
\[OR = \frac{\text{Odds}_1}{\text{Odds}_2} = \frac{a/b}{c/d} = \frac{a \times d}{b \times c}\]
Standar Error dan Interval Kepercayaan: \[SE(\ln(OR)) = \sqrt{\frac{1}{a} + \frac{1}{b} + \frac{1}{c} + \frac{1}{d}}\] \[95\% CI = \exp(\ln(OR) \pm 1.96 \times SE(\ln(OR)))\]
Dari tabel 2.1: \(a=60, b=40, c=20, d=80\)
\[OR = \frac{60 \times 80}{40 \times 20} = \frac{4800}{800} = 6\]
\[SE(\ln(OR)) = \sqrt{\frac{1}{60} + \frac{1}{40} + \frac{1}{20} + \frac{1}{80}} = 0.3227\]
\[95\% CI = \exp(\ln(6) \pm 1.96 \times 0.3227) = (3.19, 11.30)\]
Interpretasi: Odds terkena kanker paru pada perokok adalah 6 kali lebih besar dibandingkan dengan bukan perokok (95% CI: 3.19 - 11.30).
Relative Risk adalah perbandingan probabilitas kejadian antara dua kelompok. Ukuran ini lebih intuitif daripada odds ratio karena berbasis probabilitas langsung.
\[RR = \frac{P(\text{Kejadian}|\text{Kelompok 1})}{P(\text{Kejadian}|\text{Kelompok 2})} = \frac{a/(a+b)}{c/(c+d)}\]
Standar Error dan Interval Kepercayaan: \[SE(\ln(RR)) = \sqrt{\frac{1}{a} - \frac{1}{a+b} + \frac{1}{c} - \frac{1}{c+d}}\] \[95\% CI = \exp(\ln(RR) \pm 1.96 \times SE(\ln(RR)))\]
Dari tabel 2.1:
\[RR = \frac{60/100}{20/100} = \frac{0.60}{0.20} = 3\]
\[SE(\ln(RR)) = \sqrt{\frac{1}{60} - \frac{1}{100} + \frac{1}{20} - \frac{1}{100}} = 0.169\]
\[95\% CI = \exp(\ln(3) \pm 1.96 \times 0.169) = (2.15, 4.18)\]
Interpretasi: Perokok memiliki risiko 3 kali lebih besar terkena kanker paru dibandingkan bukan perokok.
Risk Difference adalah selisih absolut risiko antara dua kelompok. Ukuran ini menunjukkan besarnya pengurangan risiko jika faktor paparan dihilangkan.
\[RD = P(\text{Kejadian}|\text{Kelompok 1}) - P(\text{Kejadian}|\text{Kelompok 2}) = \frac{a}{a+b} - \frac{c}{c+d}\]
Standar Error: \[SE(RD) = \sqrt{\frac{p_1(1-p_1)}{n_1} + \frac{p_2(1-p_2)}{n_2}}\]
Interval Kepercayaan: \[95\% CI = RD \pm 1.96 \times SE(RD)\]
Dari tabel 2.1:
\[RD = \frac{60}{100} - \frac{20}{100} = 0.60 - 0.20 = 0.40\]
\[SE(RD) = \sqrt{\frac{0.6 \times 0.4}{100} + \frac{0.2 \times 0.8}{100}} = \sqrt{0.0024 + 0.0016} = 0.0632\]
\[95\% CI = 0.40 \pm 1.96 \times 0.0632 = (0.276, 0.524)\]
Interpretasi: Terdapat selisih risiko sebesar 40% antara perokok dan bukan perokok. Artinya, merokok meningkatkan risiko kanker paru sebesar 40%.
Uji Chi-Square digunakan untuk menguji independensi antara dua variabel kategori. Uji ini membandingkan frekuensi observasi dengan frekuensi yang diharapkan jika kedua variabel independen.
Hipotesis: - \(H_0\): Kedua variabel independen (tidak ada hubungan) - \(H_1\): Kedua variabel dependen (ada hubungan)
Statistik Uji: \[\chi^2 = \sum_{i=1}^r \sum_{j=1}^c \frac{(O_{ij} - E_{ij})^2}{E_{ij}}\]
Dimana: - \(O_{ij}\) = frekuensi observasi pada baris i, kolom j - \(E_{ij} = \frac{n_{i.} \times n_{.j}}{n}\) = frekuensi harapan
Derajat Bebas: \(df = (r-1) \times (c-1)\)
# Data penelitian
data_chi <- matrix(c(60, 40, 20, 80), nrow = 2, byrow = TRUE)
rownames(data_chi) <- c("Merokok", "Tidak Merokok")
colnames(data_chi) <- c("Kanker", "Tidak Kanker")
# Uji Chi-Square
chi_test <- chisq.test(data_chi, correct = TRUE)
print(chi_test)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: data_chi
## X-squared = 31.688, df = 1, p-value = 1.811e-08
# Frekuensi harapan
print("Frekuensi Harapan:")
## [1] "Frekuensi Harapan:"
print(round(chi_test$expected, 2))
## Kanker Tidak Kanker
## Merokok 40 60
## Tidak Merokok 40 60
Berdasarkan hasil uji Chi-Square: - Nilai Chi-Square = 32.00 - Derajat bebas = 1 - p-value = 1.54e-08 (< 0.05)
Kesimpulan: Tolak \(H_0\). Terdapat hubungan yang signifikan antara status merokok dengan kejadian kanker paru pada taraf signifikansi 5%.
Uji Exact Fisher digunakan sebagai alternatif uji Chi-Square ketika ukuran sampel kecil atau ketika frekuensi harapan < 5. Uji ini menghitung probabilitas eksak dari tabel kontingensi berdasarkan distribusi hipergeometrik.
Probabilitas hipergeometrik untuk tabel \(2 \times 2\):
\[P = \frac{\binom{a+b}{a} \binom{c+d}{c}}{\binom{n}{a+c}} = \frac{(a+b)!(c+d)!(a+c)!(b+d)!}{a!b!c!d!n!}\]
# Data untuk uji Fisher dengan sampel kecil
data_fisher <- matrix(c(18, 2, 11, 9), nrow = 2, byrow = TRUE)
rownames(data_fisher) <- c("Terpapar", "Tidak Terpapar")
colnames(data_fisher) <- c("Kejadian", "Tidak Kejadian")
print("Data untuk Uji Fisher:")
## [1] "Data untuk Uji Fisher:"
print(data_fisher)
## Kejadian Tidak Kejadian
## Terpapar 18 2
## Tidak Terpapar 11 9
# Uji Exact Fisher
fisher_result <- fisher.test(data_fisher)
print(fisher_result)
##
## Fisher's Exact Test for Count Data
##
## data: data_fisher
## p-value = 0.03095
## alternative hypothesis: true odds ratio is not equal to 1
## 95 percent confidence interval:
## 1.147793 78.183838
## sample estimates:
## odds ratio
## 6.994073
Berdasarkan hasil uji Exact Fisher: - Odds Ratio = 6.99 - p-value = 0.03095 (< 0.05) - 95% CI = (1.15, 78.18)
Kesimpulan: Tolak \(H_0\). Terdapat hubungan yang signifikan antara paparan dengan kejadian (p-value < 0.05). Odds ratio 6.99 menunjukkan bahwa kelompok terpapar memiliki odds 6.99 kali lebih besar untuk mengalami kejadian dibandingkan kelompok tidak terpapar.
Uji G² atau Likelihood Ratio Test adalah alternatif uji Chi-Square yang berdasarkan pada rasio likelihood. Uji ini sering digunakan dalam pemodelan log-linear.
\[G^2 = 2 \sum_{i=1}^r \sum_{j=1}^c O_{ij} \ln\left(\frac{O_{ij}}{E_{ij}}\right)\]
Dimana \(G^2\) mengikuti distribusi Chi-Square dengan derajat bebas yang sama dengan uji Chi-Square Pearson.
# Data penelitian
data_g2 <- matrix(c(688, 650, 21, 59), nrow = 2, byrow = TRUE)
rownames(data_g2) <- c("Smoker", "Non-Smoker")
colnames(data_g2) <- c("Cancer (+)", "Control (-)")
print("Data untuk Uji G²:")
## [1] "Data untuk Uji G²:"
print(data_g2)
## Cancer (+) Control (-)
## Smoker 688 650
## Non-Smoker 21 59
# Hitung frekuensi harapan
expected <- chisq.test(data_g2)$expected
# Hitung G²
G2 <- 2 * sum(data_g2 * log(data_g2 / expected))
critical_value <- qchisq(0.95, df = 1)
cat("Nilai G²:", round(G2, 4), "\n")
## Nilai G²: 19.878
cat("Nilai Kritis (α=0.05):", round(critical_value, 4), "\n")
## Nilai Kritis (α=0.05): 3.8415
cat("Keputusan:", ifelse(G2 > critical_value, "Tolak H0", "Gagal Tolak H0"), "\n")
## Keputusan: Tolak H0
Berdasarkan hasil uji G²: - Nilai G² = 19.88 - Nilai kritis (α=0.05, df=1) = 3.84 - Karena G² > nilai kritis, maka tolak \(H_0\)
Kesimpulan: Terdapat hubungan yang signifikan antara status merokok dengan kejadian kanker.
Untuk tabel kontingensi yang lebih besar dari \(2 \times 2\), partisi Chi-Square digunakan untuk mengidentifikasi sumber signifikansi. Tabel dipecah menjadi beberapa tabel \(2 \times 2\) yang independen.
# Data penelitian: Gender vs Afiliasi Politik
data_politik <- matrix(c(495, 272, 590, 330, 265, 498), nrow = 2, byrow = TRUE)
colnames(data_politik) <- c("Democrat", "Republican", "Independent")
rownames(data_politik) <- c("Female", "Male")
print("Data Gender vs Afiliasi Politik:")
## [1] "Data Gender vs Afiliasi Politik:"
print(data_politik)
## Democrat Republican Independent
## Female 495 272 590
## Male 330 265 498
# Uji Chi-Square keseluruhan
chi_total <- chisq.test(data_politik)
cat("\n=== UJI CHI-SQUARE KESELURUHAN ===\n")
##
## === UJI CHI-SQUARE KESELURUHAN ===
print(chi_total)
##
## Pearson's Chi-squared test
##
## data: data_politik
## X-squared = 12.569, df = 2, p-value = 0.001865
# Partisi 1: Democrat vs Republican
data_part1 <- matrix(c(495, 272, 330, 265), nrow = 2, byrow = TRUE)
colnames(data_part1) <- c("Democrat", "Republican")
rownames(data_part1) <- c("Female", "Male")
chi_part1 <- chisq.test(data_part1)
cat("\n=== PARTISI 1: Democrat vs Republican ===\n")
##
## === PARTISI 1: Democrat vs Republican ===
print(chi_part1)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: data_part1
## X-squared = 11.178, df = 1, p-value = 0.0008279
# Partisi 2: (Democrat+Republican) vs Independent
data_part2 <- matrix(c(495+272, 590, 330+265, 498), nrow = 2, byrow = TRUE)
colnames(data_part2) <- c("Dem+Rep", "Independent")
rownames(data_part2) <- c("Female", "Male")
chi_part2 <- chisq.test(data_part2)
cat("\n=== PARTISI 2: (Dem+Rep) vs Independent ===\n")
##
## === PARTISI 2: (Dem+Rep) vs Independent ===
print(chi_part2)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: data_part2
## X-squared = 0.98267, df = 1, p-value = 0.3215
# Verifikasi
cat("\n=== VERIFIKASI ===\n")
##
## === VERIFIKASI ===
cat("Chi-Square Total:", round(chi_total$statistic, 4), "\n")
## Chi-Square Total: 12.5693
cat("Jumlah Partisi:", round(chi_part1$statistic + chi_part2$statistic, 4), "\n")
## Jumlah Partisi: 12.1603
cat("df Total:", chi_total$parameter, "\n")
## df Total: 2
cat("Jumlah df Partisi:", chi_part1$parameter + chi_part2$parameter, "\n")
## Jumlah df Partisi: 2
Hasil Uji Chi-Square Keseluruhan: - Chi-Square = 12.57 - df = 2 - p-value = 0.00186 (< 0.05) - Kesimpulan: Ada hubungan signifikan antara gender dan afiliasi politik
Hasil Partisi 1 (Demokrat vs Republik): - Chi-Square = 11.18 - df = 1 - p-value = 0.00083 (< 0.05) - Kesimpulan: Ada perbedaan signifikan antara pria dan wanita dalam preferensi antara Demokrat dan Republik
Hasil Partisi 2 (Dem+Rep vs Independen): - Chi-Square = 0.98 - df = 1 - p-value = 0.3215 (> 0.05) - Kesimpulan: Tidak ada perbedaan signifikan antara pria dan wanita dalam preferensi antara partai besar (Dem+Rep) vs Independen
Kesimpulan Akhir: Signifikansi keseluruhan disebabkan oleh perbedaan preferensi antara Demokrat dan Republik berdasarkan gender, bukan karena perbedaan dalam memilih Independen.
Uji proporsi dua sampel digunakan untuk membandingkan proporsi kejadian antara dua kelompok independen. Uji ini merupakan alternatif dari uji Chi-Square untuk tabel \(2 \times 2\) yang berfokus pada perbedaan proporsi.
Hipotesis: - \(H_0: p_1 = p_2\) (proporsi sama) - \(H_1: p_1 \neq p_2\) (proporsi berbeda)
Statistik Uji (dengan koreksi kontinuitas): \[Z = \frac{|\hat{p}_1 - \hat{p}_2| - \frac{1}{2}\left(\frac{1}{n_1} + \frac{1}{n_2}\right)}{\sqrt{\hat{p}(1-\hat{p})\left(\frac{1}{n_1} + \frac{1}{n_2}\right)}}\]
Dimana: - \(\hat{p}_1 = \frac{a}{a+b}\) (proporsi kejadian pada kelompok 1) - \(\hat{p}_2 = \frac{c}{c+d}\) (proporsi kejadian pada kelompok 2) - \(\hat{p} = \frac{a+c}{a+b+c+d}\) (proporsi gabungan)
# Data penelitian
set.seed(123)
data_prop <- matrix(c(50, 30, 30, 50), nrow = 2, byrow = TRUE)
dimnames(data_prop) <- list("Terpapar" = c("Ya", "Tidak"), "Kejadian" = c("Ya", "Tidak"))
print("Data untuk Uji Proporsi:")
## [1] "Data untuk Uji Proporsi:"
print(data_prop)
## Kejadian
## Terpapar Ya Tidak
## Ya 50 30
## Tidak 30 50
# Uji Proporsi
prop_test <- prop.test(x = c(data_prop[1,1], data_prop[2,1]),
n = c(sum(data_prop[1,]), sum(data_prop[2,])),
correct = TRUE)
print(prop_test)
##
## 2-sample test for equality of proportions with continuity correction
##
## data: c(data_prop[1, 1], data_prop[2, 1]) out of c(sum(data_prop[1, ]), sum(data_prop[2, ]))
## X-squared = 9.025, df = 1, p-value = 0.002663
## alternative hypothesis: two.sided
## 95 percent confidence interval:
## 0.08747151 0.41252849
## sample estimates:
## prop 1 prop 2
## 0.625 0.375
# Perhitungan manual ukuran asosiasi
a <- data_prop[1,1]; b <- data_prop[1,2]; c <- data_prop[2,1]; d <- data_prop[2,2]
n1 <- a + b; n2 <- c + d
p1 <- a/n1; p2 <- c/n2
rd <- p1 - p2
rr <- p1 / p2
or <- (a * d) / (b * c)
# Standar error
se_rd <- sqrt((p1*(1-p1)/n1) + (p2*(1-p2)/n2))
se_ln_rr <- sqrt((1/a) - (1/n1) + (1/c) - (1/n2))
se_ln_or <- sqrt(1/a + 1/b + 1/c + 1/d)
# Z-statistik
z_rd <- rd / se_rd
z_rr <- log(rr) / se_ln_rr
z_or <- log(or) / se_ln_or
# Tabel hasil
hasil_uji <- data.frame(
Ukuran = c("Risk Difference", "Relative Risk", "Odds Ratio"),
Nilai = c(round(rd, 4), round(rr, 4), round(or, 4)),
SE = c(round(se_rd, 4), round(se_ln_rr, 4), round(se_ln_or, 4)),
Z = c(round(z_rd, 4), round(z_rr, 4), round(z_or, 4)),
P_Value = c(round(2*pnorm(-abs(z_rd)), 4),
round(2*pnorm(-abs(z_rr)), 4),
round(2*pnorm(-abs(z_or)), 4))
)
kable(hasil_uji, caption = "Tabel 4.1: Hasil Uji Proporsi dan Ukuran Asosiasi") %>%
kable_styling(bootstrap_options = c("striped", "hover"))
| Ukuran | Nilai | SE | Z | P_Value |
|---|---|---|---|---|
| Risk Difference | 0.2500 | 0.0765 | 3.2660 | 0.0011 |
| Relative Risk | 1.6667 | 0.1683 | 3.0348 | 0.0024 |
| Odds Ratio | 2.7778 | 0.3266 | 3.1282 | 0.0018 |
Berdasarkan hasil uji proporsi dua sampel:
Uji Proporsi:
Kesimpulan: Tolak \(H_0\). Terdapat perbedaan proporsi yang signifikan antara kelompok terpapar dan tidak terpapar.
Risk Difference (RD):
Interpretasi: Kelompok terpapar memiliki risiko 25% lebih tinggi dibandingkan kelompok tidak terpapar.
Relative Risk (RR):
Interpretasi: Kelompok terpapar memiliki risiko 1.667 kali lebih tinggi dibandingkan kelompok tidak terpapar.
Odds Ratio (OR):
Interpretasi: Odds kejadian pada kelompok terpapar adalah 2.778 kali lebih besar dibandingkan kelompok tidak terpapar.
Penelitian dilakukan untuk mengetahui hubungan antara paparan faktor risiko dengan kejadian penyakit. Data yang diperoleh sebagai berikut:
# Data penelitian
set.seed(123)
data_kasus1 <- matrix(c(50, 30, 30, 50), nrow = 2, byrow = TRUE)
dimnames(data_kasus1) <- list("Terpapar" = c("Ya", "Tidak"), "Kejadian" = c("Ya", "Tidak"))
print("Data Penelitian:")
## [1] "Data Penelitian:"
print(data_kasus1)
## Kejadian
## Terpapar Ya Tidak
## Ya 50 30
## Tidak 30 50
# Tabel dengan total
data_total <- cbind(data_kasus1, Total = rowSums(data_kasus1))
data_total <- rbind(data_total, Total = colSums(data_total))
kable(data_total, caption = "Tabel 5.1: Data Hubungan Paparan dengan Kejadian") %>%
kable_styling(bootstrap_options = c("striped", "hover"))
| Ya | Tidak | Total | |
|---|---|---|---|
| Ya | 50 | 30 | 80 |
| Tidak | 30 | 50 | 80 |
| Total | 80 | 80 | 160 |
# Ekstrak nilai
a <- data_kasus1[1,1]; b <- data_kasus1[1,2]
c <- data_kasus1[2,1]; d <- data_kasus1[2,2]
n1 <- a + b; n2 <- c + d
# Proporsi
p1 <- a/n1; p2 <- c/n2
# Ukuran asosiasi
rd <- p1 - p2
rr <- p1 / p2
or <- (a * d) / (b * c)
# Interval kepercayaan
se_rd <- sqrt((p1*(1-p1)/n1) + (p2*(1-p2)/n2))
ci_rd_lower <- rd - 1.96 * se_rd
ci_rd_upper <- rd + 1.96 * se_rd
se_ln_rr <- sqrt((1/a) - (1/n1) + (1/c) - (1/n2))
ci_rr_lower <- exp(log(rr) - 1.96 * se_ln_rr)
ci_rr_upper <- exp(log(rr) + 1.96 * se_ln_rr)
se_ln_or <- sqrt(1/a + 1/b + 1/c + 1/d)
ci_or_lower <- exp(log(or) - 1.96 * se_ln_or)
ci_or_upper <- exp(log(or) + 1.96 * se_ln_or)
# Tabel hasil
hasil_asosiasi <- data.frame(
Ukuran = c("Risk Difference (RD)", "Relative Risk (RR)", "Odds Ratio (OR)"),
Nilai = c(round(rd, 4), round(rr, 4), round(or, 4)),
CI_Lower = c(round(ci_rd_lower, 4), round(ci_rr_lower, 4), round(ci_or_lower, 4)),
CI_Upper = c(round(ci_rd_upper, 4), round(ci_rr_upper, 4), round(ci_or_upper, 4))
)
kable(hasil_asosiasi, caption = "Tabel 5.2: Ukuran Asosiasi dengan Interval Kepercayaan 95%") %>%
kable_styling(bootstrap_options = c("striped", "hover"))
| Ukuran | Nilai | CI_Lower | CI_Upper |
|---|---|---|---|
| Risk Difference (RD) | 0.2500 | 0.1000 | 0.4000 |
| Relative Risk (RR) | 1.6667 | 1.1983 | 2.3181 |
| Odds Ratio (OR) | 2.7778 | 1.4645 | 5.2687 |
# Uji proporsi
prop_test <- prop.test(x = c(a, c), n = c(n1, n2), correct = TRUE)
# Tabel hasil uji
hasil_uji <- data.frame(
Statistik = c("X-squared", "df", "p-value", "Prop Kelompok 1", "Prop Kelompok 2"),
Nilai = c(round(prop_test$statistic, 4),
prop_test$parameter,
format(prop_test$p.value, scientific = TRUE, digits = 4),
round(prop_test$estimate[1], 4),
round(prop_test$estimate[2], 4))
)
kable(hasil_uji, caption = "Tabel 5.3: Hasil Uji Proporsi Dua Sampel") %>%
kable_styling(bootstrap_options = c("striped", "hover"))
| Statistik | Nilai | |
|---|---|---|
| X-squared | X-squared | 9.025 |
| df | df | 1 |
| p-value | 2.663e-03 | |
| prop 1 | Prop Kelompok 1 | 0.625 |
| prop 2 | Prop Kelompok 2 | 0.375 |
Dalam konteks epidemiologi, hasil ini menunjukkan bahwa paparan faktor risiko tersebut secara signifikan meningkatkan kejadian penyakit. Kelompok yang terpapar memiliki risiko 1.667 kali lebih tinggi dan odds 2.778 kali lebih besar untuk mengalami kejadian dibandingkan kelompok yang tidak terpapar.
Selisih risiko absolut sebesar 25% menunjukkan bahwa jika paparan dihilangkan, kita dapat mencegah 25% kasus penyakit pada populasi terpapar.
Penelitian dilakukan untuk mengetahui hubungan antara gender (jenis kelamin) dengan afiliasi politik. Data diperoleh dari survei terhadap responden di Amerika Serikat.
# Data penelitian
data_politik <- matrix(c(495, 272, 590, 330, 265, 498), nrow = 2, byrow = TRUE)
colnames(data_politik) <- c("Democrat", "Republican", "Independent")
rownames(data_politik) <- c("Female", "Male")
print("Data Gender vs Afiliasi Politik:")
## [1] "Data Gender vs Afiliasi Politik:"
print(data_politik)
## Democrat Republican Independent
## Female 495 272 590
## Male 330 265 498
# Tabel dengan total
data_politik_total <- cbind(data_politik, Total = rowSums(data_politik))
data_politik_total <- rbind(data_politik_total, Total = colSums(data_politik_total))
kable(data_politik_total, caption = "Tabel 6.1: Data Gender vs Afiliasi Politik") %>%
kable_styling(bootstrap_options = c("striped", "hover"))
| Democrat | Republican | Independent | Total | |
|---|---|---|---|---|
| Female | 495 | 272 | 590 | 1357 |
| Male | 330 | 265 | 498 | 1093 |
| Total | 825 | 537 | 1088 | 2450 |
# Uji Chi-Square keseluruhan
chi_total <- chisq.test(data_politik)
# Tabel hasil
hasil_chi_total <- data.frame(
Statistik = c("Chi-Square", "df", "p-value"),
Nilai = c(round(chi_total$statistic, 4),
chi_total$parameter,
format(chi_total$p.value, scientific = TRUE, digits = 4))
)
kable(hasil_chi_total, caption = "Tabel 6.2: Hasil Uji Chi-Square Keseluruhan") %>%
kable_styling(bootstrap_options = c("striped", "hover"))
| Statistik | Nilai | |
|---|---|---|
| X-squared | Chi-Square | 12.5693 |
| df | df | 2 |
| p-value | 1.865e-03 |
# Frekuensi harapan
print("Frekuensi Harapan:")
## [1] "Frekuensi Harapan:"
print(round(chi_total$expected, 2))
## Democrat Republican Independent
## Female 456.95 297.43 602.62
## Male 368.05 239.57 485.38
# Data partisi 1
data_dem_rep <- matrix(c(495, 272, 330, 265), nrow = 2, byrow = TRUE)
colnames(data_dem_rep) <- c("Democrat", "Republican")
rownames(data_dem_rep) <- c("Female", "Male")
print("Partisi 1: Democrat vs Republican")
## [1] "Partisi 1: Democrat vs Republican"
print(data_dem_rep)
## Democrat Republican
## Female 495 272
## Male 330 265
# Uji Chi-Square partisi 1
chi_part1 <- chisq.test(data_dem_rep)
hasil_part1 <- data.frame(
Statistik = c("Chi-Square", "df", "p-value"),
Nilai = c(round(chi_part1$statistic, 4),
chi_part1$parameter,
format(chi_part1$p.value, scientific = TRUE, digits = 4))
)
kable(hasil_part1, caption = "Tabel 6.3: Hasil Uji Chi-Square Partisi 1") %>%
kable_styling(bootstrap_options = c("striped", "hover"))
| Statistik | Nilai | |
|---|---|---|
| X-squared | Chi-Square | 11.1777 |
| df | df | 1 |
| p-value | 8.279e-04 |
# Data partisi 2
data_demrep_ind <- matrix(c(495+272, 590, 330+265, 498), nrow = 2, byrow = TRUE)
colnames(data_demrep_ind) <- c("Dem+Rep", "Independent")
rownames(data_demrep_ind) <- c("Female", "Male")
print("Partisi 2: (Democrat+Republican) vs Independent")
## [1] "Partisi 2: (Democrat+Republican) vs Independent"
print(data_demrep_ind)
## Dem+Rep Independent
## Female 767 590
## Male 595 498
# Uji Chi-Square partisi 2
chi_part2 <- chisq.test(data_demrep_ind)
hasil_part2 <- data.frame(
Statistik = c("Chi-Square", "df", "p-value"),
Nilai = c(round(chi_part2$statistic, 4),
chi_part2$parameter,
format(chi_part2$p.value, scientific = TRUE, digits = 4))
)
kable(hasil_part2, caption = "Tabel 6.4: Hasil Uji Chi-Square Partisi 2") %>%
kable_styling(bootstrap_options = c("striped", "hover"))
| Statistik | Nilai | |
|---|---|---|
| X-squared | Chi-Square | 0.9827 |
| df | df | 1 |
| p-value | 3.215e-01 |
# Verifikasi jumlah Chi-Square
verifikasi <- data.frame(
Sumber = c("Chi-Square Total", "Partisi 1", "Partisi 2", "Jumlah Partisi"),
Nilai = c(round(chi_total$statistic, 4),
round(chi_part1$statistic, 4),
round(chi_part2$statistic, 4),
round(chi_part1$statistic + chi_part2$statistic, 4)),
df = c(chi_total$parameter, chi_part1$parameter, chi_part2$parameter,
chi_part1$parameter + chi_part2$parameter)
)
kable(verifikasi, caption = "Tabel 6.5: Verifikasi Partisi Chi-Square") %>%
kable_styling(bootstrap_options = c("striped", "hover"))
| Sumber | Nilai | df |
|---|---|---|
| Chi-Square Total | 12.5693 | 2 |
| Partisi 1 | 11.1777 | 1 |
| Partisi 2 | 0.9827 | 1 |
| Jumlah Partisi | 12.1603 | 2 |
Hasil Uji Chi-Square Keseluruhan: - Chi-Square = 12.57 - df = 2 - p-value = 0.00186 (< 0.05) - Kesimpulan: Tolak H0. Terdapat hubungan yang signifikan antara gender dan afiliasi politik.
Hasil Partisi 1 (Demokrat vs Republik): - Chi-Square = 11.18 - df = 1 - p-value = 0.00083 (< 0.05) - Kesimpulan: Ada perbedaan signifikan antara pria dan wanita dalam preferensi antara Demokrat dan Republik. - Interpretasi: Wanita cenderung lebih memilih Demokrat dibandingkan pria, atau sebaliknya pria cenderung lebih memilih Republik.
Hasil Partisi 2 (Partai Besar vs Independen): - Chi-Square = 0.98 - df = 1 - p-value = 0.3215 (> 0.05) - Kesimpulan: Tidak ada perbedaan signifikan antara pria dan wanita dalam preferensi antara partai besar (Demokrat/Republik) vs Independen. - Interpretasi: Proporsi pemilih Independen relatif sama antara pria dan wanita.
Dalam konteks politik Amerika Serikat, hasil ini menunjukkan bahwa:
Gender Gap dalam Politik: Terdapat perbedaan pola memilih yang signifikan antara pria dan wanita. Wanita cenderung lebih mendukung Partai Demokrat, sementara pria cenderung lebih mendukung Partai Republik.
Independen: Tidak ada perbedaan gender dalam kecenderungan memilih sebagai Independen. Pria dan wanita memiliki proporsi yang sama dalam memilih di luar dua partai besar.
Implikasi: Temuan ini konsisten dengan literatur politik yang menunjukkan adanya “gender gap” dalam preferensi politik, di mana wanita cenderung lebih liberal dan mendukung kebijakan Partai Demokrat.
Distribusi hipergeometrik adalah distribusi probabilitas diskrit yang menggambarkan probabilitas mendapatkan sejumlah sukses dalam pengambilan sampel tanpa pengembalian dari populasi terbatas.
\[P(X = x) = \frac{\binom{K}{x} \binom{N-K}{n-x}}{\binom{N}{n}}\]
Dimana: - \(N\) = ukuran populasi - \(K\) = jumlah sukses dalam populasi - \(n\) = ukuran sampel - \(x\) = jumlah sukses dalam sampel
Sebuah populasi terdiri dari 40 bola dengan 29 bola putih (sukses) dan 11 bola merah (gagal). Diambil sampel acak sebanyak 20 bola tanpa pengembalian.
# Parameter
N <- 40 # Total populasi
K <- 29 # Jumlah sukses dalam populasi (bola putih)
n <- 20 # Ukuran sampel
x <- 18 # Jumlah sukses yang diamati dalam sampel
cat("Parameter Distribusi Hipergeometrik:\n")
## Parameter Distribusi Hipergeometrik:
cat("N (Populasi) =", N, "\n")
## N (Populasi) = 40
cat("K (Sukses dalam populasi) =", K, "\n")
## K (Sukses dalam populasi) = 29
cat("n (Ukuran sampel) =", n, "\n")
## n (Ukuran sampel) = 20
cat("x (Sukses teramati) =", x, "\n\n")
## x (Sukses teramati) = 18
# Menghitung probabilitas untuk berbagai nilai x
x_values <- 9:20
probs <- sapply(x_values, function(x) {
dhyper(x, m = K, n = N - K, k = n)
})
# Tabel distribusi hipergeometrik
dist_hiper <- data.frame(
x = x_values,
Probabilitas = round(probs, 8)
)
kable(dist_hiper, caption = "Tabel 7.1: Distribusi Hipergeometrik (N=40, K=29, n=20)") %>%
kable_styling(bootstrap_options = c("striped", "hover"))
| x | Probabilitas |
|---|---|
| 9 | 0.0000726 |
| 10 | 0.0015984 |
| 11 | 0.0138041 |
| 12 | 0.0621186 |
| 13 | 0.1624640 |
| 14 | 0.2599423 |
| 15 | 0.2599423 |
| 16 | 0.1624640 |
| 17 | 0.0621186 |
| 18 | 0.0138041 |
| 19 | 0.0015984 |
| 20 | 0.0000726 |
# Probabilitas untuk x = 18
p_x18 <- dhyper(x, m = K, n = N - K, k = n)
cat("\nProbabilitas P(X = 18):", round(p_x18, 8), "\n")
##
## Probabilitas P(X = 18): 0.01380413
# Verifikasi dengan rumus kombinasi
p_x18_manual <- choose(29, 18) * choose(11, 2) / choose(40, 20)
cat("Verifikasi dengan rumus:", round(p_x18_manual, 8), "\n")
## Verifikasi dengan rumus: 0.01380413
# Probabilitas untuk nilai ekstrem
p_x20 <- dhyper(20, m = K, n = N - K, k = n)
p_x19 <- dhyper(19, m = K, n = N - K, k = n)
p_x18 <- dhyper(18, m = K, n = N - K, k = n)
p_x17 <- dhyper(17, m = K, n = N - K, k = n)
p_x16 <- dhyper(16, m = K, n = N - K, k = n)
p_x15 <- dhyper(15, m = K, n = N - K, k = n)
p_x14 <- dhyper(14, m = K, n = N - K, k = n)
p_x13 <- dhyper(13, m = K, n = N - K, k = n)
p_x12 <- dhyper(12, m = K, n = N - K, k = n)
p_x11 <- dhyper(11, m = K, n = N - K, k = n)
p_x10 <- dhyper(10, m = K, n = N - K, k = n)
p_x9 <- dhyper(9, m = K, n = N - K, k = n)
# Menghitung p-value dua sisi
p_value_manual <- p_x20 + p_x19 + p_x18 + p_x17 + p_x16 + p_x15 + p_x14 + p_x13 + p_x12 + p_x11 + p_x10 + p_x9
cat("\nP-value (manual):", round(p_value_manual, 5), "\n")
##
## P-value (manual): 1
Uji Eksak Fisher digunakan untuk menguji independensi dalam tabel kontingensi \(2 \times 2\), terutama ketika ukuran sampel kecil atau frekuensi harapan < 5.
# Data untuk uji Fisher
data_fisher <- matrix(c(18, 2, 11, 9), nrow = 2, byrow = TRUE)
rownames(data_fisher) <- c("Terpapar", "Tidak Terpapar")
colnames(data_fisher) <- c("Kejadian", "Tidak Kejadian")
print("Data untuk Uji Exact Fisher:")
## [1] "Data untuk Uji Exact Fisher:"
print(data_fisher)
## Kejadian Tidak Kejadian
## Terpapar 18 2
## Tidak Terpapar 11 9
# Tabel dengan total
data_fisher_total <- cbind(data_fisher, Total = rowSums(data_fisher))
data_fisher_total <- rbind(data_fisher_total, Total = colSums(data_fisher_total))
kable(data_fisher_total, caption = "Tabel 7.2: Data untuk Uji Exact Fisher") %>%
kable_styling(bootstrap_options = c("striped", "hover"))
| Kejadian | Tidak Kejadian | Total | |
|---|---|---|---|
| Terpapar | 18 | 2 | 20 |
| Tidak Terpapar | 11 | 9 | 20 |
| Total | 29 | 11 | 40 |
# Uji Exact Fisher
fisher_result <- fisher.test(data_fisher)
# Tabel hasil
hasil_fisher <- data.frame(
Statistik = c("Odds Ratio", "p-value", "CI 95% Lower", "CI 95% Upper"),
Nilai = c(round(fisher_result$estimate, 4),
format(fisher_result$p.value, scientific = TRUE, digits = 4),
round(fisher_result$conf.int[1], 4),
round(fisher_result$conf.int[2], 4))
)
kable(hasil_fisher, caption = "Tabel 7.3: Hasil Uji Exact Fisher") %>%
kable_styling(bootstrap_options = c("striped", "hover"))
| Statistik | Nilai |
|---|---|
| Odds Ratio | 6.9941 |
| p-value | 3.095e-02 |
| CI 95% Lower | 1.1478 |
| CI 95% Upper | 78.1838 |
Dari hasil perhitungan distribusi hipergeometrik:
Hasil Uji Fisher: - Odds Ratio = 6.994 - p-value = 0.03095 (< 0.05) - 95% Confidence Interval = (1.148, 78.184)
Interpretasi Statistik: - p-value (0.03095) < 0.05: Tolak H0. Terdapat hubungan yang signifikan antara paparan dan kejadian. - Odds Ratio (6.994): Kelompok terpapar memiliki odds 6.994 kali lebih besar untuk mengalami kejadian dibandingkan kelompok tidak terpapar. - Interval Kepercayaan (1.148 - 78.184): Tidak mencakup angka 1, mengkonfirmasi signifikansi hubungan.
Interpretasi Substantif: Dalam konteks penelitian, hasil ini menunjukkan bahwa paparan faktor risiko tersebut secara signifikan meningkatkan risiko kejadian. Besarnya odds ratio (hampir 7 kali) menunjukkan efek yang kuat, meskipun interval kepercayaan yang lebar mencerminkan ketidakpastian akibat ukuran sampel yang kecil.
p-value manual yang dihitung dari distribusi hipergeometrik (0.03094) sangat mendekati p-value dari uji Fisher (0.03095), memverifikasi bahwa uji Fisher berbasis pada distribusi hipergeometrik.
Berdasarkan serangkaian analisis data kategori yang telah dilakukan pada berbagai studi kasus, dapat disimpulkan:
Konsep Dasar: Analisis data kategori adalah metode statistik untuk menganalisis data kategorikal melalui tabel kontingensi, distribusi peluang, dan ukuran asosiasi.
Tabel Kontingensi: Tabel kontingensi menyajikan frekuensi bersama dua variabel kategori dan memungkinkan perhitungan distribusi bersama, marginal, dan bersyarat.
Ukuran Asosiasi:
Inferensi Tabel Kontingensi:
Kesehatan Masyarakat: Ukuran asosiasi seperti OR dan RR penting untuk mengidentifikasi faktor risiko penyakit.
Penelitian Sosial: Partisi Chi-Square membantu memahami sumber perbedaan antar kelompok.
Metodologi: Pemilihan uji statistik harus mempertimbangkan ukuran sampel dan karakteristik data.