# Data
obs <- matrix(c(5, 5, 9, 1, 8, 2, 4, 6, 7, 3), nrow = 5, byrow = TRUE)
colnames(obs) <- c("H", "T")
# Parameter Awal
theta <- list(a = 0.7, b = 0.6)
tol <- 1e-5
e_step <- function(data, params) {
likelihood_a <- (params$a^data[, "H"]) * ((1 - params$a)^data[, "T"])
likelihood_b <- (params$b^data[, "H"]) * ((1 - params$b)^data[, "T"])
weight_a <- likelihood_a / (likelihood_a + likelihood_b)
weight_b <- 1 - weight_a
return(list(w_a = weight_a, w_b = weight_b))
}
m_step <- function(data, weights) {
new_h_a <- sum(weights$w_a * data[, "H"])
new_t_a <- sum(weights$w_a * data[, "T"])
new_h_b <- sum(weights$w_b * data[, "H"])
new_t_b <- sum(weights$w_b * data[, "T"])
new_theta_a <- new_h_a / (new_h_a + new_t_a)
new_theta_b <- new_h_b / (new_h_b + new_t_b)
return(list(a = new_theta_a, b = new_theta_b))
}
for (i in 1:100) {
old_theta <- theta
iterasi_terakhir <- i
step_e_results <- e_step(obs, theta)
theta <- m_step(obs, step_e_results)
cat(sprintf("Iterasi %d: Theta A = %.6f, Theta B = %.6f\n", i, theta$a, theta$b))
# Cek Konvergensi
if (abs(theta$a - old_theta$a) < tol && abs(theta$b - old_theta$b) < tol) {
cat
break
}
}
## Iterasi 1: Theta A = 0.728914, Theta B = 0.588287
## Iterasi 2: Theta A = 0.752940, Theta B = 0.566029
## Iterasi 3: Theta A = 0.773011, Theta B = 0.545728
## Iterasi 4: Theta A = 0.785848, Theta B = 0.532177
## Iterasi 5: Theta A = 0.792276, Theta B = 0.525075
## Iterasi 6: Theta A = 0.795031, Theta B = 0.521864
## Iterasi 7: Theta A = 0.796122, Theta B = 0.520512
## Iterasi 8: Theta A = 0.796539, Theta B = 0.519959
## Iterasi 9: Theta A = 0.796696, Theta B = 0.519735
## Iterasi 10: Theta A = 0.796754, Theta B = 0.519644
## Iterasi 11: Theta A = 0.796776, Theta B = 0.519608
## Iterasi 12: Theta A = 0.796784, Theta B = 0.519593
## Iterasi 13: Theta A = 0.796787, Theta B = 0.519587
cat(sprintf("Total Iterasi : %d\n", iterasi_terakhir))
## Total Iterasi : 13
cat(sprintf("Final Theta A : %.6f\n", theta$a))
## Final Theta A : 0.796787
cat(sprintf("Final Theta B : %.6f\n", theta$b))
## Final Theta B : 0.519587
Berdasarkan perhitungan menggunakan algoritma EM, maka didapat theta A (0.796) dan theta B (0.519).
Dari hasil theta yang didapat, maka setiap set dapat diklasifikasikan untuk menebak koin mana yang paling mungkin:
Set 1: 5H 5T -> Kemungkinan besar koin B (hasilnya seimbang)
Set 2: 9H 1T -> Kemungkinan besar koin A (Hasil H jauh lebih banyak)
Set 3: 8H 2T -> Kemungkinan besar koin A (Hasil H lebih mendominasi)
Set 4: 4H 6T -> Kemungkinan besar koin B (Hasilnya relatif seimbang)
Set 5: 7H 3T -> Kemungkinan besar koin A (Hasil H lebih mendominasi)