# 1. Persiapan Data (5 Dataset sesuai PPT)
# h = jumlah Angka (Heads), t = jumlah Gambar (Tails)
datasets <- list(
  c(h = 5, t = 5),
  c(h = 9, t = 1),
  c(h = 8, t = 2),
  c(h = 4, t = 6),
  c(h = 7, t = 3)
)

# 2. Menentukan Parameter Awal
theta_a <- 0.7
theta_b <- 0.4

# Batas toleransi perubahan (Euclidean Distance) untuk berhenti
toleransi <- 0.0001
max_iter <- 50  # Batas maksimal pengulangan jika tidak kunjung stabil

cat("--- MEMULAI ALGORITMA EM ---\n")
## --- MEMULAI ALGORITMA EM ---
cat(sprintf("Inisialisasi: Theta A = %.2f, Theta B = %.2f\n\n", theta_a, theta_b))
## Inisialisasi: Theta A = 0.70, Theta B = 0.40
# 3. Perulangan EM (E-Step & M-Step digabung dengan Euclidean)
for (i in 1:max_iter) {
  # Simpan nilai lama untuk menghitung jarak Euclidean nanti
  t_a_lama <- theta_a
  t_b_lama <- theta_b
  
  # Tempat akumulasi hasil E-Step
  total_h_a <- 0; total_t_a <- 0
  total_h_b <- 0; total_t_b <- 0
  
  # --- E-STEP ---
  for (d in datasets) {
    h <- d["h"]; t <- d["t"]
    
    # Menghitung Likelihood (Peluang)
    l_a <- (theta_a^h) * ((1 - theta_a)^t)
    l_b <- (theta_b^h) * ((1 - theta_b)^t)
    
    # Menghitung Bobot (Normalisasi)
    w_a <- l_a / (l_a + l_b)
    w_b <- l_b / (l_a + l_b)
    
    # Distribusi H dan T ke masing-masing koin
    total_h_a <- total_h_a + (w_a * h)
    total_t_a <- total_t_a + (w_a * t)
    total_h_b <- total_h_b + (w_b * h)
    total_t_b <- total_t_b + (w_b * t)
  }
  
  # --- M-STEP --- (Update Parameter)
  theta_a <- total_h_a / (total_h_a + total_t_a)
  theta_b <- total_h_b / (total_h_b + total_t_b)
  
  # --- HITUNG EUCLIDEAN DISTANCE (Slide 20) ---
  jarak <- sqrt((theta_a - t_a_lama)^2 + (theta_b - t_b_lama)^2)
  
  # Cetak hasil tiap langkah
  cat(sprintf("Iterasi %d: A=%.4f, B=%.4f | Jarak Euclidean: %.6f\n", 
              i, theta_a, theta_b, jarak))
  
  # Cek Konvergensi
  if (jarak < toleransi) {
    cat("\n[STATUS] Konvergen! Perubahan sudah sangat kecil.\n")
    break
  }
}
## Iterasi 1: A=0.7571, B=0.4759 | Jarak Euclidean: 0.095004
## Iterasi 2: A=0.7813, B=0.5025 | Jarak Euclidean: 0.035958
## Iterasi 3: A=0.7908, B=0.5126 | Jarak Euclidean: 0.013890
## Iterasi 4: A=0.7945, B=0.5167 | Jarak Euclidean: 0.005486
## Iterasi 5: A=0.7959, B=0.5184 | Jarak Euclidean: 0.002193
## Iterasi 6: A=0.7964, B=0.5191 | Jarak Euclidean: 0.000882
## Iterasi 7: A=0.7967, B=0.5194 | Jarak Euclidean: 0.000356
## Iterasi 8: A=0.7967, B=0.5195 | Jarak Euclidean: 0.000144
## Iterasi 9: A=0.7968, B=0.5195 | Jarak Euclidean: 0.000058
## 
## [STATUS] Konvergen! Perubahan sudah sangat kecil.
# 4. Hasil Akhir
cat("\n--- HASIL AKHIR (CONVERGED) ---\n")
## 
## --- HASIL AKHIR (CONVERGED) ---
cat(sprintf("Theta A: %.3f\n", theta_a))
## Theta A: 0.797
cat(sprintf("Theta B: %.3f\n", theta_b))
## Theta B: 0.520

Interpretasi Hasil Per Baris:

- Set 1 (5H5T): Hasilnya sangat seimbang (50:50). Karena hasil akhir \(\theta_B\) adalah 0.520 (mendekati koin adil), maka EM menyimpulkan ini kemungkinan besar koin B.

- Set 2 (9H1T): Sangat banyak muncul Angka (H). Karena \(\theta_A\) akhirnya bernilai 0.796 (koin yang berat sebelah ke Angka), maka EM sangat yakin ini kemungkinan besar koin A.

- Set 3 (8H2T): Masih didominasi Angka. Kesimpulannya: Koin A.

- Set 4 (4H6T): Lebih banyak Gambar (T) daripada Angka. Karena koin B punya peluang Angka lebih rendah (0.520) dibanding koin A (0.796), maka set ini lebih cocok dengan karakteristik Koin B.

- Set 5 (7H3T): Masih condong ke Angka. Kesimpulannya: Koin A.