1. Input Data Observasi H = jumlah Head T = jumlah Tail
H <- c(5, 9, 8, 4, 7)
T <- c(5, 1, 2, 6, 3)

total <- H + T   # Total lemparan tiap set
  1. Inisialisasi Parameter Awal
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 |       -
  1. Proses Iterasi EM
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
  1. ANALISIS HASIL AKHIR
# 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
)
  1. OUTPUT
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.