Skenario 1

# 1. Persiapan Data (H = Heads, T = Tails)
# Dataset dari slide: 5H5T, 9H1T, 8H2T, 4H6T, 7H3T
heads <- c(5, 9, 8, 4, 7)
tails <- c(5, 1, 2, 6, 3)
n_lemparan <- 10

# 2. Inisialisasi Parameter Awal (Sesuai Tugas: theta_A=0.7, theta_B=0.4)
theta_a <- 0.7
theta_b <- 0.4

# Pengaturan Iterasi
maks_iter <- 20
toleransi <- 1e-6 # Batas konvergensi

cat("Memulai Iterasi EM...\n")
## Memulai Iterasi EM...
cat(sprintf("Iterasi 0: theta_A = %.3f, theta_B = %.3f\n", theta_a, theta_b))
## Iterasi 0: theta_A = 0.700, theta_B = 0.400
for (i in 1:maks_iter) {
  # Simpan nilai lama untuk cek konvergensi
  theta_a_lama <- theta_a
  theta_b_lama <- theta_b
  
  ### E-STEP ###
  # Menghitung probabilitas binomial untuk tiap set (Likelihood)
  # P(E|Z) = nCr * theta^h * (1-theta)^t
  prob_set_a <- dbinom(heads, size = n_lemparan, prob = theta_a)
  prob_set_b <- dbinom(heads, size = n_lemparan, prob = theta_b)
  
  # Menghitung bobot (Posterior/Keyakinan koin mana yang digunakan)
  # Rasio koin A = P(E|A) / (P(E|A) + P(E|B))
  bobot_a <- prob_set_a / (prob_set_a + prob_set_b)
  bobot_b <- 1 - bobot_a
  
  # Estimasi jumlah H dan T untuk tiap koin (Ekspektasi)
  est_h_a <- heads * bobot_a
  est_t_a <- tails * bobot_a
  est_h_b <- heads * bobot_b
  est_t_b <- tails * bobot_b
  
  ### M-STEP ###
  # Memperbarui nilai theta dengan MLE
  theta_a <- sum(est_h_a) / sum(est_h_a + est_t_a)
  theta_b <- sum(est_h_b) / sum(est_h_b + est_t_b)
  
  # Cek Konvergensi (Euclidean Distance atau selisih absolut)
  perubahan <- sqrt((theta_a - theta_a_lama)^2 + (theta_b - theta_b_lama)^2)
  cat(sprintf("Iterasi %d: theta_A = %.4f, theta_B = %.4f, Perubahan = %.6f\n", 
              i, theta_a, theta_b, perubahan))
  
  if (perubahan < toleransi) {
    cat("Algoritma Konvergen!\n")
    break
  }
}
## Iterasi 1: theta_A = 0.7571, theta_B = 0.4759, Perubahan = 0.095004
## Iterasi 2: theta_A = 0.7813, theta_B = 0.5025, Perubahan = 0.035958
## Iterasi 3: theta_A = 0.7908, theta_B = 0.5126, Perubahan = 0.013890
## Iterasi 4: theta_A = 0.7945, theta_B = 0.5167, Perubahan = 0.005486
## Iterasi 5: theta_A = 0.7959, theta_B = 0.5184, Perubahan = 0.002193
## Iterasi 6: theta_A = 0.7964, theta_B = 0.5191, Perubahan = 0.000882
## Iterasi 7: theta_A = 0.7967, theta_B = 0.5194, Perubahan = 0.000356
## Iterasi 8: theta_A = 0.7967, theta_B = 0.5195, Perubahan = 0.000144
## Iterasi 9: theta_A = 0.7968, theta_B = 0.5195, Perubahan = 0.000058
## Iterasi 10: theta_A = 0.7968, theta_B = 0.5196, Perubahan = 0.000024
## Iterasi 11: theta_A = 0.7968, theta_B = 0.5196, Perubahan = 0.000010
## Iterasi 12: theta_A = 0.7968, theta_B = 0.5196, Perubahan = 0.000004
## Iterasi 13: theta_A = 0.7968, theta_B = 0.5196, Perubahan = 0.000002
## Iterasi 14: theta_A = 0.7968, theta_B = 0.5196, Perubahan = 0.000001
## Algoritma Konvergen!
# Hasil Akhir
cat("\n--- HASIL AKHIR ---\n")
## 
## --- HASIL AKHIR ---
cat(sprintf("Theta A: %.4f\n", theta_a))
## Theta A: 0.7968
cat(sprintf("Theta B: %.4f\n", theta_b))
## Theta B: 0.5196

Skenario 2

# 1. Persiapan Data (H = Heads, T = Tails)
# Dataset dari slide: 5H5T, 9H1T, 8H2T, 4H6T, 7H3T
heads <- c(5, 9, 8, 4, 7)
tails <- c(5, 1, 2, 6, 3)
n_lemparan <- 10

# 2. Inisialisasi Parameter Awal (Sesuai Tugas: theta_A=0.7, theta_B=0.4)
theta_a <- 0.4
theta_b <- 0.7

# Pengaturan Iterasi
maks_iter <- 20
toleransi <- 1e-6 # Batas konvergensi

cat("Memulai Iterasi EM...\n")
## Memulai Iterasi EM...
cat(sprintf("Iterasi 0: theta_A = %.3f, theta_B = %.3f\n", theta_a, theta_b))
## Iterasi 0: theta_A = 0.400, theta_B = 0.700
for (i in 1:maks_iter) {
  # Simpan nilai lama untuk cek konvergensi
  theta_a_lama <- theta_a
  theta_b_lama <- theta_b
  
  ### E-STEP ###
  # Menghitung probabilitas binomial untuk tiap set (Likelihood)
  # P(E|Z) = nCr * theta^h * (1-theta)^t
  prob_set_a <- dbinom(heads, size = n_lemparan, prob = theta_a)
  prob_set_b <- dbinom(heads, size = n_lemparan, prob = theta_b)
  
  # Menghitung bobot (Posterior/Keyakinan koin mana yang digunakan)
  # Rasio koin A = P(E|A) / (P(E|A) + P(E|B))
  bobot_a <- prob_set_a / (prob_set_a + prob_set_b)
  bobot_b <- 1 - bobot_a
  
  # Estimasi jumlah H dan T untuk tiap koin (Ekspektasi)
  est_h_a <- heads * bobot_a
  est_t_a <- tails * bobot_a
  est_h_b <- heads * bobot_b
  est_t_b <- tails * bobot_b
  
  ### M-STEP ###
  # Memperbarui nilai theta dengan MLE
  theta_a <- sum(est_h_a) / sum(est_h_a + est_t_a)
  theta_b <- sum(est_h_b) / sum(est_h_b + est_t_b)
  
  # Cek Konvergensi (Euclidean Distance atau selisih absolut)
  perubahan <- sqrt((theta_a - theta_a_lama)^2 + (theta_b - theta_b_lama)^2)
  cat(sprintf("Iterasi %d: theta_A = %.4f, theta_B = %.4f, Perubahan = %.6f\n", 
              i, theta_a, theta_b, perubahan))
  
  if (perubahan < toleransi) {
    cat("Algoritma Konvergen!\n")
    break
  }
}
## Iterasi 1: theta_A = 0.4759, theta_B = 0.7571, Perubahan = 0.095004
## Iterasi 2: theta_A = 0.5025, theta_B = 0.7813, Perubahan = 0.035958
## Iterasi 3: theta_A = 0.5126, theta_B = 0.7908, Perubahan = 0.013890
## Iterasi 4: theta_A = 0.5167, theta_B = 0.7945, Perubahan = 0.005486
## Iterasi 5: theta_A = 0.5184, theta_B = 0.7959, Perubahan = 0.002193
## Iterasi 6: theta_A = 0.5191, theta_B = 0.7964, Perubahan = 0.000882
## Iterasi 7: theta_A = 0.5194, theta_B = 0.7967, Perubahan = 0.000356
## Iterasi 8: theta_A = 0.5195, theta_B = 0.7967, Perubahan = 0.000144
## Iterasi 9: theta_A = 0.5195, theta_B = 0.7968, Perubahan = 0.000058
## Iterasi 10: theta_A = 0.5196, theta_B = 0.7968, Perubahan = 0.000024
## Iterasi 11: theta_A = 0.5196, theta_B = 0.7968, Perubahan = 0.000010
## Iterasi 12: theta_A = 0.5196, theta_B = 0.7968, Perubahan = 0.000004
## Iterasi 13: theta_A = 0.5196, theta_B = 0.7968, Perubahan = 0.000002
## Iterasi 14: theta_A = 0.5196, theta_B = 0.7968, Perubahan = 0.000001
## Algoritma Konvergen!
# Hasil Akhir
cat("\n--- HASIL AKHIR ---\n")
## 
## --- HASIL AKHIR ---
cat(sprintf("Theta A: %.4f\n", theta_a))
## Theta A: 0.5196
cat(sprintf("Theta B: %.4f\n", theta_b))
## Theta B: 0.7968

Skenario 3

# 1. Persiapan Data (H = Heads, T = Tails)
# Dataset dari slide: 5H5T, 9H1T, 8H2T, 4H6T, 7H3T
heads <- c(5, 9, 8, 4, 7)
tails <- c(5, 1, 2, 6, 3)
n_lemparan <- 10

# 2. Inisialisasi Parameter Awal (Sesuai Tugas: theta_A=0.7, theta_B=0.4)
theta_a <- 0.5
theta_b <- 0.5

# Pengaturan Iterasi
maks_iter <- 20
toleransi <- 1e-6 # Batas konvergensi

cat("Memulai Iterasi EM...\n")
## Memulai Iterasi EM...
cat(sprintf("Iterasi 0: theta_A = %.3f, theta_B = %.3f\n", theta_a, theta_b))
## Iterasi 0: theta_A = 0.500, theta_B = 0.500
for (i in 1:maks_iter) {
  # Simpan nilai lama untuk cek konvergensi
  theta_a_lama <- theta_a
  theta_b_lama <- theta_b
  
  ### E-STEP ###
  # Menghitung probabilitas binomial untuk tiap set (Likelihood)
  # P(E|Z) = nCr * theta^h * (1-theta)^t
  prob_set_a <- dbinom(heads, size = n_lemparan, prob = theta_a)
  prob_set_b <- dbinom(heads, size = n_lemparan, prob = theta_b)
  
  # Menghitung bobot (Posterior/Keyakinan koin mana yang digunakan)
  # Rasio koin A = P(E|A) / (P(E|A) + P(E|B))
  bobot_a <- prob_set_a / (prob_set_a + prob_set_b)
  bobot_b <- 1 - bobot_a
  
  # Estimasi jumlah H dan T untuk tiap koin (Ekspektasi)
  est_h_a <- heads * bobot_a
  est_t_a <- tails * bobot_a
  est_h_b <- heads * bobot_b
  est_t_b <- tails * bobot_b
  
  ### M-STEP ###
  # Memperbarui nilai theta dengan MLE
  theta_a <- sum(est_h_a) / sum(est_h_a + est_t_a)
  theta_b <- sum(est_h_b) / sum(est_h_b + est_t_b)
  
  # Cek Konvergensi (Euclidean Distance atau selisih absolut)
  perubahan <- sqrt((theta_a - theta_a_lama)^2 + (theta_b - theta_b_lama)^2)
  cat(sprintf("Iterasi %d: theta_A = %.4f, theta_B = %.4f, Perubahan = %.6f\n", 
              i, theta_a, theta_b, perubahan))
  
  if (perubahan < toleransi) {
    cat("Algoritma Konvergen!\n")
    break
  }
}
## Iterasi 1: theta_A = 0.6600, theta_B = 0.6600, Perubahan = 0.226274
## Iterasi 2: theta_A = 0.6600, theta_B = 0.6600, Perubahan = 0.000000
## Algoritma Konvergen!
# Hasil Akhir
cat("\n--- HASIL AKHIR ---\n")
## 
## --- HASIL AKHIR ---
cat(sprintf("Theta A: %.4f\n", theta_a))
## Theta A: 0.6600
cat(sprintf("Theta B: %.4f\n", theta_b))
## Theta B: 0.6600

Skenario 4

# 1. Persiapan Data (H = Heads, T = Tails)
# Dataset dari slide: 5H5T, 9H1T, 8H2T, 4H6T, 7H3T
heads <- c(5, 9, 8, 4, 7)
tails <- c(5, 1, 2, 6, 3)
n_lemparan <- 10

# 2. Inisialisasi Parameter Awal (Sesuai Tugas: theta_A=0.7, theta_B=0.4)
theta_a <- 0.71
theta_b <- 0.43

# Pengaturan Iterasi
maks_iter <- 20
toleransi <- 1e-6 # Batas konvergensi

cat("Memulai Iterasi EM...\n")
## Memulai Iterasi EM...
cat(sprintf("Iterasi 0: theta_A = %.3f, theta_B = %.3f\n", theta_a, theta_b))
## Iterasi 0: theta_A = 0.710, theta_B = 0.430
for (i in 1:maks_iter) {
  # Simpan nilai lama untuk cek konvergensi
  theta_a_lama <- theta_a
  theta_b_lama <- theta_b
  
  ### E-STEP ###
  # Menghitung probabilitas binomial untuk tiap set (Likelihood)
  # P(E|Z) = nCr * theta^h * (1-theta)^t
  prob_set_a <- dbinom(heads, size = n_lemparan, prob = theta_a)
  prob_set_b <- dbinom(heads, size = n_lemparan, prob = theta_b)
  
  # Menghitung bobot (Posterior/Keyakinan koin mana yang digunakan)
  # Rasio koin A = P(E|A) / (P(E|A) + P(E|B))
  bobot_a <- prob_set_a / (prob_set_a + prob_set_b)
  bobot_b <- 1 - bobot_a
  
  # Estimasi jumlah H dan T untuk tiap koin (Ekspektasi)
  est_h_a <- heads * bobot_a
  est_t_a <- tails * bobot_a
  est_h_b <- heads * bobot_b
  est_t_b <- tails * bobot_b
  
  ### M-STEP ###
  # Memperbarui nilai theta dengan MLE
  theta_a <- sum(est_h_a) / sum(est_h_a + est_t_a)
  theta_b <- sum(est_h_b) / sum(est_h_b + est_t_b)
  
  # Cek Konvergensi (Euclidean Distance atau selisih absolut)
  perubahan <- sqrt((theta_a - theta_a_lama)^2 + (theta_b - theta_b_lama)^2)
  cat(sprintf("Iterasi %d: theta_A = %.4f, theta_B = %.4f, Perubahan = %.6f\n", 
              i, theta_a, theta_b, perubahan))
  
  if (perubahan < toleransi) {
    cat("Algoritma Konvergen!\n")
    break
  }
}
## Iterasi 1: theta_A = 0.7625, theta_B = 0.4874, Perubahan = 0.077731
## Iterasi 2: theta_A = 0.7835, theta_B = 0.5071, Perubahan = 0.028826
## Iterasi 3: theta_A = 0.7917, theta_B = 0.5145, Perubahan = 0.011051
## Iterasi 4: theta_A = 0.7948, theta_B = 0.5175, Perubahan = 0.004337
## Iterasi 5: theta_A = 0.7960, theta_B = 0.5187, Perubahan = 0.001723
## Iterasi 6: theta_A = 0.7965, theta_B = 0.5192, Perubahan = 0.000689
## Iterasi 7: theta_A = 0.7967, theta_B = 0.5194, Perubahan = 0.000277
## Iterasi 8: theta_A = 0.7967, theta_B = 0.5195, Perubahan = 0.000112
## Iterasi 9: theta_A = 0.7968, theta_B = 0.5196, Perubahan = 0.000045
## Iterasi 10: theta_A = 0.7968, theta_B = 0.5196, Perubahan = 0.000018
## Iterasi 11: theta_A = 0.7968, theta_B = 0.5196, Perubahan = 0.000007
## Iterasi 12: theta_A = 0.7968, theta_B = 0.5196, Perubahan = 0.000003
## Iterasi 13: theta_A = 0.7968, theta_B = 0.5196, Perubahan = 0.000001
## Iterasi 14: theta_A = 0.7968, theta_B = 0.5196, Perubahan = 0.000000
## Algoritma Konvergen!
# Hasil Akhir
cat("\n--- HASIL AKHIR ---\n")
## 
## --- HASIL AKHIR ---
cat(sprintf("Theta A: %.4f\n", theta_a))
## Theta A: 0.7968
cat(sprintf("Theta B: %.4f\n", theta_b))
## Theta B: 0.5196

Interpretasi Hasil Simulasi

Pengujian algoritma EM menggunakan dataset lemparan koin (Heads/Tails) dengan empat skenario inisialisasi parameter awal yang berbeda:

  1. Skenario 1 & 4 (Inisialisasi Berbeda dan Asimetris):
  1. Skenario 2 (Inisialisasi Terbalik):
  1. Skenario 3 (Inisialisasi Sama/Identik):

Kesimpulan Akhir

  1. Estimasi Parameter: Nilai optimal untuk parameter koin berdasarkan data yang diberikan adalah 0.7968 (cenderung Heads) dan 0.5196 (mendekati seimbang).

  2. Ketergantungan pada Nilai Awal: Keberhasilan algoritma EM sangat bergantung pada pemilihan nilai awal (initial guess). Jika nilai awal sama, algoritma akan gagal melakukan pengelompokan atau pemisahan data laten.

  3. Stabilitas Algoritma: Selama terdapat perbedaan pada inisialisasi awal, algoritma secara konsisten menuju ke titik optimal yang sama (konvergen) meskipun melalui jumlah iterasi yang berbeda-beda.

  4. Kondisi Konvergensi: Algoritma dinyatakan berhasil ketika “Perubahan” antar iterasi lebih kecil dari batas toleransi (\(1e-6\)), yang dalam simulasi ini rata-rata tercapai dalam 14 iterasi untuk skenario yang valid.