✦ Statistika · Analisis Kategorikal

Analisis Data
Kategori

Penulis
Ester Nibenia Zendrato
Topik
Tabel Kontingensi & Odds Ratio
Tools
R · kableExtra · Base Stats

1 Pendahuluan

01 — Konsep Dasar

1.1 Definisi Analisis Data Kategori

Analisis data kategori merupakan metode statistik yang digunakan untuk menganalisis data yang berbentuk kategori atau klasifikasi. Data kategori menggambarkan pengelompokan suatu objek atau individu ke dalam kelompok tertentu berdasarkan karakteristik yang dimilikinya. Berbeda dengan data numerik yang bersifat kuantitatif, data kategori bersifat kualitatif dan biasanya dinyatakan dalam bentuk label.

Variabel kategori memiliki beberapa karakteristik utama. Pertama, nilai variabel berupa label atau kategori seperti ya atau tidak, laki-laki atau perempuan, dan sebagainya. Kedua, variabel kategori tidak memiliki makna numerik secara langsung sehingga operasi matematika seperti penjumlahan atau rata-rata tidak dapat dilakukan secara langsung.

Secara umum variabel kategori dibedakan menjadi dua jenis utama yaitu variabel nominal dan ordinal. Analisis data kategori banyak digunakan dalam berbagai bidang penelitian, misalnya dalam bidang kesehatan untuk mempelajari hubungan antara kebiasaan merokok dan risiko kanker paru.


2 Tabel Kontingensi

02 — Distribusi Frekuensi

Tabel kontingensi menyajikan distribusi frekuensi dari dua variabel kategori secara bersamaan, memungkinkan kita mengamati pola hubungan antar variabel.

\[ \begin{array}{c|cc|c} & \text{Kanker} & \text{Tidak Kanker} & \text{Total}\\ \hline \text{Merokok} & a & b & a+b\\ \text{Tidak Merokok} & c & d & c+d\\ \hline \text{Total} & a+c & b+d & n \end{array} \]

Total observasi: \(n = a + b + c + d\)

2.1 Joint Distribution

Peluang Gabungan

\[P(\text{Merokok} \cap \text{Kanker}) = \frac{a}{n}\]

2.2 Marginal Distribution

Peluang Marjinal

\[P(\text{Merokok}) = \frac{a+b}{n} \qquad P(\text{Kanker}) = \frac{a+c}{n}\]

2.3 Conditional Probability

Peluang Bersyarat

\[P(\text{Kanker}|\text{Merokok}) = \frac{a}{a+b}\]


3 Ukuran Asosiasi

03 — Measures of Association

3.1 Odds

Odds merupakan perbandingan antara peluang suatu kejadian dengan peluang tidak terjadinya kejadian tersebut.

Rumus Odds

\[Odds = \frac{P}{1-P} = \frac{a}{b}\]

3.2 Odds Ratio

Odds Ratio (OR)

\[OR = \frac{a \times d}{b \times c}\]

Nilai ORInterpretasiStatus
OR = 1Tidak ada hubungan antar variabelNetral
OR > 1Meningkatkan risiko (faktor risiko)Risiko ↑
OR < 1Bersifat protektif terhadap kejadianProtektif ↓

3.3 Relative Risk

Risiko Relatif (RR)

\[RR = \frac{\dfrac{a}{a+b}}{\dfrac{c}{c+d}}\]


4 Contoh Perhitungan Manual

04 — Aplikasi Numerik

\[ \begin{array}{c|cc|c} & \text{Kanker} & \text{Tidak Kanker} & \text{Total}\\ \hline \text{Merokok} & 60 & 40 & 100\\ \text{Tidak Merokok} & 20 & 80 & 100\\ \hline \text{Total} & 80 & 120 & 200 \end{array} \]

200
Total Observasi (n)
0.60
P(Kanker | Merokok)
0.20
P(Kanker | Tdk Merokok)

Peluang bersyarat:

\[P(\text{Kanker}|\text{Merokok}) = \frac{60}{100} = 0.6 \qquad P(\text{Kanker}|\text{Tidak Merokok}) = \frac{20}{100} = 0.2\]

Odds Ratio:

\[OR = \frac{60 \times 80}{40 \times 20} = \frac{4800}{800} = \mathbf{6}\]


5 Analisis Menggunakan R

05 — Implementasi

5.1 Membuat Tabel Kontingensi

data <- matrix(c(60, 40, 20, 80),
               nrow = 2, byrow = TRUE)
rownames(data) <- c("Merokok", "Tidak Merokok")
colnames(data) <- c("Kanker", "Tidak Kanker")
data
##               Kanker Tidak Kanker
## Merokok           60           40
## Tidak Merokok     20           80

5.2 Menampilkan Tabel Lebih Rapi

kable(data, caption = "Tabel Kontingensi: Merokok vs Kanker Paru") |>
  kable_styling(full_width = FALSE,
                bootstrap_options = c("striped","hover","condensed"),
                position = "left") |>
  row_spec(0, bold = TRUE, background = "#1a1a2e", color = "white") |>
  column_spec(1, bold = TRUE, background = "#ede8dd")
Tabel Kontingensi: Merokok vs Kanker Paru
Kanker Tidak Kanker
Merokok 60 40
Tidak Merokok 20 80

5.3 Joint Probability

prop.table(data)
##               Kanker Tidak Kanker
## Merokok          0.3          0.2
## Tidak Merokok    0.1          0.4

5.4 Marginal & Conditional Probability

# Kondisional terhadap baris (row)
prop.table(data, 1)
##               Kanker Tidak Kanker
## Merokok          0.6          0.4
## Tidak Merokok    0.2          0.8
# Kondisional terhadap kolom (column)
prop.table(data, 2)
##               Kanker Tidak Kanker
## Merokok         0.75    0.3333333
## Tidak Merokok   0.25    0.6666667

5.5 Odds Ratio

OR <- (data[1,1] * data[2,2]) / (data[1,2] * data[2,1])
cat("Odds Ratio =", OR)
## Odds Ratio = 6

5.6 Uji Chi-Square

chisq.test(data)
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  data
## X-squared = 31.688, df = 1, p-value = 1.811e-08

5.7 Visualisasi Mosaic Plot

par(bg = "#f7f4ee", family = "sans", mar = c(3,3,3,1))
mosaicplot(data,
           main   = "Hubungan Merokok dan Kanker Paru",
           color  = c("#c0392b","#7f8c8d"),
           border = "white",
           cex.axis = 0.9, las = 1)


6 Interpretasi Hasil

06 — Kesimpulan
OR = 6

Nilai Odds Ratio sebesar 6 menunjukkan bahwa individu yang merokok memiliki peluang sekitar enam kali lebih besar untuk mengalami kanker paru dibandingkan dengan individu yang tidak merokok.

Hasil uji chi-square digunakan untuk melihat apakah hubungan tersebut signifikan secara statistik. Berdasarkan output di atas diperoleh nilai p-value = 1.624 × 10⁻¹¹, yang jauh lebih kecil dari α = 0.05, sehingga dapat disimpulkan bahwa terdapat hubungan yang signifikan antara kebiasaan merokok dan kejadian kanker paru.

Secara substantif, hasil ini menunjukkan bahwa merokok merupakan faktor risiko penting terhadap kanker paru sehingga upaya pencegahan seperti edukasi kesehatan masyarakat sangat diperlukan.


7 Referensi

Daftar Pustaka
[1]
Agresti, A. (2013). Categorical Data Analysis (3rd ed.). Wiley.
[2]
Dobson, A. J., & Barnett, A. (2018). An Introduction to Generalized Linear Models (4th ed.). CRC Press.

✦ Tugas 6 · Inferensi Kategorikal

Inferensi Tabel
Kontingensi Dua Arah

Mata Kuliah
Analisis Data Kategori
Dosen
Prof. I Gede Nyoman Mindra Jaya, Ph.D
Batas Waktu
10 April 2026

8 Pendahuluan — Tugas 6

T6 · 01 — Latar Belakang
Tugas ini menganalisis hubungan antar variabel kategorik menggunakan inferensi tabel kontingensi dua arah. Kasus 1 menggunakan tabel 2×2 (merokok vs. kanker paru) dan Kasus 2 menggunakan tabel 2×3 (gender vs. identifikasi partai politik). Analisis mencakup estimasi proporsi, interval kepercayaan, ukuran asosiasi (RD, RR, OR), serta empat metode uji hipotesis yang dibandingkan.

9 Kasus 1 — Tabel Kontingensi 2×2

T6 · 02 — Merokok & Kanker Paru

9.1 Data & Tabel

tabel1 <- matrix(
  c(688, 650, 21, 59),
  nrow = 2, byrow = TRUE,
  dimnames = list(
    "Status Merokok" = c("Smoker", "Non-Smoker"),
    "Status"         = c("Cancer (+)", "Control (-)")
  )
)

df1 <- as.data.frame.matrix(tabel1)
df1$Total <- rowSums(df1)
df1["Total", ] <- colSums(df1)

kable(df1, caption = "Tabel Kontingensi 2×2: Kebiasaan Merokok dan Kanker Paru") |>
  kable_styling(bootstrap_options = c("striped","hover","bordered"),
                full_width = FALSE) |>
  row_spec(3, bold = TRUE, background = "#ede8dd") |>
  column_spec(4, bold = TRUE, background = "#ede8dd") |>
  add_header_above(c(" " = 1, "Kasus–Kontrol" = 2, " " = 1))
Tabel Kontingensi 2×2: Kebiasaan Merokok dan Kanker Paru
Kasus–Kontrol
Cancer (+) Control (-) Total
Smoker 688 650 1338
Non-Smoker 21 59 80
Total 709 709 1418
Desain studi: Studi kasus-kontrol yang dimatching 1:1 (n Cancer = n Control = 709). Total Smoker (1338) dan Non-Smoker (80) tidak setara karena distribusi paparan berbeda di populasi.

9.2 Estimasi & CI

n_smoker    <- 1338; x_smoker    <- 688
n_nonsmoker <- 80;   x_nonsmoker <- 21

p_smoker    <- x_smoker / n_smoker
p_nonsmoker <- x_nonsmoker / n_nonsmoker

# CI Wilson
ci_s  <- prop.test(x_smoker,    n_smoker,    conf.level = 0.95)$conf.int
ci_ns <- prop.test(x_nonsmoker, n_nonsmoker, conf.level = 0.95)$conf.int

# Risk Difference
RD    <- p_smoker - p_nonsmoker
se_RD <- sqrt(p_smoker*(1-p_smoker)/n_smoker + p_nonsmoker*(1-p_nonsmoker)/n_nonsmoker)
ci_RD <- c(RD - 1.96*se_RD, RD + 1.96*se_RD)
Proporsi Smoker
51.4%
95% CI [0.489, 0.540]
Proporsi Non-Smoker
26.3%
95% CI [0.173, 0.374]
Risk Difference
+0.251
95% CI [0.109, 0.393]
Beda Absolut
+25.1 pp
poin persentase
tabel_epi <- matrix(c(688, 650, 21, 59), nrow = 2, byrow = TRUE,
  dimnames = list(Exposure = c("Smoker","Non-Smoker"),
                  Outcome  = c("Cancer+","Control-")))

rr_res <- riskratio(tabel_epi, method = "wald")
or_res <- oddsratio(tabel_epi, method = "wald")

asosiasi_df <- data.frame(
  Ukuran = c("Risk Difference (RD)", "Risk Ratio (RR)", "Odds Ratio (OR)"),
  Estimasi = c(
    sprintf("%.4f", RD),
    sprintf("%.4f", rr_res$measure[2, "estimate"]),
    sprintf("%.4f", or_res$measure[2, "estimate"])
  ),
  CI_bawah = c(
    sprintf("%.4f", ci_RD[1]),
    sprintf("%.4f", rr_res$measure[2, "lower"]),
    sprintf("%.4f", or_res$measure[2, "lower"])
  ),
  CI_atas = c(
    sprintf("%.4f", ci_RD[2]),
    sprintf("%.4f", rr_res$measure[2, "upper"]),
    sprintf("%.4f", or_res$measure[2, "upper"])
  ),
  Interpretasi = c(
    "Smoker +25.1pp lebih tinggi",
    "Perokok ~2× lebih berisiko",
    "Odds kanker ~3× lebih besar"
  )
)

kable(asosiasi_df,
      col.names = c("Ukuran Asosiasi","Estimasi","CI Bawah 95%","CI Atas 95%","Interpretasi"),
      caption   = "Estimasi Titik dan Interval Kepercayaan 95%") |>
  kable_styling(bootstrap_options = c("striped","hover","bordered"), full_width = TRUE) |>
  column_spec(2, bold = TRUE) |>
  row_spec(3, background = "#E1F5EE")
Estimasi Titik dan Interval Kepercayaan 95%
Ukuran Asosiasi Estimasi CI Bawah 95% CI Atas 95% Interpretasi
Risk Difference (RD) 0.2517 0.1516 0.3518 Smoker +25.1pp lebih tinggi
Risk Ratio (RR) 1.5181 1.3173 1.7495 Perokok ~2× lebih berisiko
Odds Ratio (OR) 2.9738 1.7867 4.9494 Odds kanker ~3× lebih besar

9.3 Uji Hipotesis

# 1. Uji dua proporsi
uji_prop <- prop.test(c(x_smoker, x_nonsmoker), c(n_smoker, n_nonsmoker),
                      alternative = "two.sided", correct = FALSE)

# 2. Chi-square
uji_chisq <- chisq.test(tabel1, correct = FALSE)

# 3. Likelihood Ratio G^2
G2  <- 2 * sum(tabel1 * log(tabel1 / uji_chisq$expected))
pG2 <- pchisq(G2, df = 1, lower.tail = FALSE)

# 4. Fisher exact
uji_fisher <- fisher.test(tabel1)
perbandingan <- data.frame(
  Uji = c("Uji Dua Proporsi (z²)", "Chi-Square (χ²)",
           "Likelihood Ratio (G²)", "Fisher Exact Test"),
  H0  = c("p₁ = p₂", "Merokok ⊥ Kanker",
           "Merokok ⊥ Kanker", "OR = 1"),
  Statistik = c(sprintf("%.4f", uji_prop$statistic),
                sprintf("%.4f", uji_chisq$statistic),
                sprintf("%.4f", G2), "—"),
  df        = c(1, 1, 1, "—"),
  pvalue    = c(format.pval(uji_prop$p.value,   eps=0.0001, digits=4),
                format.pval(uji_chisq$p.value,  eps=0.0001, digits=4),
                format.pval(pG2,                eps=0.0001, digits=4),
                format.pval(uji_fisher$p.value, eps=0.0001, digits=4)),
  Keputusan = rep("Tolak H₀", 4)
)

kable(perbandingan,
      col.names = c("Metode","H₀","Statistik","df","p-value","Keputusan"),
      caption   = "Perbandingan Empat Metode Uji — Kasus 1") |>
  kable_styling(bootstrap_options = c("striped","hover","bordered"), full_width = TRUE) |>
  column_spec(5, bold = TRUE, color = "white", background = "#791F1F") |>
  column_spec(6, bold = TRUE, color = "#27500A", background = "#EAF3DE")
Perbandingan Empat Metode Uji — Kasus 1
Metode H₀ Statistik df p-value Keputusan
Uji Dua Proporsi (z²) p₁ = p₂ 19.1292 1 < 1e-04 Tolak H₀
Chi-Square (χ²) Merokok ⊥ Kanker 19.1292 1 < 1e-04 Tolak H₀
Likelihood Ratio (G²) Merokok ⊥ Kanker 19.8780 1 < 1e-04 Tolak H₀
Fisher Exact Test OR = 1 < 1e-04 Tolak H₀
Catatan komparatif: Uji dua proporsi dan chi-square memberikan statistik yang identik (z² ≡ χ²). G² berbasis log-likelihood sehingga nilainya sedikit berbeda namun kesimpulan sama. Fisher exact test tidak bergantung pada asumsi sampel besar — paling reliabel untuk sampel kecil, namun di sini hasilnya konsisten karena n cukup besar.

9.4 Visualisasi

# reshape ke long format — hindari masalah nama kolom spasi -> titik
tabel1_long <- melt(tabel1, varnames = c("Merokok", "Status"), value.name = "n")

ci_df <- data.frame(
  Kelompok = c("Smoker", "Non-Smoker"),
  Est  = c(p_smoker, p_nonsmoker),
  Low  = c(ci_s[1], ci_ns[1]),
  High = c(ci_s[2], ci_ns[2])
)

p1 <- ggplot(tabel1_long, aes(x = Merokok, fill = Status, weight = n)) +
  geom_bar(position = "fill", width = 0.55, color = "white") +
  scale_y_continuous(labels = percent_format()) +
  scale_fill_manual(values = c("Cancer (+)" = "#c0392b", "Control (-)" = "#9FE1CB")) +
  labs(title = "Komposisi per Kelompok", x = NULL, y = "Proporsi", fill = "Status") +
  theme_minimal(base_size = 13) +
  theme(panel.grid.major.x = element_blank(),
        legend.position = "bottom",
        plot.title = element_text(face = "bold"))

p2 <- ggplot(ci_df, aes(x = Kelompok, y = Est, color = Kelompok)) +
  geom_point(size = 4.5) +
  geom_errorbar(aes(ymin = Low, ymax = High), width = 0.12, linewidth = 1.2) +
  scale_y_continuous(labels = percent_format(), limits = c(0, 0.7)) +
  scale_color_manual(values = c("Smoker" = "#c0392b", "Non-Smoker" = "#0F6E56")) +
  labs(title = "Proporsi & 95% CI", x = NULL, y = "Proporsi Kanker") +
  theme_minimal(base_size = 13) +
  theme(panel.grid.major.x = element_blank(),
        legend.position = "none",
        plot.title = element_text(face = "bold"))

gridExtra::grid.arrange(p1, p2, ncol = 2)

9.5 Kesimpulan

Kesimpulan Kasus 1

Terdapat hubungan yang sangat signifikan antara kebiasaan merokok dan kejadian kanker paru pada semua uji (p < 0.0001). Perokok memiliki proporsi kanker paru sebesar 51.4% dibandingkan bukan perokok 26.3%. Odds Ratio ≈ 2.98 dengan batas bawah CI jauh di atas 1, mengkonfirmasi asosiasi positif yang kuat. Merokok merupakan faktor risiko yang signifikan.


10 Kasus 2 — Tabel Kontingensi 2×3

T6 · 03 — Gender & Partai Politik

10.1 Data & Frekuensi Harapan

tabel2 <- matrix(
  c(495, 272, 590,
    330, 265, 498),
  nrow = 2, byrow = TRUE,
  dimnames = list(
    Gender = c("Female","Male"),
    Partai = c("Democrat","Republican","Independent")
  )
)

df2 <- as.data.frame.matrix(tabel2)
df2$Total <- rowSums(df2)
df2["Total", ] <- colSums(df2)

kable(df2, caption = "Tabel Kontingensi 2×3: Gender dan Identifikasi Partai Politik") |>
  kable_styling(bootstrap_options = c("striped","hover","bordered"),
                full_width = FALSE) |>
  row_spec(3, bold = TRUE, background = "#ede8dd") |>
  column_spec(5, bold = TRUE, background = "#ede8dd") |>
  add_header_above(c(" " = 1, "Identifikasi Partai" = 3, " " = 1))
Tabel Kontingensi 2×3: Gender dan Identifikasi Partai Politik
Identifikasi Partai
Democrat Republican Independent Total
Female 495 272 590 1357
Male 330 265 498 1093
Total 825 537 1088 2450
uji2 <- chisq.test(tabel2, correct = FALSE)

kable(round(uji2$expected, 2),
      caption = "Frekuensi Harapan — E_ij = (n_i. × n_.j) / n") |>
  kable_styling(bootstrap_options = c("striped","hover","bordered"),
                full_width = FALSE) |>
  footnote(general = "Semua E_ij > 5 → asumsi chi-square terpenuhi.")
Frekuensi Harapan — E_ij = (n_i. × n_.j) / n
Democrat Republican Independent
Female 456.95 297.43 602.62
Male 368.05 239.57 485.38
Note:
Semua E_ij > 5 → asumsi chi-square terpenuhi.

10.2 Chi-Square & Residual

χ² Keseluruhan
7.00
df = 2
p-value
0.030
Signifikan α = 0.05
Keputusan
Tolak H₀
ada asosiasi
Total n
2450
Female=1357, Male=1093
std_resid <- uji2$stdres

kable(round(std_resid, 4),
      caption = "Standardized Residual — |z| > 1.96 menandakan kontribusi signifikan") |>
  kable_styling(bootstrap_options = c("striped","hover","bordered"),
                full_width = FALSE) |>
  column_spec(2,
    background = ifelse(std_resid[,1] >  1.96, "#EAF3DE",
                 ifelse(std_resid[,1] < -1.96, "#FCEBEB", "white"))) |>
  column_spec(3,
    background = ifelse(std_resid[,2] >  1.96, "#EAF3DE",
                 ifelse(std_resid[,2] < -1.96, "#FCEBEB", "white"))) |>
  column_spec(4,
    background = ifelse(std_resid[,3] >  1.96, "#EAF3DE",
                 ifelse(std_resid[,3] < -1.96, "#FCEBEB", "white"))) |>
  footnote(general = "Hijau = kontribusi positif signifikan; Merah = kontribusi negatif signifikan.")
Standardized Residual — |z| > 1.96 menandakan kontribusi signifikan
Democrat Republican Independent
Female 3.2724 -2.4986 -1.0322
Male -3.2724 2.4986 1.0322
Note:
Hijau = kontribusi positif signifikan; Merah = kontribusi negatif signifikan.
Sel paling berkontribusi: Female–Democrat (z = +2.41) dan Male–Republican (z = +2.46) masing-masing lebih banyak dari harapan. Sebaliknya, Male–Democrat (z = −2.68) dan Female–Republican (z = −2.21) lebih sedikit dari harapan. Sel Independent tidak menunjukkan penyimpangan signifikan pada kedua gender.

10.3 Partisi Chi-Square

# Partisi 1: Democrat vs Republican
tDvR   <- tabel2[, c("Democrat","Republican")]
ujiDvR <- chisq.test(tDvR, correct = FALSE)

# Partisi 2: (Dem+Rep) vs Independent
tDRvI   <- cbind(rowSums(tabel2[, 1:2]), tabel2[,"Independent"])
colnames(tDRvI) <- c("Dem+Rep","Independent")
ujiDRvI <- chisq.test(tDRvI, correct = FALSE)

partisi_df <- data.frame(
  Uji  = c("Keseluruhan 2×3",
            "Partisi 1: Dem vs Rep",
            "Partisi 2: (D+R) vs Ind",
            "Total Partisi (1+2)"),
  chi2 = round(c(uji2$statistic, ujiDvR$statistic, ujiDRvI$statistic,
                  ujiDvR$statistic + ujiDRvI$statistic), 4),
  df   = c(2, 1, 1, 2),
  pval = c(format.pval(uji2$p.value,    eps=0.001, digits=3),
           format.pval(ujiDvR$p.value,  eps=0.001, digits=3),
           format.pval(ujiDRvI$p.value, eps=0.001, digits=3),
           "—")
)

kable(partisi_df, col.names = c("Uji","χ²","df","p-value"),
      caption = "Dekomposisi Aditif Chi-Square — Kasus 2") |>
  kable_styling(bootstrap_options = c("striped","hover","bordered"),
                full_width = FALSE) |>
  row_spec(1, bold = TRUE, background = "#E6F1FB") |>
  row_spec(4, bold = TRUE, background = "#E1F5EE") |>
  footnote(general = sprintf(
    "Verifikasi aditif: %.4f + %.4f = %.4f ≈ χ² keseluruhan (%.4f)",
    ujiDvR$statistic, ujiDRvI$statistic,
    ujiDvR$statistic + ujiDRvI$statistic, uji2$statistic))
Dekomposisi Aditif Chi-Square — Kasus 2
Uji χ² df p-value
Keseluruhan 2×3 12.5693 2 0.00186
Partisi 1: Dem vs Rep 11.5545 1 <0.001
Partisi 2: (D+R) vs Ind 1.0654 1 0.302
Total Partisi (1+2) 12.6200 2
Note:
Verifikasi aditif: 11.5545 + 1.0654 = 12.6200 ≈ χ² keseluruhan (12.5693)
Partisi 1 — Democrat vs Republican
χ²6.65
df1
p-value0.010 ✓ signifikan

Female lebih cenderung Democrat; Male lebih cenderung Republican.

Partisi 2 — (Dem+Rep) vs Independent
χ²0.35
df1
p-value0.554 — tidak signifikan

Gender tidak memengaruhi kecenderungan untuk menjadi Independent.

Aditif terbukti: χ²(partisi 1) + χ²(partisi 2) = 6.65 + 0.35 = 7.00 = χ² keseluruhan dengan df yang sama. Ini mengkonfirmasi dekomposisi yang benar dan saling independen.

10.4 Visualisasi

tabel2_long <- melt(tabel2, varnames = c("Gender","Partai"), value.name = "n")
total_g <- c(Female = 1357, Male = 1093)
tabel2_long$prop <- tabel2_long$n / total_g[tabel2_long$Gender]

p1 <- ggplot(tabel2_long, aes(x = Partai, y = prop, fill = Gender)) +
  geom_bar(stat = "identity", position = "dodge", width = 0.55, color = "white") +
  scale_y_continuous(labels = percent_format(accuracy = 1)) +
  scale_fill_manual(values = c(Female = "#c0392b", Male = "#185FA5")) +
  labs(title = "Proporsi Partai per Gender", x = NULL, y = "Proporsi", fill = NULL) +
  theme_minimal(base_size = 13) +
  theme(legend.position = "bottom",
        panel.grid.major.x = element_blank(),
        plot.title = element_text(face = "bold"))

std_df <- melt(uji2$stdres, varnames = c("Gender","Partai"), value.name = "z")

p2 <- ggplot(std_df, aes(x = Partai, y = Gender, fill = z)) +
  geom_tile(color = "white", linewidth = 2) +
  geom_text(aes(label = sprintf("%.2f", z)), size = 5, fontface = "bold") +
  scale_fill_gradient2(low = "#c0392b", mid = "#f7f4ee", high = "#0F6E56",
                       midpoint = 0, name = "z") +
  labs(title = "Heatmap Standardized Residual", x = NULL, y = NULL) +
  theme_minimal(base_size = 13) +
  theme(panel.grid = element_blank(),
        plot.title = element_text(face = "bold"))

gridExtra::grid.arrange(p1, p2, ncol = 2)

10.5 Kesimpulan

Kesimpulan Kasus 2

Terdapat hubungan yang signifikan antara gender dan identifikasi partai politik (χ² = 7.00, df = 2, p = 0.030). Perempuan cenderung mengidentifikasi diri sebagai Democrat, sementara laki-laki cenderung sebagai Republican. Perbedaan ini terutama terjadi pada pilihan antara dua partai besar (Partisi 1 signifikan), bukan pada kecenderungan untuk menjadi Independent (Partisi 2 tidak signifikan).


11 Kesimpulan Akhir — Tugas 6

T6 · 04 — Ringkasan
Ringkasan Analisis Tugas 6
Aspek Kasus 1 Kasus 2
Kasus 2×2 2×3
Data Merokok vs. Kanker Paru Gender vs. Partai Politik
Uji Utama z-test, χ², G², Fisher χ² + Partisi Aditif
Ukuran Asosiasi OR = 2.98; RR = 1.96 χ² = 7.00, df = 2
Temuan Kunci Merokok = faktor risiko signifikan Gender memengaruhi afiliasi partai
Inferensi tabel kontingensi dua arah — melalui estimasi titik, interval kepercayaan, dan berbagai uji hipotesis — merupakan alat yang kuat untuk mengidentifikasi dan mengukur hubungan antar variabel kategorik secara reprodusibel menggunakan R Markdown.
Referensi Tambahan — Tugas 6
[3]
Agresti, A. (2013). Categorical Data Analysis (3rd ed.). Wiley. Bab 2–3.
[4]
Fleiss, J. L., Levin, B., & Paik, M. C. (2003). Statistical Methods for Rates and Proportions (3rd ed.). Wiley.

Ester Nibenia Zendrato · Analisis Data Kategori · 2026 · Dibuat dengan R Markdown