Persiapan Data & Parameter Awal

# 1. Inisialisasi Data Observasi (H = Head, T = Tail)
h <- c(5, 9, 8, 4, 7)
t <- c(5, 1, 2, 6, 3)
n <- h + t # Total lemparan per set (selalu 10)

# 2. Inisialisasi Parameter Awal
theta_A <- 0.6
theta_B <- 0.7

# Parameter untuk kontrol iterasi
iterasi <- 0
maks_iterasi <- 20
konvergen <- FALSE
epsilon <- 0.0001 # Batas toleransi perubahan (kondisi berhenti)

# Membuat header untuk output tabel
cat("Iterasi | Theta_A | Theta_B | Perubahan\n")
## Iterasi | Theta_A | Theta_B | Perubahan
cat("-----------------------------------------\n")
## -----------------------------------------
cat(sprintf("%7d | %7.4f | %7.4f | %7s\n", iterasi, theta_A, theta_B, "-"))
##       0 |  0.6000 |  0.7000 |       -

Proses Looping Iterasi (E-Step & M-Step)

while(!konvergen && iterasi < maks_iterasi) {
  iterasi <- iterasi + 1
  
  # --- E-STEP ---
  # Menghitung probabilitas observasi E dengan asumsi koin A atau B
  P_E_A <- (theta_A^h) * ((1 - theta_A)^t)
  P_E_B <- (theta_B^h) * ((1 - theta_B)^t)
  
  # Menghitung Rasio Probabilitas (P(Z|E))
  P_ZA_E <- P_E_A / (P_E_A + P_E_B)
  P_ZB_E <- P_E_B / (P_E_A + P_E_B)
  
  # Estimasi jumlah Head (H) untuk setiap koin
  Est_H_A <- h * P_ZA_E
  Est_H_B <- h * P_ZB_E
  
  # --- M-STEP ---
  # Pembaruan parameter theta berdasarkan estimasi H
  theta_A_baru <- sum(Est_H_A) / (10 * sum(P_ZA_E))
  theta_B_baru <- sum(Est_H_B) / (10 * sum(P_ZB_E))
  
  # Menghitung jarak perubahan (Euclidean Distance)
  perubahan <- sqrt((theta_A_baru - theta_A)^2 + (theta_B_baru - theta_B)^2)
  
  # Update nilai untuk iterasi selanjutnya
  theta_A <- theta_A_baru
  theta_B <- theta_B_baru
  
  # Print output per iterasi
  cat(sprintf("%7d | %7.4f | %7.4f | %7.4f\n", iterasi, theta_A, theta_B, perubahan))
  
  # Cek kondisi berhenti
  if(perubahan < epsilon) {
    konvergen <- TRUE
    cat("-----------------------------------------\n")
    cat("Konvergensi tercapai pada iterasi ke-", iterasi, "\n")
  }
}
##       1 |  0.5883 |  0.7289 |  0.0312
##       2 |  0.5660 |  0.7529 |  0.0328
##       3 |  0.5457 |  0.7730 |  0.0285
##       4 |  0.5322 |  0.7858 |  0.0187
##       5 |  0.5251 |  0.7923 |  0.0096
##       6 |  0.5219 |  0.7950 |  0.0042
##       7 |  0.5205 |  0.7961 |  0.0017
##       8 |  0.5200 |  0.7965 |  0.0007
##       9 |  0.5197 |  0.7967 |  0.0003
##      10 |  0.5196 |  0.7968 |  0.0001
##      11 |  0.5196 |  0.7968 |  0.0000
## -----------------------------------------
## Konvergensi tercapai pada iterasi ke- 11

Hasil Analisis

# 1. Kalkulasi ulang probabilitas P(Z|E) menggunakan nilai parameter final
P_E_A_final <- (theta_A^h) * ((1 - theta_A)^t)
P_E_B_final <- (theta_B^h) * ((1 - theta_B)^t)

P_ZA_E_final <- P_E_A_final / (P_E_A_final + P_E_B_final)
P_ZB_E_final <- P_E_B_final / (P_E_A_final + P_E_B_final)

# 2. Penentuan keputusan koin yang dominan
keputusan <- ifelse(P_ZA_E_final > P_ZB_E_final, "Koin A", "Koin B")

# 3. Pembentukan struktur data tabel hasil analisis
tabel_klasifikasi <- data.frame(
  Set = 1:5,
  Observasi = paste0(h, "H ", t, "T"),
  Prob_Koin_A = round(P_ZA_E_final, 3),
  Prob_Koin_B = round(P_ZB_E_final, 3),
  Keputusan = keputusan
)

# 4. Cetak output akhir
cat("\nNilai Konvergensi Parameter:\n")
## 
## Nilai Konvergensi Parameter:
cat(sprintf("Theta A: %.4f\n", theta_A))
## Theta A: 0.5196
cat(sprintf("Theta B: %.4f\n\n", theta_B))
## Theta B: 0.7968
cat("Tabel Klasifikasi Koin:\n")
## Tabel Klasifikasi Koin:
print(tabel_klasifikasi)
##   Set Observasi Prob_Koin_A Prob_Koin_B Keputusan
## 1   1     5H 5T       0.897       0.103    Koin A
## 2   2     9H 1T       0.048       0.952    Koin B
## 3   3     8H 2T       0.155       0.845    Koin B
## 4   4     4H 6T       0.969       0.031    Koin A
## 5   5     7H 3T       0.399       0.601    Koin B