Dalam berbagai bidang ilmu seperti kesehatan, ekonomi, dan ilmu sosial, peneliti sering berhadapan dengan variabel yang tidak dinyatakan dalam bentuk numerik melainkan dalam bentuk kategori. Variabel tersebut dikenal sebagai variabel kategorik (categorical variables). Contoh variabel kategorik antara lain jenis kelamin, status merokok, status penyakit, tingkat pendidikan, serta preferensi politik.
Berbeda dengan variabel numerik yang memiliki makna jarak atau besaran kuantitatif, variabel kategorik hanya merepresentasikan pengelompokan atau klasifikasi objek ke dalam kategori tertentu. Oleh karena itu metode analisis yang digunakan juga berbeda dengan analisis data numerik.
Salah satu pendekatan yang paling umum digunakan dalam analisis data kategori adalah tabel kontingensi (contingency table). Tabel ini digunakan untuk menggambarkan distribusi bersama dari dua variabel kategorik sehingga hubungan antar variabel dapat dianalisis.
Tujuan dari laporan ini adalah: 1. Menjelaskan konsep dasar analisis data kategori 2. Memahami struktur tabel kontingensi 3. Menghitung ukuran asosiasi pada tabel kontingensi 4. Melakukan perhitungan manual 5. Melakukan analisis menggunakan perangkat lunak R 6. Menginterpretasikan hasil analisis
Analisis data kategori adalah metode statistik yang digunakan untuk menganalisis variabel yang berbentuk kategori atau klasifikasi. Menurut Agresti (2013), analisis data kategori berfokus pada distribusi frekuensi serta hubungan antara variabel yang memiliki skala nominal atau ordinal.
Variabel kategorik tidak memiliki nilai numerik yang bermakna secara matematis, melainkan hanya menunjukkan keanggotaan suatu objek pada kategori tertentu.
Metode yang sering digunakan dalam analisis data kategori antara lain:
Variabel kategori memiliki beberapa karakteristik utama:
Contoh variabel kategorik:
| Variabel | Kategori |
|---|---|
| Jenis kelamin | Laki-laki / Perempuan |
| Status merokok | Ya / Tidak |
| Tingkat pendidikan | SD / SMP / SMA / PT |
Analisis data kategori digunakan dalam berbagai bidang penelitian.
Bidang kesehatan: Meneliti hubungan antara merokok dan kanker paru.
Bidang epidemiologi: Meneliti hubungan antara vaksinasi dan infeksi.
Bidang sosial: Meneliti hubungan antara tingkat pendidikan dan status pekerjaan.
Tabel kontingensi adalah tabel yang menyajikan distribusi frekuensi bersama dari dua atau lebih variabel kategorik. Tabel ini membantu peneliti memahami hubungan antara variabel tersebut.
Contoh tabel kontingensi 2×2
| Penyakit | Tidak Penyakit | Total | |
|---|---|---|---|
| Terpapar | a | b | a+b |
| Tidak Terpapar | c | d | c+d |
| Total | a+c | b+d | n |
Distribusi bersama dinyatakan sebagai
\[ P(X=i,Y=j)=\frac{n_{ij}}{n} \]
Distribusi marginal dinyatakan sebagai
\[ P(X=i)=\frac{n_{i+}}{n} \]
\[ P(Y=j)=\frac{n_{+j}}{n} \]
Probabilitas bersyarat dinyatakan sebagai
\[ P(Y=j|X=i)=\frac{n_{ij}}{n_{i+}} \]
Ukuran asosiasi digunakan untuk mengukur kekuatan hubungan antara dua variabel kategorik.
Misalkan tabel:
| Penyakit | Tidak | |
|---|---|---|
| Terpapar | a | b |
| Tidak | c | d |
Odds adalah perbandingan antara probabilitas terjadinya suatu kejadian dengan probabilitas tidak terjadinya kejadian tersebut.
\[ Odds = \frac{P}{1-P} \]
Untuk kelompok terpapar:
\[ Odds_{terpapar}=\frac{a}{b} \]
Untuk kelompok tidak terpapar:
\[ Odds_{tidak}=\frac{c}{d} \]
Odds Ratio adalah perbandingan odds antara dua kelompok.
\[ OR=\frac{a/b}{c/d} \]
atau
\[ OR=\frac{ad}{bc} \]
Interpretasi:
Relative Risk dinyatakan sebagai
\[ RR = \frac{a/(a+b)}{c/(c+d)} \]
Misalkan penelitian mengenai hubungan antara merokok dan kanker paru.
| Kanker | Tidak Kanker | Total | |
|---|---|---|---|
| Merokok | 60 | 40 | 100 |
| Tidak Merokok | 20 | 80 | 100 |
| Total | 80 | 120 | 200 |
Total observasi
\[ n = 60 + 40 + 20 + 80 = 200 \]
\[ P(Kanker|Merokok)=\frac{60}{100}=0.6 \]
\[ P(Kanker|Tidak)=\frac{20}{100}=0.2 \]
\[ Odds_{merokok}=\frac{60}{40}=1.5 \]
\[ Odds_{tidak}=\frac{20}{80}=0.25 \]
\[ OR=\frac{60 \times 80}{40 \times 20} = \frac{4800}{800} = 6 \]
Interpretasi: Perokok memiliki peluang sekitar 6 kali lebih besar mengalami kanker paru dibandingkan non-perokok.
\[ RR = \frac{60/100}{20/100} = \frac{0.6}{0.2} = 3 \]
Interpretasi: Perokok memiliki risiko 3 kali lebih tinggi untuk terkena kanker paru dibandingkan non-perokok.
# Membuat data tabel kontingensi
data_kanker <- matrix(c(60, 40, 20, 80), nrow = 2, byrow = TRUE)
rownames(data_kanker) <- c("Merokok", "Tidak Merokok")
colnames(data_kanker) <- c("Kanker", "Tidak Kanker")
# Menampilkan tabel
print("Tabel Kontingensi:")
## [1] "Tabel Kontingensi:"
data_kanker
## Kanker Tidak Kanker
## Merokok 60 40
## Tidak Merokok 20 80
# Mengambil nilai dari tabel
a <- data_kanker[1, 1] # Merokok & Kanker
b <- data_kanker[1, 2] # Merokok & Tidak Kanker
c <- data_kanker[2, 1] # Tidak Merokok & Kanker
d <- data_kanker[2, 2] # Tidak Merokok & Tidak Kanker
# Menghitung Odds Ratio
OR <- (a * d) / (b * c)
print(paste("Odds Ratio (OR):", round(OR, 3)))
## [1] "Odds Ratio (OR): 6"
# Menghitung Relative Risk
RR <- (a/(a+b)) / (c/(c+d))
print(paste("Relative Risk (RR):", round(RR, 3)))
## [1] "Relative Risk (RR): 3"
# Menghitung selang kepercayaan 95% untuk OR
SE_OR <- sqrt(1/a + 1/b + 1/c + 1/d)
CI_lower <- exp(log(OR) - 1.96 * SE_OR)
CI_upper <- exp(log(OR) + 1.96 * SE_OR)
print(paste("95% CI untuk OR:", round(CI_lower, 3), "-", round(CI_upper, 3)))
## [1] "95% CI untuk OR: 3.187 - 11.295"
# Melakukan uji chi-square
hasil_chi <- chisq.test(data_kanker)
print(hasil_chi)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: data_kanker
## X-squared = 31.688, df = 1, p-value = 1.811e-08
# Menampilkan tabel ekspektasi
print("Tabel Ekspektasi:")
## [1] "Tabel Ekspektasi:"
round(hasil_chi$expected, 2)
## Kanker Tidak Kanker
## Merokok 40 60
## Tidak Merokok 40 60
# Mosaic plot
par(mfrow = c(1, 2)) # 1 baris, 2 kolom
# Mosaic plot dasar
mosaicplot(data_kanker,
main = "Hubungan Merokok dan Kanker\n(Mosaic Plot)",
xlab = "Status Merokok",
ylab = "Status Kanker",
color = c("lightblue", "lightcoral"),
cex.axis = 0.8)
# Bar plot bertumpuk
barplot(data_kanker,
beside = FALSE,
main = "Distribusi Kanker berdasarkan Status Merokok",
xlab = "Status Kanker",
ylab = "Jumlah",
col = c("darkblue", "lightblue"),
legend.text = rownames(data_kanker),
args.legend = list(x = "topright"))
# Visualisasi dengan ggplot2
library(reshape2)
# Mengubah data ke format long untuk ggplot
data_long <- melt(data_kanker, varnames = c("Merokok", "Kanker"), value.name = "Frekuensi")
# Membuat stacked bar chart dengan proporsi
ggplot(data_long, aes(x = Kanker, y = Frekuensi, fill = Merokok)) +
geom_bar(stat = "identity", position = "fill") +
scale_y_continuous(labels = scales::percent) +
labs(title = "Proporsi Kanker berdasarkan Status Merokok",
x = "Status Kanker",
y = "Proporsi",
fill = "Status Merokok") +
theme_minimal() +
scale_fill_manual(values = c("lightblue", "lightcoral"))
# Menghitung residual dari uji chi-square
print("Residual Pearson:")
## [1] "Residual Pearson:"
round(hasil_chi$residuals, 3)
## Kanker Tidak Kanker
## Merokok 3.162 -2.582
## Tidak Merokok -3.162 2.582
# Uji Fisher's Exact Test (alternatif ketika sampel kecil)
fisher.test(data_kanker)
##
## Fisher's Exact Test for Count Data
##
## data: data_kanker
## p-value = 1.064e-08
## alternative hypothesis: true odds ratio is not equal to 1
## 95 percent confidence interval:
## 3.055033 11.932317
## sample estimates:
## odds ratio
## 5.940316
# Menampilkan ringkasan interpretasi
print("=== RINGKASAN HASIL ANALISIS ===")
## [1] "=== RINGKASAN HASIL ANALISIS ==="
print(paste("1. Odds Ratio (OR) =", round(OR, 3)))
## [1] "1. Odds Ratio (OR) = 6"
print(paste(" Interpretasi: Perokok memiliki peluang", round(OR, 1),
"kali lebih besar untuk terkena kanker paru"))
## [1] " Interpretasi: Perokok memiliki peluang 6 kali lebih besar untuk terkena kanker paru"
print(paste("2. Relative Risk (RR) =", round(RR, 3)))
## [1] "2. Relative Risk (RR) = 3"
print(paste(" Interpretasi: Risiko kanker paru pada perokok", round(RR, 1),
"kali lebih tinggi"))
## [1] " Interpretasi: Risiko kanker paru pada perokok 3 kali lebih tinggi"
print(paste("3. Uji Chi-square: X-squared =", round(hasil_chi$statistic, 3)))
## [1] "3. Uji Chi-square: X-squared = 31.688"
print(paste(" p-value =", format(hasil_chi$p.value, scientific = TRUE, digits = 3)))
## [1] " p-value = 1.81e-08"
# Interpretasi p-value
if(hasil_chi$p.value < 0.05) {
print("4. Kesimpulan: Terdapat hubungan yang signifikan antara merokok dan kanker paru (p < 0.05)")
} else {
print("4. Kesimpulan: Tidak terdapat hubungan yang signifikan antara merokok dan kanker paru (p > 0.05)")
}
## [1] "4. Kesimpulan: Terdapat hubungan yang signifikan antara merokok dan kanker paru (p < 0.05)"
Berdasarkan hasil analisis, ditemukan bahwa:
Odds Ratio sebesar 6 menunjukkan bahwa individu yang merokok memiliki odds (peluang) 6 kali lebih tinggi untuk menderita kanker paru dibandingkan dengan individu yang tidak merokok.
Relative Risk sebesar 3 menunjukkan bahwa risiko terkena kanker paru pada kelompok perokok adalah 3 kali lebih tinggi dibandingkan kelompok non-perokok.
Uji Chi-square menghasilkan p-value < 0.05, yang mengindikasikan bahwa hubungan antara merokok dan kanker paru secara statistik signifikan.
Secara substantif, hasil ini menunjukkan bahwa merokok merupakan faktor risiko yang signifikan untuk kejadian kanker paru. Temuan ini konsisten dengan berbagai penelitian epidemiologi yang telah dilakukan sebelumnya.
Analisis data kategori merupakan metode statistik yang esensial untuk menganalisis variabel kategorik. Melalui tabel kontingensi, hubungan antara variabel kategorik dapat dipelajari secara sistematis. Ukuran asosiasi seperti odds ratio dan relative risk memberikan gambaran kuantitatif mengenai kekuatan hubungan antar variabel.
Dalam studi kasus yang dianalisis:
# Bentuk Umum Tabel Kontingensi
data <- matrix(c("a", "b", "n1.","c", "d", "n2.","n.1", "n.2", "n.."), nrow = 3, byrow = TRUE)
colnames(data) <- c("1A", "1B", "Total")
rownames(data) <- c("2A", "2B", "Total")
data
## 1A 1B Total
## 2A "a" "b" "n1."
## 2B "c" "d" "n2."
## Total "n.1" "n.2" "n.."
#Tabel Kontingensi Kanker
data_kanker <- matrix(c(688, 650, 1338, 21, 59, 80, 709, 709, 1418), nrow = 3, byrow = TRUE)
rownames(data_kanker) <- c("Smoker", "Non-Smoker", "Total")
colnames(data_kanker) <- c("Cancer", "Control", "Total")
# Menampilkan tabel
print("Tabel Kontingensi:")
## [1] "Tabel Kontingensi:"
data_kanker
## Cancer Control Total
## Smoker 688 650 1338
## Non-Smoker 21 59 80
## Total 709 709 1418
# ================================
# 1. Ambil data dari tabel
# ================================
a <- data_kanker["Smoker", "Cancer"]
c <- data_kanker["Non-Smoker", "Cancer"]
b <- data_kanker["Smoker", "Control"]
d <- data_kanker["Non-Smoker", "Control"]
n1. <- data_kanker["Smoker", "Total"]
n2. <- data_kanker["Non-Smoker", "Total"]
n.1 <- data_kanker["Total", "Cancer"]
n.2 <- data_kanker["Total", "Control"]
n.. <- data_kanker["Total","Total"]
# ================================
# 2. Hitung proporsi masing-masing
# ================================
p_smokercancer <- a/n1.
p_nonsmokercancer <- c/n2.
cat("Proporsi Kejadian Kanker Paru pada Kelompok Smoker:", p_smokercancer, "\n")
## Proporsi Kejadian Kanker Paru pada Kelompok Smoker: 0.5142003
cat("Proporsi Kejadian Kanker Paru pada Kelompok Non-Smoker:", p_nonsmokercancer, "\n")
## Proporsi Kejadian Kanker Paru pada Kelompok Non-Smoker: 0.2625
# ================================
# 1. CI 95% untuk proporsi
# ================================
z <- 1.96 # nilai z untuk 95%
# Smoker
SE_smokercancer <- sqrt(p_smokercancer * (1 - p_smokercancer) / n1.)
CIsmokercancer_lower <- p_smokercancer - z * SE_smokercancer
CIsmokercancer_upper <- p_smokercancer + z * SE_smokercancer
# Non-Smoker
SE_nonsmokercancer <- sqrt(p_nonsmokercancer * (1 - p_nonsmokercancer) / n2.)
CInonsmokercancer_lower <- p_nonsmokercancer - z * SE_nonsmokercancer
CInonsmokercancer_lower <- p_nonsmokercancer + z * SE_nonsmokercancer
cat("CI 95% Proporsi Smoker:", CIsmokercancer_lower, "-", CIsmokercancer_upper, "\n")
## CI 95% Proporsi Smoker: 0.4874195 - 0.5409811
cat("CI 95% Proporsi Non-Smoker:", CInonsmokercancer_lower, "-", CInonsmokercancer_lower, "\n\n")
## CI 95% Proporsi Non-Smoker: 0.3589177 - 0.3589177
# ================================
# 2. Risk Difference (RD)
# ================================
RD <- p_smokercancer - p_nonsmokercancer
SE_RD <- sqrt((p_smokercancer * (1 - p_smokercancer) / n1.) + (p_nonsmokercancer * (1 - p_nonsmokercancer) / n2.))
RD_lower <- RD - z * SE_RD
RD_upper <- RD + z * SE_RD
cat("Risk Difference (RD):", RD, "\n")
## Risk Difference (RD): 0.2517003
cat("CI 95% RD:", RD_lower, "-", RD_upper, "\n\n")
## CI 95% RD: 0.1516324 - 0.3517682
# ================================
# Risk Ratio (RR)
# ================================
RR <- p_smokercancer / p_nonsmokercancer
# pakai log
SE_log_RR <- sqrt((1 - p_smokercancer) / (n1. * p_smokercancer) + (1 - p_nonsmokercancer) / (n2. * p_nonsmokercancer))
log_RR <- log(RR)
RR_lower <- exp(log_RR - z * SE_log_RR)
RR_upper <- exp(log_RR + z * SE_log_RR)
cat("Risk Ratio (RR):", RR, "\n")
## Risk Ratio (RR): 1.958858
cat("CI 95% RR:", RR_lower, "-", RR_upper, "\n\n")
## CI 95% RR: 1.351726 - 2.838687
# ================================
# Odds Ratio (OR)
# ================================
OR <- (a * d) / (b * c)
SE_log_OR <- sqrt(1/a + 1/b + 1/c + 1/d)
log_OR <- log(OR)
OR_lower <- exp(log_OR - z * SE_log_OR)
OR_upper <- exp(log_OR + z * SE_log_OR)
cat("Odds Ratio (OR):", OR, "\n")
## Odds Ratio (OR): 2.973773
cat("CI 95% OR:", OR_lower, "-", OR_upper, "\n")
## CI 95% OR: 1.78672 - 4.949474
# ================================
# 1. Hipotesis
# ================================
cat("Hipotesis:\n")
## Hipotesis:
cat("H0: p1 = p2 (tidak ada perbedaan proporsi)\n")
## H0: p1 = p2 (tidak ada perbedaan proporsi)
cat("H1: p1 != p2 (ada perbedaan proporsi)\n\n")
## H1: p1 != p2 (ada perbedaan proporsi)
# ================================
# 2. Taraf Signifikansi
# ================================
alpha <- 0.05
cat("Taraf Signifikansi (alpha):", alpha, "\n\n")
## Taraf Signifikansi (alpha): 0.05
# ================================
# 3. Uji Dua Proporsi
# ================================
p_gabungan <- (n.1) / (n..)
cat("Proporsi gabungan:", p_gabungan, "\n\n")
## Proporsi gabungan: 0.5
SE_gabungan <- sqrt(p_gabungan * (1 - p_gabungan) * (1/n1. + 1/n2.))
cat("Standar Error:", SE_gabungan, "\n\n")
## Standar Error: 0.05754864
Z <- (p_smokercancer - p_nonsmokercancer) / SE_gabungan
cat("Nilai Z:", Z, "\n\n")
## Nilai Z: 4.373697
p_value <- 2 * (1 - pnorm(abs(Z)))
cat("P-value:", p_value, "\n\n")
## P-value: 1.221601e-05
# ================================
# 4. Keputusan Uji
# ================================
if(p_value < alpha){
cat("Keputusan: Tolak H0\n")
} else {
cat("Keputusan: Gagal Tolak H0\n")
}
## Keputusan: Tolak H0
# ================================
# 5. Kesimpulan
# ================================
if(p_value < alpha){
cat("Kesimpulan: Terdapat perbedaan proporsi kejadian kanker paru antara smoker dan non-smoker\n")
} else {
cat("Kesimpulan: Tidak terdapat perbedaan proporsi kejadian kanker paru antara smoker dan non-smoker\n")
}
## Kesimpulan: Terdapat perbedaan proporsi kejadian kanker paru antara smoker dan non-smoker
# ================================
# 1. Ambil tabel 2x2 (tanpa total)
# ================================
tabel <- data_kanker[1:2, 1:2]
cat("Tabel Kontingensi:\n")
## Tabel Kontingensi:
print(tabel)
## Cancer Control
## Smoker 688 650
## Non-Smoker 21 59
cat("\n")
# ================================
# 2. Hipotesis
# ================================
cat("H0: Tidak ada hubungan antara status merokok dan kanker paru\n")
## H0: Tidak ada hubungan antara status merokok dan kanker paru
cat("H1: Ada hubungan antara status merokok dan kanker paru\n\n")
## H1: Ada hubungan antara status merokok dan kanker paru
# ================================
# 3. Taraf Signifikansi
# ================================
alpha <- 0.05
cat("Alpha:", alpha, "\n\n")
## Alpha: 0.05
# ================================
# 4. Expected Value
# ================================
# Total baris
row_total <- rowSums(tabel)
# Total kolom
col_total <- colSums(tabel)
# Expected (E)
E <- outer(row_total, col_total) / n..
cat("Expected Frequency (E):\n")
## Expected Frequency (E):
print(E)
## Cancer Control
## Smoker 669 669
## Non-Smoker 40 40
cat("\n")
# ================================
# 5. Statistik Chi-Square
# ================================
O <- tabel # observed
chi_square <- sum((O - E)^2 / E)
cat("Nilai Chi-Square hitung:", chi_square, "\n\n")
## Nilai Chi-Square hitung: 19.12922
# ================================
# 6. Derajat bebas & nilai kritis
# ================================
df <- (nrow(tabel)-1)*(ncol(tabel)-1)
chi_critical <- qchisq(0.95, df)
cat("Derajat bebas:", df, "\n")
## Derajat bebas: 1
cat("Chi-Square tabel:", chi_critical, "\n\n")
## Chi-Square tabel: 3.841459
# ================================
# 7. P-value
# ================================
p_value <- 1 - pchisq(chi_square, df)
cat("P-value:", p_value, "\n\n")
## P-value: 1.221601e-05
# ================================
# 8. Keputusan
# ================================
if(chi_square > chi_critical){
cat("Keputusan (berdasarkan Chi-Square): Tolak H0\n")
} else {
cat("Keputusan (berdasarkan Chi-Square): Gagal Tolak H0\n")
}
## Keputusan (berdasarkan Chi-Square): Tolak H0
if(p_value < alpha){
cat("Keputusan (berdasarkan p-value): Tolak H0\n")
} else {
cat("Keputusan (berdasarkan p-value): Gagal Tolak H0\n")
}
## Keputusan (berdasarkan p-value): Tolak H0
# ================================
# 9. Kesimpulan
# ================================
if(p_value < alpha){
cat("Kesimpulan: Terdapat hubungan antara status merokok dan kejadian kanker paru\n")
} else {
cat("Kesimpulan: Tidak terdapat hubungan antara status merokok dan kejadian kanker paru\n")
}
## Kesimpulan: Terdapat hubungan antara status merokok dan kejadian kanker paru
# ================================
# 1. Ambil tabel 2x2
# ================================
tabel <- data_kanker[1:2, 1:2]
cat("Tabel Kontingensi:\n")
## Tabel Kontingensi:
print(tabel)
## Cancer Control
## Smoker 688 650
## Non-Smoker 21 59
cat("\n")
# ================================
# 2. Hipotesis
# ================================
cat("Hipotesis:\n")
## Hipotesis:
cat("H0: Tidak terdapat hubungan antara status merokok dan kejadian kanker paru\n")
## H0: Tidak terdapat hubungan antara status merokok dan kejadian kanker paru
cat("H1: Terdapat hubungan antara status merokok dan kejadian kanker paru\n\n")
## H1: Terdapat hubungan antara status merokok dan kejadian kanker paru
# ================================
# 3. Taraf Signifikansi
# ================================
alpha <- 0.05
cat("Taraf Signifikansi (alpha):", alpha, "\n\n")
## Taraf Signifikansi (alpha): 0.05
# ================================
# 4. Hitung Expected (E)
# ================================
row_total <- rowSums(tabel)
col_total <- colSums(tabel)
E <- outer(row_total, col_total) / n..
cat("Expected (E):\n")
## Expected (E):
print(E)
## Cancer Control
## Smoker 669 669
## Non-Smoker 40 40
cat("\n")
# ================================
# 5. Hitung Statistik Uji G^2 (manual)
# ================================
O <- tabel
G2 <- 2 * sum(O * log(O / E))
cat("Nilai G^2 hitung:", G2, "\n\n")
## Nilai G^2 hitung: 19.87802
# ================================
# 6. Derajat Bebas & P-value
# ================================
df <- (nrow(tabel)-1)*(ncol(tabel)-1)
p_value <- 1 - pchisq(G2, df)
cat("Derajat bebas:", df, "\n")
## Derajat bebas: 1
cat("P-value:", p_value, "\n\n")
## P-value: 8.25441e-06
# ================================
# 7. Kriteria Uji
# ================================
chi_tabel <- qchisq(0.95, df)
cat("Chi-Square Tabel:", chi_tabel, "\n")
## Chi-Square Tabel: 3.841459
cat("Kriteria: Tolak H0 jika G^2 > Chi-Square tabel atau p-value < alpha\n\n")
## Kriteria: Tolak H0 jika G^2 > Chi-Square tabel atau p-value < alpha
# ================================
# 8. Keputusan
# ================================
if(G2 > chi_tabel){
cat("Keputusan (berdasarkan G^2): Tolak H0\n")
} else {
cat("Keputusan (berdasarkan G^2): Gagal Tolak H0\n")
}
## Keputusan (berdasarkan G^2): Tolak H0
if(p_value < alpha){
cat("Keputusan (berdasarkan p-value): Tolak H0\n")
} else {
cat("Keputusan (berdasarkan p-value): Gagal Tolak H0\n")
}
## Keputusan (berdasarkan p-value): Tolak H0
# ================================
# 9. Kesimpulan
# ================================
if(p_value < alpha){
cat("Kesimpulan: Terdapat hubungan antara status merokok dan kejadian kanker paru\n")
} else {
cat("Kesimpulan: Tidak terdapat hubungan antara status merokok dan kejadian kanker paru\n")
}
## Kesimpulan: Terdapat hubungan antara status merokok dan kejadian kanker paru
# ================================
# 1. Ambil tabel 2x2 (tanpa total)
# ================================
tabel <- data_kanker[1:2, 1:2]
cat("Tabel Kontingensi:\n")
## Tabel Kontingensi:
print(tabel)
## Cancer Control
## Smoker 688 650
## Non-Smoker 21 59
cat("\n")
# ================================
# 2. Hipotesis
# ================================
cat("Hipotesis:\n")
## Hipotesis:
cat("H0: Tidak terdapat hubungan antara status merokok dan kejadian kanker paru\n")
## H0: Tidak terdapat hubungan antara status merokok dan kejadian kanker paru
cat("H1: Terdapat hubungan antara status merokok dan kejadian kanker paru\n\n")
## H1: Terdapat hubungan antara status merokok dan kejadian kanker paru
# ================================
# 3. Taraf Signifikansi
# ================================
alpha <- 0.05
cat("Taraf Signifikansi (alpha):", alpha, "\n\n")
## Taraf Signifikansi (alpha): 0.05
# ================================
# 4. Fisher Exact Test
# ================================
hasil_fisher <- fisher.test(tabel)
print(hasil_fisher)
##
## Fisher's Exact Test for Count Data
##
## data: tabel
## 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
# ================================
# 5. Ambil p-value
# ================================
p_value <- hasil_fisher$p.value
cat("\nP-value:", p_value, "\n\n")
##
## P-value: 1.476303e-05
# ================================
# 6. Kriteria Uji
# ================================
cat("Kriteria Uji:\n")
## Kriteria Uji:
cat("Tolak H0 jika p-value < alpha\n\n")
## Tolak H0 jika p-value < alpha
# ================================
# 7. Keputusan
# ================================
if(p_value < alpha){
cat("Keputusan: Tolak H0\n")
} else {
cat("Keputusan: Gagal Tolak H0\n")
}
## Keputusan: Tolak H0
# ================================
# 8. Kesimpulan
# ================================
if(p_value < alpha){
cat("Kesimpulan: Terdapat hubungan antara status merokok dan kejadian kanker paru\n")
} else {
cat("Kesimpulan: Tidak terdapat hubungan antara status merokok dan kejadian kanker paru\n")
}
## Kesimpulan: Terdapat hubungan antara status merokok dan kejadian kanker paru
# ================================
# 1. Ambil nilai dari hasil sebelumnya
# ================================
# Uji Proporsi
Z_prop <- Z
p_prop <- 2 * (1 - pnorm(abs(Z_prop)))
keputusan_prop <- ifelse(p_prop < 0.05, "Tolak H0", "Gagal Tolak H0")
# Chi-Square
chi_sq <- chi_square
p_chi <- 1 - pchisq(chi_sq, df)
keputusan_chi <- ifelse(p_chi < 0.05, "Tolak H0", "Gagal Tolak H0")
# Likelihood Ratio (G^2)
G2_stat <- G2
p_g2 <- 1 - pchisq(G2_stat, df)
keputusan_g2 <- ifelse(p_g2 < 0.05, "Tolak H0", "Gagal Tolak H0")
# Fisher
p_fisher <- hasil_fisher$p.value
keputusan_fisher <- ifelse(p_fisher < 0.05, "Tolak H0", "Gagal Tolak H0")
# ================================
# 2. Buat tabel perbandingan
# ================================
perbandingan <- data.frame(
Metode = c("Uji Proporsi (Z)", "Chi-Square", "Likelihood Ratio (G^2)", "Fisher Exact"),
Hipotesis = c(
"p1 = p2 vs p1 ≠ p2",
"Independen vs Tidak",
"Independen vs Tidak",
"Independen vs Tidak"
),
Statistik_Uji = c(
round(Z_prop, 3),
round(chi_sq, 3),
round(G2_stat, 3),
"-"
),
P_Value = c(
signif(p_prop, 3),
signif(p_chi, 3),
signif(p_g2, 3),
signif(p_fisher, 3)
),
Keputusan = c(
keputusan_prop,
keputusan_chi,
keputusan_g2,
keputusan_fisher
),
Interpretasi = c(
"Ada perbedaan proporsi",
"Ada hubungan",
"Ada hubungan",
"Ada hubungan"
)
)
# Tampilkan tabel
cat("=== TABEL PERBANDINGAN UJI ===\n")
## === TABEL PERBANDINGAN UJI ===
print(perbandingan)
## Metode Hipotesis Statistik_Uji P_Value Keputusan
## 1 Uji Proporsi (Z) p1 = p2 vs p1 ≠ p2 4.374 1.22e-05 Tolak H0
## 2 Chi-Square Independen vs Tidak 19.129 1.22e-05 Tolak H0
## 3 Likelihood Ratio (G^2) Independen vs Tidak 19.878 8.25e-06 Tolak H0
## 4 Fisher Exact Independen vs Tidak - 1.48e-05 Tolak H0
## Interpretasi
## 1 Ada perbedaan proporsi
## 2 Ada hubungan
## 3 Ada hubungan
## 4 Ada hubungan
Berdasarkan berbagai metode pengujian statistik yang dilakukan, diperoleh hasil yang konsisten yaitu p-value < 0,05, sehingga H₀ ditolak. Dengan demikian, dapat disimpulkan bahwa terdapat hubungan yang signifikan antara status merokok dan kejadian kanker paru. Individu yang merokok memiliki proporsi kejadian kanker paru yang lebih tinggi dibandingkan dengan non-smoker.
# Bentuk Umum Tabel Kontingensi
data <- matrix(c("a", "b", "c", "n1.","c", "d", "e", "n2.","n.1", "n.2", "n.3","n.."), nrow = 3, byrow = TRUE)
colnames(data) <- c("1A", "1B", "1C","Total")
rownames(data) <- c("2A", "2B", "Total")
data
## 1A 1B 1C Total
## 2A "a" "b" "c" "n1."
## 2B "c" "d" "e" "n2."
## Total "n.1" "n.2" "n.3" "n.."
#Tabel Kontingensi Kanker
data_partai <- matrix(c(495, 272, 590, 1357, 330, 265, 498, 1093, 825, 537, 1088, 2450), nrow = 3, byrow = TRUE)
rownames(data_partai) <- c("Female", "Male", "Total")
colnames(data_partai) <- c("Democrat", "Republican","Independent", "Total")
# Menampilkan tabel
print("Tabel Kontingensi:")
## [1] "Tabel Kontingensi:"
data_partai
## Democrat Republican Independent Total
## Female 495 272 590 1357
## Male 330 265 498 1093
## Total 825 537 1088 2450
# ================================
# 1. Ambil tabel 2x3 (tanpa total)
# ================================
tabel <- data_partai[1:2, 1:3]
cat("Tabel Kontingensi:\n")
## Tabel Kontingensi:
print(tabel)
## Democrat Republican Independent
## Female 495 272 590
## Male 330 265 498
cat("\n")
# ================================
# 2. Mengambil Nilai Setiap Sel
# ================================
a <- data_partai["Female", "Democrat"]
b <- data_partai["Female", "Republican"]
c <- data_partai["Female", "Independent"]
d <- data_partai["Male", "Democrat"]
e <- data_partai["Male", "Republican"]
f <- data_partai["Male", "Independent"]
n1. <- data_partai["Female", "Total"]
n2. <- data_partai["Male", "Total"]
n.1 <- data_partai["Total", "Democrat"]
n.2 <- data_partai["Total", "Republican"]
n.3 <- data_partai["Total", "Independent"]
n.. <- data_partai["Total","Total"]
# ================================
# 2. Hitung total baris, kolom, dan total keseluruhan
# ================================
row_total <- rowSums(tabel)
col_total <- colSums(tabel)
# ================================
# 3. Hitung Expected Frequency
# ================================
E <- outer(row_total, col_total) / n..
cat("Frekuensi Harapan (Expected):\n")
## Frekuensi Harapan (Expected):
print(round(E, 2))
## Democrat Republican Independent
## Female 456.95 297.43 602.62
## Male 368.05 239.57 485.38
# ================================
# 1. Hipotesis
# ================================
cat("Hipotesis:\n")
## Hipotesis:
cat("H0: Tidak terdapat hubungan antara gender dan preferensi partai\n")
## H0: Tidak terdapat hubungan antara gender dan preferensi partai
cat("H1: Terdapat hubungan antara gender dan preferensi partai\n\n")
## H1: Terdapat hubungan antara gender dan preferensi partai
# ================================
# 2. Taraf Signifikansi
# ================================
alpha <- 0.05
cat("Taraf Signifikansi (alpha):", alpha, "\n\n")
## Taraf Signifikansi (alpha): 0.05
# ================================
# 3. Hitung Chi-Square
# ================================
O <- tabel
chi_square <- sum((O - E)^2 / E)
cat("Nilai Chi-Square hitung:", chi_square, "\n\n")
## Nilai Chi-Square hitung: 12.56926
# ================================
# 6. Derajat Bebas & P-value
# ================================
df <- (nrow(O)-1)*(ncol(O)-1)
p_value <- 1 - pchisq(chi_square, df)
cat("Derajat bebas:", df, "\n")
## Derajat bebas: 2
cat("P-value:", p_value, "\n\n")
## P-value: 0.00186475
# ================================
# 7. Kriteria Uji
# ================================
chi_tabel <- qchisq(0.95, df)
cat("Chi-Square Tabel:", chi_tabel, "\n")
## Chi-Square Tabel: 5.991465
cat("Kriteria: Tolak H0 jika Chi-Square hitung > Chi-Square tabel atau p-value < alpha\n\n")
## Kriteria: Tolak H0 jika Chi-Square hitung > Chi-Square tabel atau p-value < alpha
# ================================
# 8. Keputusan
# ================================
if(chi_square > chi_tabel){
cat("Keputusan (Chi-Square): Tolak H0\n")
} else {
cat("Keputusan (Chi-Square): Gagal Tolak H0\n")
}
## Keputusan (Chi-Square): Tolak H0
if(p_value < alpha){
cat("Keputusan (p-value): Tolak H0\n")
} else {
cat("Keputusan (p-value): Gagal Tolak H0\n")
}
## Keputusan (p-value): Tolak H0
# ================================
# 9. Kesimpulan
# ================================
if(p_value < alpha){
cat("Kesimpulan: Terdapat hubungan antara gender dan preferensi partai\n")
} else {
cat("Kesimpulan: Tidak terdapat hubungan antara gender dan preferensi partai\n")
}
## Kesimpulan: Terdapat hubungan antara gender dan preferensi partai
# ================================
# Residual Pearson
# ================================
residual_pearson <- (O - E) / sqrt(E)
cat("Residual Pearson:\n")
## Residual Pearson:
print(round(residual_pearson, 3))
## Democrat Republican Independent
## Female 1.780 -1.475 -0.514
## Male -1.983 1.643 0.573
cat("\n")
# ================================
# Standardized Residual
# ================================
row_prop <- rowSums(tabel) / sum(tabel)
col_prop <- colSums(tabel) / sum(tabel)
std <- (O - E) / sqrt(E * (1 - row_prop[row(O)]) * (1 - col_prop[col(O)]))
round(std, 3)
## Democrat Republican Independent
## Female 3.272 -2.499 -1.032
## Male -3.272 2.499 1.032
cat("Standardized Residual:\n")
## Standardized Residual:
print(round(std, 3))
## Democrat Republican Independent
## Female 3.272 -2.499 -1.032
## Male -3.272 2.499 1.032
# ================================
# Interpretasi
# ================================
interpretasi <- function(x){
if(abs(x) > 2){
if(x > 0){
return("Lebih banyak dari harapan (Signifikan)")
} else {
return("Lebih sedikit dari harapan (Signifikan)")
}
} else {
if(x > 0){
return("Sedikit lebih banyak (Tidak signifikan)")
} else {
return("Sedikit lebih sedikit (Tidak signifikan)")
}
}
}
# ================================
# Loop interpretasi
# ================================
hasil_interpretasi <- matrix("", nrow = nrow(std), ncol = ncol(std))
for(i in 1:nrow(std)){
for(j in 1:ncol(std)){
hasil_interpretasi[i,j] <- interpretasi(std[i,j])
}
}
rownames(hasil_interpretasi) <- rownames(std)
colnames(hasil_interpretasi) <- colnames(std)
# ================================
# Tambah Kesimpulan Kontekstual
# ================================
kesimpulan <- function(gender, partai, nilai){
if(abs(nilai) > 2){
if(nilai > 0){
return(paste(gender, "cenderung memilih", partai, "lebih banyak dari yang diharapkan"))
} else {
return(paste(gender, "cenderung memilih", partai, "lebih sedikit dari yang diharapkan"))
}
} else {
return(paste("Tidak terdapat kecenderungan signifikan pada", gender, "terhadap", partai))
}
}
# ================================
# Tabel Interpretasi
# ================================
tabel_interpretasi <- data.frame(
Gender = rep(rownames(std), each = ncol(std)),
Partai = rep(colnames(std), times = nrow(std)),
Residual = as.vector(t(std)),
Interpretasi = as.vector(t(hasil_interpretasi)),
Kesimpulan = NA
)
# ================================
# Isi kolom kesimpulan
# ================================
for(i in 1:nrow(tabel_interpretasi)){
tabel_interpretasi$Kesimpulan[i] <- kesimpulan(
tabel_interpretasi$Gender[i],
tabel_interpretasi$Partai[i],
tabel_interpretasi$Residual[i]
)
}
print(tabel_interpretasi)
## Gender Partai Residual Interpretasi
## 1 Female Democrat 3.272365 Lebih banyak dari harapan (Signifikan)
## 2 Female Republican -2.498557 Lebih sedikit dari harapan (Signifikan)
## 3 Female Independent -1.032199 Sedikit lebih sedikit (Tidak signifikan)
## 4 Male Democrat -3.272365 Lebih sedikit dari harapan (Signifikan)
## 5 Male Republican 2.498557 Lebih banyak dari harapan (Signifikan)
## 6 Male Independent 1.032199 Sedikit lebih banyak (Tidak signifikan)
## Kesimpulan
## 1 Female cenderung memilih Democrat lebih banyak dari yang diharapkan
## 2 Female cenderung memilih Republican lebih sedikit dari yang diharapkan
## 3 Tidak terdapat kecenderungan signifikan pada Female terhadap Independent
## 4 Male cenderung memilih Democrat lebih sedikit dari yang diharapkan
## 5 Male cenderung memilih Republican lebih banyak dari yang diharapkan
## 6 Tidak terdapat kecenderungan signifikan pada Male terhadap Independent
# ================================
# 1. Ambil data (2x2)
# ================================
data_DR <- tabel[, c("Democrat", "Republican")]
cat("Tabel Demokrat vs Republican:\n")
## Tabel Demokrat vs Republican:
print(data_DR)
## Democrat Republican
## Female 495 272
## Male 330 265
cat("\n")
# ================================
# 2. Hipotesis
# ================================
cat("H0: Tidak ada hubungan antara gender dan pilihan Demokrat vs Republican\n")
## H0: Tidak ada hubungan antara gender dan pilihan Demokrat vs Republican
cat("H1: Ada hubungan antara gender dan pilihan Demokrat vs Republican\n\n")
## H1: Ada hubungan antara gender dan pilihan Demokrat vs Republican
alpha <- 0.05
# ================================
# 3. Expected
# ================================
row_total <- rowSums(data_DR)
col_total <- colSums(data_DR)
n <- sum(data_DR)
E <- outer(row_total, col_total) / n
cat("Frekuensi Harapan:\n")
## Frekuensi Harapan:
print(round(E, 2))
## Democrat Republican
## Female 464.59 302.41
## Male 360.41 234.59
cat("\n")
# ================================
# 4. Chi-Square
# ================================
O <- data_DR
chi_square <- sum((O - E)^2 / E)
cat("Chi-Square Hitung:", chi_square, "\n\n")
## Chi-Square Hitung: 11.55452
# ================================
# 5. Derajat Bebas & Kriteria
# ================================
df <- (nrow(O)-1)*(ncol(O)-1)
chi_tabel <- qchisq(0.95, df)
cat("df:", df, "\n")
## df: 1
cat("Chi-Square Tabel:", chi_tabel, "\n\n")
## Chi-Square Tabel: 3.841459
# ================================
# 6. Keputusan
# ================================
if(chi_square > chi_tabel){
cat("Keputusan: Tolak H0\n")
cat("Kesimpulan: Ada hubungan antara gender dan pilihan Demokrat vs Republican\n\n")
} else {
cat("Keputusan: Gagal Tolak H0\n")
cat("Kesimpulan: Tidak ada hubungan\n\n")
}
## Keputusan: Tolak H0
## Kesimpulan: Ada hubungan antara gender dan pilihan Demokrat vs Republican
# ================================
# 1. Gabungkan data
# ================================
gabungan <- tabel[, "Democrat"] + tabel[, "Republican"]
data_DR_I <- cbind(gabungan, tabel[, "Independent"])
colnames(data_DR_I) <- c("DemRep", "Independent")
cat("Tabel (Dem+Rep) vs Independent:\n")
## Tabel (Dem+Rep) vs Independent:
print(data_DR_I)
## DemRep Independent
## Female 767 590
## Male 595 498
cat("\n")
# ================================
# 2. Hipotesis
# ================================
cat("H0: Tidak ada hubungan antara gender dan pilihan (Dem+Rep) vs Independent\n")
## H0: Tidak ada hubungan antara gender dan pilihan (Dem+Rep) vs Independent
cat("H1: Ada hubungan antara gender dan pilihan (Dem+Rep) vs Independent\n\n")
## H1: Ada hubungan antara gender dan pilihan (Dem+Rep) vs Independent
alpha <- 0.05
# ================================
# 3. Expected
# ================================
row_total <- rowSums(data_DR_I)
col_total <- colSums(data_DR_I)
E <- outer(row_total, col_total) / n..
cat("Frekuensi Harapan:\n")
## Frekuensi Harapan:
print(round(E, 2))
## DemRep Independent
## Female 754.38 602.62
## Male 607.62 485.38
cat("\n")
# ================================
# 4. Chi-Square
# ================================
O <- data_DR_I
chi_square <- sum((O - E)^2 / E)
cat("Chi-Square Hitung:", chi_square, "\n\n")
## Chi-Square Hitung: 1.065434
# ================================
# 5. df & Kriteria
# ================================
df <- (nrow(O)-1)*(ncol(O)-1)
chi_tabel <- qchisq(0.95, df)
cat("df:", df, "\n")
## df: 1
cat("Chi-Square Tabel:", chi_tabel, "\n\n")
## Chi-Square Tabel: 3.841459
# ================================
# 6. Keputusan
# ================================
if(chi_square > chi_tabel){
cat("Keputusan: Tolak H0\n")
cat("Kesimpulan: Ada hubungan antara gender dan pilihan (Dem+Rep) vs Independent\n")
} else {
cat("Keputusan: Gagal Tolak H0\n")
cat("Kesimpulan: Tidak ada hubungan antara gender dan pilihan (Dem+Rep) vs Independent\n")
}
## Keputusan: Gagal Tolak H0
## Kesimpulan: Tidak ada hubungan antara gender dan pilihan (Dem+Rep) vs Independent
Berdasarkan uji chi-square independensi, diperoleh bahwa terdapat hubungan yang signifikan antara gender dan preferensi partai politik. Hasil partisi chi-square menunjukkan bahwa hubungan tersebut terutama disebabkan oleh perbedaan pilihan antara Demokrat dan Republican, sedangkan tidak terdapat perbedaan signifikan antara kecenderungan memilih partai (Demokrat/Republican) dan Independent berdasarkan gender. Hal ini diperkuat oleh analisis residual yang menunjukkan bahwa perempuan cenderung lebih banyak memilih Demokrat, sedangkan laki-laki lebih cenderung memilih Republican.
# ================================
# 1. Hasil uji
# ================================
hasil_uji <- data.frame(
Metode = c("Chi-Square (2x3)",
"Partisi: Dem vs Rep",
"Partisi: (Dem+Rep) vs Indep"),
Hipotesis = c(
"Ada hubungan gender & preferensi partai",
"Ada hubungan gender & pilihan Dem vs Rep",
"Ada hubungan gender & pilihan (Partai vs Indep)"
),
Chi_Square = c(12.56926, 11.55452, 1.065434),
df = c(2, 1, 1),
p_value = c(0.00186475,
1 - pchisq(11.55452, 1),
1 - pchisq(1.065434, 1))
)
# ================================
# 2. Keputusan
# ================================
alpha <- 0.05
hasil_uji$Keputusan <- ifelse(
hasil_uji$p_value < alpha,
"Tolak H0",
"Gagal Tolak H0"
)
# ================================
# 3. Interpretasi
# ================================
hasil_uji$Interpretasi <- c(
"Ada hubungan antara gender dan preferensi partai",
"Perbedaan terjadi pada pilihan Demokrat vs Republican",
"Tidak ada perbedaan dalam memilih partai vs independen"
)
# ================================
# 4. Tampilkan tabel
# ================================
print(hasil_uji)
## Metode Hipotesis
## 1 Chi-Square (2x3) Ada hubungan gender & preferensi partai
## 2 Partisi: Dem vs Rep Ada hubungan gender & pilihan Dem vs Rep
## 3 Partisi: (Dem+Rep) vs Indep Ada hubungan gender & pilihan (Partai vs Indep)
## Chi_Square df p_value Keputusan
## 1 12.569260 2 0.0018647500 Tolak H0
## 2 11.554520 1 0.0006758475 Tolak H0
## 3 1.065434 1 0.3019790794 Gagal Tolak H0
## Interpretasi
## 1 Ada hubungan antara gender dan preferensi partai
## 2 Perbedaan terjadi pada pilihan Demokrat vs Republican
## 3 Tidak ada perbedaan dalam memilih partai vs independen
Hasil standardized residual menunjukkan bahwa tidak semua kategori memberikan kontribusi yang sama terhadap hubungan antara gender dan identifikasi partai politik.
Kategori yang paling berkontribusi signifikan adalah:
Nilai residual positif dan lebih besar dari 2 menunjukkan bahwa jumlah perempuan yang memilih Partai Demokrat secara signifikan lebih banyak daripada yang diharapkan jika tidak ada hubungan. Perempuan memiliki kecenderungan kuat untuk memilih Partai Demokrat.
Nilai residual negatif dan signifikan menunjukkan bahwa jumlah laki-laki yang memilih Partai Demokrat lebih sedikit dari yang diharapkan. Laki-laki cenderung tidak memilih Partai Demokrat dibandingkan ekspektasi.
Nilai negatif signifikan menunjukkan perempuan yang memilih Partai Republik lebih sedikit dari yang diharapkan. Perempuan cenderung menghindari atau kurang memilih Partai Republik.
Nilai positif signifikan menunjukkan laki-laki yang memilih Partai Republik lebih banyak dari yang diharapkan. Laki-laki memiliki kecenderungan kuat untuk memilih Partai Republik.
Female: -1.032 Male: 1.032
Nilai tersebut tidak signifikan (|res| < 2)
Tidak terdapat perbedaan yang berarti antara laki-laki dan perempuan dalam memilih Independent.
Agresti, A. (2013). Categorical Data Analysis (3rd ed.). Wiley.
Agresti, A. (2018). An Introduction to Categorical Data Analysis (3rd ed.). Wiley.
Hosmer, D. W., Lemeshow, S., & Sturdivant, R. X. (2013). Applied Logistic Regression (3rd ed.). Wiley. ```