# ======================================
# Algoritma EM untuk estimasi theta A B
# ======================================


# Data percobaan

H <- c(5,9,8,4,7)
T <- c(5,1,2,6,3)


# Parameter awal

theta_A <- 0.8
theta_B <- 0.3


# maksimum iterasi

max_iter <- 20


# menyimpan hasil

hasil <- data.frame(
  Iterasi = integer(),
  Theta_A = numeric(),
  Theta_B = numeric()
)



for(iter in 1:max_iter){
  
  
  # =================
  # E-Step
  # =================
  
  
  prob_A <- theta_A^H * (1-theta_A)^T
  
  prob_B <- theta_B^H * (1-theta_B)^T
  
  
  wA <- prob_A/(prob_A+prob_B)
  
  wB <- prob_B/(prob_A+prob_B)
  
  
  
  # =================
  # M-Step
  # =================
  
  
  H_A <- sum(wA*H)
  T_A <- sum(wA*T)
  
  
  H_B <- sum(wB*H)
  T_B <- sum(wB*T)
  
  
  theta_A_new <- H_A/(H_A+T_A)
  
  theta_B_new <- H_B/(H_B+T_B)
  
  
  
  hasil <- rbind(
    hasil,
    data.frame(
      Iterasi = iter,
      Theta_A = theta_A_new,
      Theta_B = theta_B_new
    )
  )
  
  
  
  # cek konvergensi
  
  if(abs(theta_A_new-theta_A)<0.0001 &&
     abs(theta_B_new-theta_B)<0.0001){
    
    theta_A <- theta_A_new
    theta_B <- theta_B_new
    
    break
  }
  
  
  theta_A <- theta_A_new
  theta_B <- theta_B_new
  
}



# hasil iterasi

hasil
##   Iterasi   Theta_A   Theta_B
## 1       1 0.7787091 0.4520490
## 2       2 0.7882281 0.4923334
## 3       3 0.7931977 0.5083972
## 4       4 0.7953350 0.5149843
## 5       5 0.7962079 0.5176929
## 6       6 0.7965578 0.5188065
## 7       7 0.7966972 0.5192641
## 8       8 0.7967525 0.5194521
## 9       9 0.7967745 0.5195293
# parameter akhir

cat(
  "Theta A akhir =",
  theta_A,
  "\n"
)
## Theta A akhir = 0.7967745
cat(
  "Theta B akhir =",
  theta_B,
  "\n"
)
## Theta B akhir = 0.5195293

Berdasarkan hasil simulasi algoritma Expectation-Maximization (EM), parameter awal yang digunakan adalah θA = 0.8 dan θB = 0.3. Setelah dilakukan proses iterasi antara E-Step dan M-Step, diperoleh estimasi akhir:

Hasil tersebut menunjukkan bahwa algoritma EM berhasil melakukan pembaruan parameter berdasarkan pola data yang diamati. Nilai θA mengalami perubahan kecil dari nilai awal 0.8, sedangkan θB mengalami perubahan yang lebih besar dari 0.3 menjadi sekitar 0.52.

Perubahan ini terjadi karena pada tahap E-Step, setiap data diberikan bobot probabilitas apakah lebih mungkin berasal dari distribusi A atau distribusi B. Selanjutnya pada tahap M-Step, bobot tersebut digunakan untuk memperbarui estimasi parameter.

Meskipun nilai awal θA dan θB berbeda, algoritma tetap bergerak menuju nilai parameter yang lebih sesuai dengan data. Hal ini menunjukkan bahwa EM dapat menemukan estimasi parameter yang memaksimalkan likelihood data melalui proses iterasi.