H <- c(5, 9, 8, 4, 7)
T <- c(5, 1, 2, 6, 3)
total <- H + T # Total lemparan tiap set
theta_A <- 0.7
theta_B <- 0.4
# Parameter kontrol iterasi
iterasi <- 0
maks_iterasi <- 20
toleransi <- 0.0001
status_konvergen <- FALSE
# Header output
cat("========================================\n")
## ========================================
cat("Iterasi | Theta_A | Theta_B | Selisih\n")
## Iterasi | Theta_A | Theta_B | Selisih
cat("========================================\n")
## ========================================
cat(sprintf("%7d | %7.4f | %7.4f | %7s\n",
iterasi, theta_A, theta_B, "-"))
## 0 | 0.7000 | 0.4000 | -
while(!status_konvergen && iterasi < maks_iterasi){
iterasi <- iterasi + 1
# ======
# E-STEP
# ======
# Probabilitas observasi jika menggunakan koin A
peluang_A <- (theta_A^H) * ((1 - theta_A)^T)
# Probabilitas observasi jika menggunakan koin B
peluang_B <- (theta_B^H) * ((1 - theta_B)^T)
# Posterior probability
bobot_A <- peluang_A / (peluang_A + peluang_B)
bobot_B <- peluang_B / (peluang_A + peluang_B)
# Estimasi jumlah Head
estimasi_H_A <- H * bobot_A
estimasi_H_B <- H * bobot_B
# ======
# M-STEP
# ======
theta_A_baru <- sum(estimasi_H_A) / sum(total * bobot_A)
theta_B_baru <- sum(estimasi_H_B) / sum(total * bobot_B)
# Menghitung perubahan parameter
perubahan <- sqrt((theta_A_baru - theta_A)^2 +
(theta_B_baru - theta_B)^2)
# Update parameter
theta_A <- theta_A_baru
theta_B <- theta_B_baru
# Tampilkan hasil iterasi
cat(sprintf("%7d | %7.4f | %7.4f | %7.4f\n",
iterasi, theta_A, theta_B, perubahan))
# Kondisi berhenti
if(perubahan < toleransi){
status_konvergen <- TRUE
cat("===========================================\n")
cat("Konvergen pada iterasi ke-", iterasi, "\n")
}
}
## 1 | 0.7571 | 0.4759 | 0.0950
## 2 | 0.7813 | 0.5025 | 0.0360
## 3 | 0.7908 | 0.5126 | 0.0139
## 4 | 0.7945 | 0.5167 | 0.0055
## 5 | 0.7959 | 0.5184 | 0.0022
## 6 | 0.7964 | 0.5191 | 0.0009
## 7 | 0.7967 | 0.5194 | 0.0004
## 8 | 0.7967 | 0.5195 | 0.0001
## 9 | 0.7968 | 0.5195 | 0.0001
## ===========================================
## Konvergen pada iterasi ke- 9
# Menghitung probabilitas akhir menggunakan parameter final
prob_final_A <- (theta_A^H) * ((1 - theta_A)^T)
prob_final_B <- (theta_B^H) * ((1 - theta_B)^T)
# Probabilitas posterior
posterior_A <- prob_final_A / (prob_final_A + prob_final_B)
posterior_B <- prob_final_B / (prob_final_A + prob_final_B)
# Menentukan klasifikasi koin
hasil_koin <- ifelse(posterior_A > posterior_B,
"Koin A",
"Koin B")
# Membuat tabel hasil
hasil_EM <- data.frame(
Set = 1:5,
Observasi = paste(H, "H", T, "T"),
Prob_Koin_A = round(posterior_A, 3),
Prob_Koin_B = round(posterior_B, 3),
Keputusan = hasil_koin
)
cat("\n")
cat("===============================\n")
## ===============================
cat("HASIL KONVERGENSI PARAMETER\n")
## HASIL KONVERGENSI PARAMETER
cat("===============================\n")
## ===============================
cat(sprintf("Theta A : %.4f\n", theta_A))
## Theta A : 0.7968
cat(sprintf("Theta B : %.4f\n", theta_B))
## Theta B : 0.5195
cat("\n")
cat("====================================================\n")
## ====================================================
cat("TABEL KLASIFIKASI HASIL EM\n")
## TABEL KLASIFIKASI HASIL EM
cat("====================================================\n")
## ====================================================
print(hasil_EM)
## Set Observasi Prob_Koin_A Prob_Koin_B Keputusan
## 1 1 5 H 5 T 0.103 0.897 Koin B
## 2 2 9 H 1 T 0.952 0.048 Koin A
## 3 3 8 H 2 T 0.846 0.154 Koin A
## 4 4 4 H 6 T 0.031 0.969 Koin B
## 5 5 7 H 3 T 0.602 0.398 Koin A
Pada percobaan ini digunakan parameter awal:
θA = 0.7 θB = 0.4
Proses Expectation-Maximization (EM) dilakukan secara iteratif untuk mengestimasi probabilitas munculnya Head pada masing-masing koin. Berdasarkan hasil iterasi, algoritma mencapai kondisi konvergen pada iterasi ke-9 dengan nilai parameter akhir:
Theta A = 0.7968 Theta B = 0.5195
Hasil tersebut menunjukkan bahwa koin A memiliki probabilitas muncul Head yang lebih tinggi dibandingkan koin B. Nilai θA yang mendekati 0.8 menunjukkan bahwa koin A cenderung menghasilkan Head sekitar 79.68%, sedangkan koin B memiliki probabilitas Head sekitar 51.95% sehingga lebih mendekati koin seimbang.
Berdasarkan tabel klasifikasi hasil EM:
Set dengan jumlah Head tinggi seperti 9H1T dan 8H2T memiliki probabilitas lebih besar berasal dari Koin A. Set dengan hasil lebih seimbang atau lebih banyak Tail seperti 5H5T dan 4H6T lebih cenderung berasal dari Koin B. Observasi 7H3T juga lebih dominan diklasifikasikan sebagai Koin A karena memiliki jumlah Head yang cukup tinggi.
Selain itu, nilai perubahan parameter pada setiap iterasi semakin kecil hingga mendekati nol. Hal ini menunjukkan bahwa algoritma EM berhasil mencapai konvergensi dan parameter yang diperoleh sudah stabil. Dari percobaan ini dapat disimpulkan bahwa perubahan parameter awal tetap menghasilkan pola estimasi yang konsisten, yaitu koin dengan probabilitas Head lebih besar akan menangani observasi dengan jumlah Head dominan.