# 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.