Laporan ini memuat penyelesaian dua bagian tugas pada materi Pertemuan 2 mata kuliah Analisis Data Kategorik:
Data_Proporsi.Data_GOF.Setiap bagian diselesaikan dengan perhitungan manual rinci, verifikasi menggunakan sintaks dan output R, serta kesimpulan yang relevan dengan konteks permasalahan.
Pada bagian ini dianalisis data hasil pasca-tes dari 40 peserta Pelatihan Fundamental Statistika untuk melihat proporsi kelulusan dan menguji apakah tingkat kelulusan aktual berada di bawah target yang ditetapkan perusahaan.
Data dibaca dari file Excel
Data_Simulasi_Tugas_Pertemuan2.xlsx pada sheet
Data_Proporsi.
# Penentuan path dataset
file_path <- if (file.exists("docs/Data_Simulasi_Tugas_Pertemuan2.xlsx")) {
"docs/Data_Simulasi_Tugas_Pertemuan2.xlsx"
} else if (file.exists("Data_Simulasi_Tugas_Pertemuan2.xlsx")) {
"Data_Simulasi_Tugas_Pertemuan2.xlsx"
} else {
file.path("..", "docs", "Data_Simulasi_Tugas_Pertemuan2.xlsx")
}
# Membaca data simulasi kelulusan peserta
data_prop <- read_excel(file_path, sheet = "Data_Proporsi", skip = 4)
data_prop <- data_prop[!is.na(data_prop$Peserta), ]
# Ringkasan frekuensi kategori
tabel_a <- table(data_prop$`Status Kelulusan`)
prop_a <- prop.table(tabel_a)
ringkasan_a <- data.frame(
`Status Kelulusan` = names(tabel_a),
`Frekuensi (n)` = as.numeric(tabel_a),
`Proporsi` = round(as.numeric(prop_a), 4),
`Persentase` = paste0(round(as.numeric(prop_a) * 100, 2), "%"),
check.names = FALSE
)
kable(ringkasan_a, align = "lccc", caption = "Tabel 1. Distribusi Frekuensi Kelulusan Peserta Pelatihan")| Status Kelulusan | Frekuensi (n) | Proporsi | Persentase |
|---|---|---|---|
| Lulus | 29 | 0.725 | 72.5% |
| Tidak Lulus | 11 | 0.275 | 27.5% |
Dari total \(n = 40\) peserta pelatihan:
Proporsi sampel peserta yang lulus dinotasikan dengan \(\hat{p}\):
\[\hat{p} = \frac{x}{n} = \frac{29}{40} = 0{,}725 \quad (72{,}5\%)\]
Proporsi peserta yang tidak lulus adalah:
\[\hat{q} = 1 - \hat{p} = 1 - 0{,}725 = 0{,}275 \quad (27{,}5\%)\]
Untuk mengonstruksi Selang Kepercayaan (SK) 95% bagi proporsi populasi \(p\), metode standar yang digunakan adalah Selang Kepercayaan Wald:
\[SK_{95\%} = \hat{p} \pm Z_{\alpha/2} \cdot SE(\hat{p})\]
Di mana:
\[SE(\hat{p}) = \sqrt{\frac{\hat{p}(1 - \hat{p})}{n}} = \sqrt{\frac{0{,}725 \times 0{,}275}{40}} = \sqrt{\frac{0{,}199375}{40}} = \sqrt{0{,}004984375} \approx 0{,}0706\]
Margin of Error (\(ME\)):
\[ME = Z_{0{,}025} \times SE(\hat{p}) = 1{,}96 \times 0{,}07059996 \approx 0{,}1384\]
Batas selang kepercayaan:
\[\text{Batas Bawah} = \hat{p} - ME = 0{,}725 - 0{,}1384 = 0{,}5866 \quad (58{,}66\%)\]
\[\text{Batas Atas} = \hat{p} + ME = 0{,}725 + 0{,}1384 = 0{,}8634 \quad (86{,}34\%)\]
Jadi, selang kepercayaan 95% metode Wald adalah \([0{,}5866;\ 0{,}8634]\) atau \(58{,}66\%\) sampai \(86{,}34\%\).
Di R, pendugaan selang kepercayaan untuk satu proporsi dapat dihitung
menggunakan fungsi binom.test() (metode eksak
Clopper-Pearson) serta fungsi prop.test() (metode Wilson
Score).
n <- nrow(data_prop)
x <- sum(data_prop$`Status Kelulusan` == "Lulus")
p_hat <- x / n
# Perhitungan manual Wald
se_wald <- sqrt(p_hat * (1 - p_hat) / n)
me_wald <- qnorm(0.975) * se_wald
ci_wald <- c(p_hat - me_wald, p_hat + me_wald)
# Clopper-Pearson Exact CI via binom.test
ci_exact <- binom.test(x, n, conf.level = 0.95)$conf.int
# Wilson Score CI via prop.test (tanpa dan dengan continuity correction)
ci_wilson_nocc <- prop.test(x, n, conf.level = 0.95, correct = FALSE)$conf.int
ci_wilson_cc <- prop.test(x, n, conf.level = 0.95, correct = TRUE)$conf.int
# Rangkuman perbandingan selang kepercayaan
tabel_ci <- data.frame(
Metode = c("Wald (Asimtotik Normal)", "Wilson Score (tanpa koreksi)",
"Wilson Score (dengan koreksi)", "Clopper-Pearson (Eksak)"),
`Batas Bawah` = round(c(ci_wald[1], ci_wilson_nocc[1], ci_wilson_cc[1], ci_exact[1]), 4),
`Batas Atas` = round(c(ci_wald[2], ci_wilson_nocc[2], ci_wilson_cc[2], ci_exact[2]), 4),
`Panjang Selang` = round(c(diff(ci_wald), diff(ci_wilson_nocc), diff(ci_wilson_cc), diff(ci_exact)), 4),
check.names = FALSE
)
kable(tabel_ci, align = "lccc", caption = "Tabel 2. Perbandingan Selang Kepercayaan 95% Proporsi Kelulusan")| Metode | Batas Bawah | Batas Atas | Panjang Selang |
|---|---|---|---|
| Wald (Asimtotik Normal) | 0.5866 | 0.8634 | 0.2767 |
| Wilson Score (tanpa koreksi) | 0.5717 | 0.8389 | 0.2673 |
| Wilson Score (dengan koreksi) | 0.5586 | 0.8486 | 0.2900 |
| Clopper-Pearson (Eksak) | 0.5611 | 0.8540 | 0.2929 |
##
## Exact binomial test
##
## data: x and n
## number of successes = 29, number of trials = 40, p-value = 0.006427
## alternative hypothesis: true probability of success is not equal to 0.5
## 95 percent confidence interval:
## 0.5611171 0.8539910
## sample estimates:
## probability of success
## 0.725
Proporsi kelulusan pada sampel adalah 72,5%. Dengan tingkat kepercayaan 95%, proporsi sebenarnya dari seluruh peserta pelatihan yang lulus berada di rentang antara 58,66% hingga 86,34% (metode Wald), atau 56,11% hingga 85,40% jika menggunakan pendekatan eksak Clopper-Pearson. Rentang ini masih mencakup nilai target 80% (0,80).
Perusahaan menargetkan tingkat kelulusan minimal 80%, sehingga nilai acuan hipotesis adalah \(p_0 = 0{,}80\).
Untuk menguji hipotesis satu proporsi dengan pendekatan normal (Uji Z), distribusi sampling dari \(\hat{p}\) didekati dengan distribusi normal baku di bawah kondisi hipotesis nol. Syarat kecukupan sampel yang umum digunakan dalam literatur statistika (misalnya Agresti, 2013) mensyaratkan bahwa frekuensi harapan untuk kedua kemungkinan hasil (sukses dan gagal) di bawah \(H_0\) memenuhi aturan:
\[n \cdot p_0 \ge 10 \quad \text{dan} \quad n \cdot (1 - p_0) \ge 10\]
Mari kita periksa nilai-nilai tersebut dengan \(n = 40\) dan \(p_0 = 0{,}80\):
Jumlah sukses yang diharapkan di bawah \(H_0\): \[n \cdot p_0 = 40 \times 0{,}80 = 32 \ge 10 \quad \text{(Terpenuhi)}\]
Jumlah gagal yang diharapkan di bawah \(H_0\): \[n \cdot (1 - p_0) = 40 \times (1 - 0{,}80) = 40 \times 0{,}20 = 8 < 10 \quad \mathbf{(Tidak\ Terpenuhi)}\]
p0 <- 0.80
exp_sukses <- n * p0
exp_gagal <- n * (1 - p0)
cat("Pemeriksaan di bawah H0 (p0 = 0.80):\n")## Pemeriksaan di bawah H0 (p0 = 0.80):
cat("n * p0 =", exp_sukses, "->", ifelse(exp_sukses >= 10, ">= 10 (Memenuhi)", "< 10 (Tidak Memenuhi)"), "\n")## n * p0 = 32 -> >= 10 (Memenuhi)
cat("n * (1 - p0) =", exp_gagal, "->", ifelse(exp_gagal >= 10, ">= 10 (Memenuhi)", "< 10 (Tidak Memenuhi)"), "\n")## n * (1 - p0) = 8 -> < 10 (Tidak Memenuhi)
Evaluasi syarat:
Uji dilakukan untuk membuktikan apakah tingkat kelulusan aktual berada di bawah target 80%. Oleh karena itu, pengujian bersifat satu arah (sisi kiri / left-tailed test):
Karena syarat \(n(1 - p_0) \ge 10\) tidak terpenuhi, pengujian utama yang dipilih adalah Uji Eksak Binomial.
Misalkan \(X\) adalah variabel acak yang menyatakan banyaknya peserta yang lulus dari \(n = 40\) peserta. Di bawah \(H_0\), \(X\) berdistribusi Binomial dengan parameter \(n = 40\) dan \(p = 0{,}80\):
\[X \sim \text{Binomial}(n = 40,\ p = 0{,}80)\]
Dari sampel amatan, diperoleh \(x = 29\). Nilai p-value untuk uji satu arah sisi kiri dihitung sebagai peluang kumulatif memperoleh paling banyak 29 peserta lulus di bawah \(H_0\):
\[p\text{-value} = P(X \le 29 \mid n = 40,\ p = 0{,}80) = \sum_{k=0}^{29} \binom{40}{k} (0{,}80)^k (0{,}20)^{40-k}\]
Untuk mempermudah perhitungan manual, kita gunakan aturan komplemen dari total peluang distribusi binomial:
\[P(X \le 29) = 1 - P(X \ge 30) = 1 - \sum_{k=30}^{40} \binom{40}{k} (0{,}80)^k (0{,}20)^{40-k}\]
Nilai peluang untuk masing-masing titik \(k = 30\) hingga \(k = 40\):
k_vals <- 30:40
prob_k <- dbinom(k_vals, size = 40, prob = 0.80)
tabel_prob_k <- data.frame(
k = k_vals,
`P(X = k)` = round(prob_k, 6),
check.names = FALSE
)
kable(tabel_prob_k, align = "cc", caption = "Tabel 3. Peluang Titik Binomial(40, 0.80) untuk k = 30 s.d. 40")| k | P(X = k) |
|---|---|
| 30 | 0.107454 |
| 31 | 0.138650 |
| 32 | 0.155981 |
| 33 | 0.151255 |
| 34 | 0.124563 |
| 35 | 0.085414 |
| 36 | 0.047452 |
| 37 | 0.020520 |
| 38 | 0.006480 |
| 39 | 0.001329 |
| 40 | 0.000133 |
Jumlah peluang untuk \(k \ge 30\):
\[\sum_{k=30}^{40} P(X = k) = 0{,}107454 + 0{,}138650 + \dots + 0{,}000133 \approx 0{,}839231\]
Maka nilai p-value eksak adalah:
\[p\text{-value} = 1 - 0{,}839231 = \mathbf{0{,}1608} \quad (16{,}08\%)\]
# Verifikasi Uji Eksak Binomial satu arah kiri
uji_eksak <- binom.test(x = 29, n = 40, p = 0.80, alternative = "less", conf.level = 0.95)
uji_eksak##
## Exact binomial test
##
## data: 29 and 40
## number of successes = 29, number of trials = 40, p-value = 0.1608
## alternative hypothesis: true probability of success is less than 0.8
## 95 percent confidence interval:
## 0.0000000 0.8374785
## sample estimates:
## probability of success
## 0.725
Output R menunjukkan:
number of successes = 29number of trials = 40p-value = 0.1608alternative hypothesis: true probability of success is less than 0.8Sebagai perbandingan terhadap Uji Eksak Binomial, berikut perhitungan Uji Z Satu Proporsi.
\[SE_0 = \sqrt{\frac{p_0(1 - p_0)}{n}} = \sqrt{\frac{0{,}80 \times 0{,}20}{40}} = \sqrt{\frac{0{,}16}{40}} = \sqrt{0{,}004} \approx 0{,}063246\]
\[Z = \frac{\hat{p} - p_0}{SE_0} = \frac{0{,}725 - 0{,}80}{0{,}06324555} = \frac{-0{,}075}{0{,}06324555} \approx -1{,}1859\]
\[p\text{-value} = P(Z \le -1{,}1859) \approx 0{,}1178\]
\[Z_{cc} = \frac{\hat{p} + \frac{1}{2n} - p_0}{SE_0} = \frac{0{,}725 + 0{,}0125 - 0{,}80}{0{,}06324555} = \frac{-0{,}0625}{0{,}06324555} \approx -0{,}9882\]
prop.test).\[p\text{-value} = P(Z \le -0{,}9882) \approx 0{,}1615\]
Perhatikan bahwa p-value Uji Z dengan koreksi kontinuit (\(0{,}1615\)) sangat dekat dengan p-value Uji Eksak Binomial (\(0{,}1608\)).
# prop.test dengan koreksi kontinuitas (default R)
prop.test(x = 29, n = 40, p = 0.80, alternative = "less", correct = TRUE)##
## 1-sample proportions test with continuity correction
##
## data: 29 out of 40, null probability 0.8
## X-squared = 0.97656, df = 1, p-value = 0.1615
## alternative hypothesis: true p is less than 0.8
## 95 percent confidence interval:
## 0.0000000 0.8342177
## sample estimates:
## p
## 0.725
# prop.test tanpa koreksi kontinuitas
prop.test(x = 29, n = 40, p = 0.80, alternative = "less", 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
Baik Uji Eksak Binomial (\(p = 0{,}1608\)) maupun Uji Z Proporsi (\(p = 0{,}1178\) tanpa koreksi, \(p = 0{,}1615\) dengan koreksi) sama-sama menghasilkan \(p\text{-value} > 0{,}05\).
Berdasarkan hasil pengujian pada tingkat signifikansi \(\alpha = 0{,}05\), nilai p-value dari Uji Eksak Binomial adalah \(0{,}1608\), yang lebih besar dari \(0{,}05\). Dengan demikian, \(H_0\) tidak ditolak.
Secara kontekstual, data dari sampel 40 peserta ini belum memberikan bukti statistik yang cukup untuk menyatakan bahwa tingkat kelulusan aktual pelatihan berada di bawah target minimal 80%. Meskipun secara amatan proporsi kelulusan hanya mencapai 72,5%, selisih tersebut belum signifikan secara statistik dan masih wajar terjadi karena keragaman pengambilan sampel acak.
Bagian ini bertujuan untuk menguji apakah sebaran jenis pertanyaan layanan akademik yang masuk ke Program Studi Statistika selama satu semester terakhir masih konsisten dengan proporsi historis tahun sebelumnya.
Data diambil dari sheet Data_GOF pada file
Data_Simulasi_Tugas_Pertemuan2.xlsx.
# Membaca data sheet Data_GOF (4 kategori utama)
data_gof <- read_excel(file_path, sheet = "Data_GOF", skip = 5)
data_gof <- data_gof[1:4, ]
colnames(data_gof) <- c("Kategori", "Proporsi_Historis", "Frekuensi_Observasi")
# Total sampel amatan
N_total <- sum(data_gof$Frekuensi_Observasi)
tabel_ringkas_b <- data_gof
tabel_ringkas_b$Proporsi_Sampel <- round(tabel_ringkas_b$Frekuensi_Observasi / N_total, 4)
kable(tabel_ringkas_b, align = "lccc",
caption = "Tabel 4. Data Observasi dan Proporsi Historis Jenis Pertanyaan Layanan Akademik")| Kategori | Proporsi_Historis | Frekuensi_Observasi | Proporsi_Sampel |
|---|---|---|---|
| Akademik | 0.4 | 70 | 0.4667 |
| Administrasi | 0.3 | 40 | 0.2667 |
| Teknis Sistem | 0.2 | 25 | 0.1667 |
| Lainnya | 0.1 | 15 | 0.1000 |
Total frekuensi observasi adalah \(N = 70 + 40 + 25 + 15 = 150\) pertanyaan.
Uji Kebaikan Suai Chi-Square digunakan untuk menguji kesesuaian antara distribusi peluang multinomial amatan dengan distribusi acuan historis.
Hipotesis Nol (\(H_0\)): Distribusi jenis pertanyaan layanan akademik saat ini masih sesuai dengan proporsi historis. \[H_0: p_1 = 0{,}40;\ p_2 = 0{,}30;\ p_3 = 0{,}20;\ p_4 = 0{,}10\]
Hipotesis Alternatif (\(H_1\)): Distribusi jenis pertanyaan layanan akademik saat ini tidak sesuai dengan proporsi historis (setidaknya ada satu kategori \(i\) dengan \(p_i \neq p_{0,i}\)).
Tingkat signifikansi: \(\alpha = 0{,}05\).
Nilai harapan (\(E_i\)) untuk setiap kategori dihitung dengan mengalikan total amatan (\(N\)) dengan proporsi teoritis di bawah \(H_0\) (\(p_{0,i}\)):
\[E_i = N \times p_{0,i}\]
Dengan total amatan \(N = 150\):
Kategori Akademik: \[E_1 = 150 \times 0{,}40 = 60\]
Kategori Administrasi: \[E_2 = 150 \times 0{,}30 = 45\]
Kategori Teknis Sistem: \[E_3 = 150 \times 0{,}20 = 30\]
Kategori Lainnya: \[E_4 = 150 \times 0{,}10 = 15\]
Total nilai harapan adalah \(60 + 45 + 30 + 15 = 150 = N\).
Pemeriksaan Syarat Uji Chi-Square: Syarat kelayakan uji Chi-Square mensyaratkan tidak ada nilai harapan \(E_i < 1\) dan tidak lebih dari 20% kategori yang memiliki \(E_i < 5\) (umumnya semua \(E_i \ge 5\)). Pada data ini, nilai harapan terkecil adalah \(E_4 = 15 \ge 5\), sehingga syarat uji Chi-Square terpenuhi dengan sangat baik.
Rumus statistik uji Chi-Square Kebaikan Suai (Goodness-of-Fit):
\[\chi^2 = \sum_{i=1}^{k} \frac{(O_i - E_i)^2}{E_i}\]
Berikut rincian perhitungan kontribusi setiap kategori:
Akademik: \[\frac{(O_1 - E_1)^2}{E_1} = \frac{(70 - 60)^2}{60} = \frac{10^2}{60} = \frac{100}{60} = \frac{5}{3} \approx 1{,}6667\]
Administrasi: \[\frac{(O_2 - E_2)^2}{E_2} = \frac{(40 - 45)^2}{45} = \frac{(-5)^2}{45} = \frac{25}{45} = \frac{5}{9} \approx 0{,}5556\]
Teknis Sistem: \[\frac{(O_3 - E_3)^2}{E_3} = \frac{(25 - 30)^2}{30} = \frac{(-5)^2}{30} = \frac{25}{30} = \frac{5}{6} \approx 0{,}8333\]
Lainnya: \[\frac{(O_4 - E_4)^2}{E_4} = \frac{(15 - 15)^2}{15} = \frac{0^2}{15} = \frac{0}{15} = 0{,}0000\]
Jumlah seluruh kontribusi:
\[\chi^2 = \frac{5}{3} + \frac{5}{9} + \frac{5}{6} + 0 = \frac{30 + 10 + 15}{18} = \frac{55}{18} \approx \mathbf{3{,}0556}\]
obs <- data_gof$Frekuensi_Observasi
p_0 <- data_gof$Proporsi_Historis
exp_val <- N_total * p_0
selisih <- obs - exp_val
selisih_kuadrat <- selisih^2
komponen_chi <- selisih_kuadrat / exp_val
tabel_detail_chi <- data.frame(
Kategori = data_gof$Kategori,
`p_0` = p_0,
`O_i` = obs,
`E_i` = exp_val,
`O_i - E_i` = selisih,
`(O_i - E_i)^2` = selisih_kuadrat,
`(O_i - E_i)^2 / E_i` = round(komponen_chi, 4),
check.names = FALSE
)
# Menambahkan baris Total
baris_total <- data.frame(
Kategori = "Total",
`p_0` = sum(p_0),
`O_i` = sum(obs),
`E_i` = sum(exp_val),
`O_i - E_i` = sum(selisih),
`(O_i - E_i)^2` = "-",
`(O_i - E_i)^2 / E_i` = round(sum(komponen_chi), 4),
check.names = FALSE
)
tabel_lengkap_chi <- rbind(tabel_detail_chi, baris_total)
kable(tabel_lengkap_chi, align = "lcccccc", caption = "Tabel 5. Perhitungan Rinci Statistik Uji Chi-Square Goodness-of-Fit")| Kategori | p_0 | O_i | E_i | O_i - E_i | (O_i - E_i)^2 | (O_i - E_i)^2 / E_i |
|---|---|---|---|---|---|---|
| Akademik | 0.4 | 70 | 60 | 10 | 100 | 1.6667 |
| Administrasi | 0.3 | 40 | 45 | -5 | 25 | 0.5556 |
| Teknis Sistem | 0.2 | 25 | 30 | -5 | 25 | 0.8333 |
| Lainnya | 0.1 | 15 | 15 | 0 | 0 | 0.0000 |
| Total | 1.0 | 150 | 150 | 0 | - | 3.0556 |
chisq.test())Berikut verifikasi perhitungan menggunakan fungsi bawaan R
chisq.test().
##
## Chi-squared test for given probabilities
##
## data: obs
## X-squared = 3.0556, df = 3, p-value = 0.3831
Dari hasil verifikasi R diperoleh:
X-squared = 3.0556df = 3p-value = 0.3831Kita juga dapat melihat nilai harapan dan residu dari objek hasil uji R:
## Nilai Harapan (Expected):
## [1] 60 45 30 15
##
## Residu Pearson (O - E) / sqrt(E):
## [1] 1.2910 -0.7454 -0.9129 0.0000
Hasil verifikasi R sama persis dengan seluruh perhitungan manual:
Karena nilai statistik uji \(\chi^2_{hitung} = 3{,}0556\) lebih kecil dari nilai kritis \(\chi^2_{0{,}05;\ 3} = 7{,}8147\), dan nilai p-value sebesar \(0{,}3831\) jauh lebih besar dari tingkat signifikansi \(\alpha = 0{,}05\), maka \(H_0\) tidak ditolak.
Secara kontekstual, data amatan selama satu semester ini belum memberikan bukti yang cukup untuk menyatakan adanya pergeseran pola pada layanan akademik Prodi Statistika. Dengan kata lain, distribusi jenis pertanyaan layanan akademik saat ini masih konsisten dengan proporsi historis tahun sebelumnya (40% Akademik, 30% Administrasi, 20% Teknis Sistem, dan 10% Lainnya).