Analisis Data Kategorik
BAGIAN A : Pendugaan Parameter & Uji Satu Proporsi
Data Simulasi : Status Kelulusan Peserta Pelatihan Statistik
# Membuat data peserta
data_peserta <- data.frame(
No = 1:40,
Peserta = paste("Peserta", 1:40),
Status_Kelulusan = c(
"Lulus", "Lulus", "Lulus", "Lulus", "Tidak Lulus",
"Lulus", "Tidak Lulus", "Lulus", "Lulus", "Lulus",
"Lulus", "Lulus", "Lulus", "Lulus", "Lulus",
"Lulus", "Lulus", "Lulus", "Tidak Lulus", "Lulus",
"Tidak Lulus", "Lulus", "Lulus", "Lulus", "Tidak Lulus",
"Lulus", "Lulus", "Lulus", "Tidak Lulus", "Lulus",
"Tidak Lulus", "Tidak Lulus", "Lulus", "Tidak Lulus", "Lulus",
"Lulus", "Tidak Lulus", "Lulus", "Tidak Lulus", "Lulus"
)
)
# Tabel data peserta
knitr::kable(data_peserta)| No | Peserta | Status_Kelulusan |
|---|---|---|
| 1 | Peserta 1 | Lulus |
| 2 | Peserta 2 | Lulus |
| 3 | Peserta 3 | Lulus |
| 4 | Peserta 4 | Lulus |
| 5 | Peserta 5 | Tidak Lulus |
| 6 | Peserta 6 | Lulus |
| 7 | Peserta 7 | Tidak Lulus |
| 8 | Peserta 8 | Lulus |
| 9 | Peserta 9 | Lulus |
| 10 | Peserta 10 | Lulus |
| 11 | Peserta 11 | Lulus |
| 12 | Peserta 12 | Lulus |
| 13 | Peserta 13 | Lulus |
| 14 | Peserta 14 | Lulus |
| 15 | Peserta 15 | Lulus |
| 16 | Peserta 16 | Lulus |
| 17 | Peserta 17 | Lulus |
| 18 | Peserta 18 | Lulus |
| 19 | Peserta 19 | Tidak Lulus |
| 20 | Peserta 20 | Lulus |
| 21 | Peserta 21 | Tidak Lulus |
| 22 | Peserta 22 | Lulus |
| 23 | Peserta 23 | Lulus |
| 24 | Peserta 24 | Lulus |
| 25 | Peserta 25 | Tidak Lulus |
| 26 | Peserta 26 | Lulus |
| 27 | Peserta 27 | Lulus |
| 28 | Peserta 28 | Lulus |
| 29 | Peserta 29 | Tidak Lulus |
| 30 | Peserta 30 | Lulus |
| 31 | Peserta 31 | Tidak Lulus |
| 32 | Peserta 32 | Tidak Lulus |
| 33 | Peserta 33 | Lulus |
| 34 | Peserta 34 | Tidak Lulus |
| 35 | Peserta 35 | Lulus |
| 36 | Peserta 36 | Lulus |
| 37 | Peserta 37 | Tidak Lulus |
| 38 | Peserta 38 | Lulus |
| 39 | Peserta 39 | Tidak Lulus |
| 40 | Peserta 40 | Lulus |
# Tabel jumlah berdasarkan status
status <- data_peserta$Status_Kelulusan
tabel_status <- table(status)
knitr::kable(tabel_status)| status | Freq |
|---|---|
| Lulus | 29 |
| Tidak Lulus | 11 |
# Menghitung jumlah peserta
n <- length(status)
# Menghitung jumlah peserta yang lulus
x <- sum(status == "Lulus")
# Tabel hasil
hasil <- data.frame(
Keterangan = c("Jumlah peserta", "Jumlah yang lulus"),
Hasil = c(n, x)
)
knitr::kable(hasil)| Keterangan | Hasil |
|---|---|
| Jumlah peserta | 40 |
| Jumlah yang lulus | 29 |
1. Hitung proporsi sampel (p̂) peserta yang “Lulus” beserta selang kepercayaan 95%-nya
Perhitungan Manual
# Proporsi sampel
p_hat <- x / n
# Standard error
se <- sqrt(p_hat * (1 - p_hat) / n)
# Menentukan nilai Z
alpha <- 1 - 0.95
alpha_2 <- alpha / 2
z <- qnorm(1 - alpha_2)
# Selang kepercayaan 95%
batas_bawah <- p_hat - z * se
batas_atas <- p_hat + z * se
# Hasil
hasil_ci <- data.frame(
Keterangan = c("Proporsi sampel (p_hat)", "SE(p_hat)", "Z(a/2)",
"Batas bawah", "Batas atas"),
Hasil = c(p_hat, se, z, batas_bawah, batas_atas)
)
knitr::kable(hasil_ci, digits = 4)| Keterangan | Hasil |
|---|---|
| Proporsi sampel (p_hat) | 0.7250 |
| SE(p_hat) | 0.0706 |
| Z(a/2) | 1.9600 |
| Batas bawah | 0.5866 |
| Batas atas | 0.8634 |
Interpretasi : Berdasarkan hasil perhitungan, diperoleh proporsi sampel (p̂) peserta yang lulus sebesar 0,725. Selang kepercayaan 95% untuk proporsi tersebut berada pada rentang 0,5866 hingga 0,8634. Artinya, dengan tingkat kepercayaan 95%, proporsi kelulusan peserta yang sebenarnya di populasi diperkirakan berada di antara 0,5866 sampai dengan 0,8634.
Verifikasi dengan fungsi R (prop.test)
##
## 1-sample proportions test without continuity correction
##
## data: 29 out of 40, null probability 0.5
## X-squared = 8.1, df = 1, p-value = 0.004427
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
## 0.5716504 0.8389198
## sample estimates:
## p
## 0.725
Interpretasi: Hasil verifikasi menggunakan prop.test() diperoleh proporsi sampel (p) sebesar 0,725, dengan selang kepercayaan 95% antara 0,5717 sampai 0,8389. Hasil ini tidak jauh berbeda dengan perhitungan manual (0,5866 – 0,8634), sehingga dapat dikatakan perhitungan manual sesuai dan konsisten dengan hasil verifikasi R.
2. Perusahaan menargetkan tingkat kelulusan pelatihan minimal 80% (p0 = 0,80). Periksa apakah syarat kecukupan sampel untuk pendekatan normal terpenuhi.
Perhitungan Manual
# Data
p0 <- 0.80
# Syarat kecukupan sampel
np0 <- n * p0
n_1_p0 <- n * (1 - p0)
# Hasil pengecekan
hasil_syarat <- data.frame(
Syarat = c("n x p0", "n x (1-p0)"),
Nilai = c(np0, n_1_p0),
Keterangan = c(
ifelse(np0 >= 5, "Terpenuhi (>= 5)", "Tidak terpenuhi"),
ifelse(n_1_p0 >= 5, "Terpenuhi (>= 5)", "Tidak terpenuhi")
)
)
knitr::kable(hasil_syarat)| Syarat | Nilai | Keterangan |
|---|---|---|
| n x p0 | 32 | Terpenuhi (>= 5) |
| n x (1-p0) | 8 | Terpenuhi (>= 5) |
Kedua syarat terpenuhi, maka pendekatan normal valid, gunakan uji Z proporsi (bukan uji eksak Binomial).
3. Lakukan pengujian hipotesis yang sesuai (Uji Z Proporsi atau Uji Eksak Binomial : pilih berdasarkan hasil langkah 2) untuk menguji apakah tingkat kelulusan aktual berada di bawah target 80%, pada α = 0,05.
Hipotesis:
H0 : p ≥ 0,80 (proporsi kelulusan mencapai atau melebihi target 80%)
H1 : p < 0,80 (proporsi kelulusan tidak mencapai target 80%)
Perhitungan Manual
# Statistik uji Z
z_hitung <- (p_hat - p0) / sqrt(p0 * (1 - p0) / n)
# Nilai kritis (uji satu arah kiri)
z_kritis <- qnorm(alpha)
# p-value
p_value <- pnorm(z_hitung)
# Keputusan
keputusan <- ifelse(p_value > alpha, "Gagal tolak H0", "Tolak H0")
# Hasil
hasil_uji <- data.frame(
Keterangan = c("Z hitung", "Z kritis", "p-value", "Keputusan"),
Hasil = c(round(z_hitung, 4), round(z_kritis, 4),
round(p_value, 4), keputusan)
)
knitr::kable(hasil_uji)| Keterangan | Hasil |
|---|---|
| Z hitung | -1.1859 |
| Z kritis | -1.6449 |
| p-value | 0.1178 |
| Keputusan | Gagal tolak H0 |
Kriteria keputusan: p-value = 0,1178 > α = 0,05, maka gagal tolak H0.
Verifikasi dengan R (prop.test)
# Uji Z Proporsi (H1: p < 0,80)
prop.test(x = 29, n = 40, p = 0.80, alternative = "less", conf.level = 0.95, correct = FALSE)##
## 1-sample proportions test without continuity correction
##
## data: 29 out of 40, null probability 0.8
## X-squared = 1.4063, df = 1, p-value = 0.1178
## alternative hypothesis: true p is less than 0.8
## 95 percent confidence interval:
## 0.000000 0.824034
## sample estimates:
## p
## 0.725
Interpretasi: Hasil verifikasi prop.test() diperoleh p-value sebesar 0,1178, yaitu nilai yang sama dengan hasil perhitungan manual sebelumnya. Keputusan yang diambil tetap gagal tolak H0, karena p-value (0,1178) lebih besar dari α (0,05).
4. Tuliskan kesimpulan dalam kalimat yang mudah dipahami, sesuai konteks permasalahan.
Berdasarkan hasil pengujian, proporsi peserta yang lulus dalam sampel adalah 72,5%, sedangkan target kelulusan sebesar 80%. Hasil pengujian manual diperoleh Z hitung = -1,1859 dengan p-value = 0,1178, dan hasil ini konsisten dengan verifikasi menggunakan prop.test() di R (p-value = 0,1178), walaupun hasilnya beda dikit. Karena p-value (0,1178) lebih besar dari α = 0,05, maka H0 gagal ditolak. Jadi, perbedaan antara proporsi sampel 72,5% dan target 80% belum terbukti signifikan. Maka belum ada cukup bukti untuk menyatakan bahwa proporsi kelulusan peserta tidak mencapai target 80%.
BAGIAN B : Uji Kebaikan Suai Chi-Square
Data Simulasi : Jenis Pertanyaan Layanan Akademik
# Membuat data kategori
data_gof <- data.frame(
Kategori = c("Akademik", "Administrasi", "Teknis Sistem", "Lainnya"),
Proporsi_Historis = c("40%", "30%", "20%", "10%"),
Observasi = c(70, 40, 25, 15)
)
knitr::kable(data_gof)| Kategori | Proporsi_Historis | Observasi |
|---|---|---|
| Akademik | 40% | 70 |
| Administrasi | 30% | 40 |
| Teknis Sistem | 20% | 25 |
| Lainnya | 10% | 15 |
1. Susun hipotesis nol dan alternatif
HIPOTESIS
H0 : proporsi jenis pertanyaan sesuai proporsi historis (Akademik 40%, Administrasi 30%, Teknis Sistem 20%, Lainnya 10%)
H1 : minimal ada satu proporsi yang berbeda dari proporsi historis
2. Hitung nilai harapan (expected frequency) untuk setiap kategori
Perhitungan Manual
# Total observasi
n <- sum(data_gof$Observasi)
# Nilai harapan Ei = n x pi0
data_gof$Expected <- n * as.numeric(sub("%", "", data_gof$Proporsi_Historis)) / 100
knitr::kable(data_gof)| Kategori | Proporsi_Historis | Observasi | Expected |
|---|---|---|---|
| Akademik | 40% | 70 | 60 |
| Administrasi | 30% | 40 | 45 |
| Teknis Sistem | 20% | 25 | 30 |
| Lainnya | 10% | 15 | 15 |
Semua Ei (60, 45, 30, 15) ≥ 5, maka syarat kecukupan sampel terpenuhi, aproksimasi chi-square valid.
3. Hitung statistik uji Chi-Square dan derajat bebasnya, bandingkan dengan nilai kritis pada α = 0,05
Perhitungan Manual
# Kontribusi tiap kategori
data_gof$Kontribusi <- (data_gof$Observasi - data_gof$Expected)^2 / data_gof$Expected
knitr::kable(data_gof)| Kategori | Proporsi_Historis | Observasi | Expected | Kontribusi |
|---|---|---|---|---|
| Akademik | 40% | 70 | 60 | 1.6666667 |
| Administrasi | 30% | 40 | 45 | 0.5555556 |
| Teknis Sistem | 20% | 25 | 30 | 0.8333333 |
| Lainnya | 10% | 15 | 15 | 0.0000000 |
# Statistik uji Chi-Square
chi_hitung <- sum(data_gof$Kontribusi)
# Derajat bebas
df <- nrow(data_gof) - 1
# Nilai kritis
chi_kritis <- qchisq(0.95, df)
# p-value
p_value_chi <- 1 - pchisq(chi_hitung, df)
# Keputusan
keputusan_chi <- ifelse(p_value_chi > 0.05, "Gagal tolak H0", "Tolak H0")
# Tabel ringkasan hasil
hasil_chi <- data.frame(
Keterangan = c("Chi-square hitung", "df", "Chi-square kritis", "p-value", "Keputusan"),
Hasil = c(round(chi_hitung, 4), df, round(chi_kritis, 4),
round(p_value_chi, 4), keputusan_chi)
)
knitr::kable(hasil_chi)| Keterangan | Hasil |
|---|---|
| Chi-square hitung | 3.0556 |
| df | 3 |
| Chi-square kritis | 7.8147 |
| p-value | 0.3831 |
| Keputusan | Gagal tolak H0 |
Kriteria keputusan: Chi-square hitung (3,0556) < Chi-square kritis (7,8147), atau p-value (0,383) > α (0,05)
Maka: chi-square hitung tidak melewati nilai kritis, dan berada di daerah penerimaan H0. Maka, H0 gagal ditolak.
4. Verifikasi hasil perhitungan manual menggunakan R Studio (fungsi chisq.test()).
##
## Chi-squared test for given probabilities
##
## data: data_gof$Observasi
## X-squared = 3.0556, df = 3, p-value = 0.3831
Interpretasi: Hasil verifikasi chisq.test() diperoleh chi-square = 3,0556 dan p-value = 0,3831, sama persis dengan perhitungan manual. Keputusannya tetap gagal tolak H0, karena p-value (0,3831) lebih besar dari α (0,05).
5. Simpulkan apakah distribusi jenis pertanyaan layanan akademik saat ini masih konsisten dengan proporsi historis
Berdasarkan hasil uji chi-square baik secara manual maupun verifikasi menggunakan chisq.test() di R, diperoleh chi-square hitung = 3,0556 < chi-square tabel = 7,8147 dan p-value = 0,383 > α = 0,05. Maka H0 gagal ditolak. Artinya, distribusi jenis pertanyaan layanan akademik saat ini tidak berbeda secara signifikan dari proporsi historis. Maka distribusi saat ini masih konsisten dengan proporsi historis, yaitu Akademik 40%, Administrasi 30%, Teknik Sistem 20%, dan Lainnya 10%.