H <- c(5, 9, 8, 4, 7)
T <- c(5, 1, 2, 6, 3)
# Parameter awal
theta_A <- 0.6
theta_B <- 0.5
tolerance <- 0.001
max_iter <- 100
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)
weight_A <- prob_A / (prob_A + prob_B)
weight_B <- prob_B / (prob_A + prob_B)
H_A <- sum(weight_A * H)
T_A <- sum(weight_A * T)
H_B <- sum(weight_B * H)
T_B <- sum(weight_B * T)
# M-Step
theta_A_new <- H_A / (H_A + T_A)
theta_B_new <- H_B / (H_B + T_B)
# Euclidean Distance
distance <- sqrt((theta_A - theta_A_new)^2 +
(theta_B - theta_B_new)^2)
# Output iterasi
cat("Iterasi:", iter, "\n")
cat("Theta A =", round(theta_A_new, 3), "\n")
cat("Theta B =", round(theta_B_new, 3), "\n")
cat("Perubahan =", round(distance, 4), "\n\n")
# Cek konvergensi
if(distance < tolerance){
cat("Konvergen pada iterasi ke-", iter, "\n")
break
}
# Update parameter
theta_A <- theta_A_new
theta_B <- theta_B_new
}
## Iterasi: 1
## Theta A = 0.713
## Theta B = 0.581
## Perubahan = 0.1392
##
## Iterasi: 2
## Theta A = 0.745
## Theta B = 0.569
## Perubahan = 0.0345
##
## Iterasi: 3
## Theta A = 0.768
## Theta B = 0.55
## Perubahan = 0.0301
##
## Iterasi: 4
## Theta A = 0.783
## Theta B = 0.535
## Perubahan = 0.0212
##
## Iterasi: 5
## Theta A = 0.791
## Theta B = 0.526
## Perubahan = 0.0115
##
## Iterasi: 6
## Theta A = 0.795
## Theta B = 0.522
## Perubahan = 0.0052
##
## Iterasi: 7
## Theta A = 0.796
## Theta B = 0.521
## Perubahan = 0.0022
##
## Iterasi: 8
## Theta A = 0.796
## Theta B = 0.52
## Perubahan = 9e-04
##
## Konvergen pada iterasi ke- 8
theta_A2 <- 0.7
theta_B2 <- 0.4
tolerance <- 0.001
max_iter <- 100
for(iter in 1:max_iter){
# E-Step
prob_A2 <- (theta_A2^H) * ((1-theta_A2)^T)
prob_B2 <- (theta_B2^H) * ((1-theta_B2)^T)
weight_A2 <- prob_A2 / (prob_A2 + prob_B2)
weight_B2 <- prob_B2 / (prob_A2 + prob_B2)
H_A2 <- sum(weight_A2 * H)
T_A2 <- sum(weight_A2 * T)
H_B2 <- sum(weight_B2 * H)
T_B2 <- sum(weight_B2 * T)
# M-Step
theta_A2_new <- H_A2 / (H_A2 + T_A2)
theta_B2_new <- H_B2 / (H_B2 + T_B2)
# Euclidean Distance
distance <- sqrt((theta_A2 - theta_A2_new)^2 +
(theta_B2 - theta_B2_new)^2)
# Menampilkan hasil iterasi
cat("Iterasi:", iter, "\n")
cat("Theta A2 =", round(theta_A2_new, 3), "\n")
cat("Theta B2 =", round(theta_B2_new, 3), "\n")
cat("Perubahan =", round(distance, 4), "\n\n")
# Cek konvergensi
if(distance < tolerance){
cat("Konvergen pada iterasi ke-", iter, "\n")
break
}
# Update parameter
theta_A2 <- theta_A2_new
theta_B2 <- theta_B2_new
}
## Iterasi: 1
## Theta A2 = 0.757
## Theta B2 = 0.476
## Perubahan = 0.095
##
## Iterasi: 2
## Theta A2 = 0.781
## Theta B2 = 0.502
## Perubahan = 0.036
##
## Iterasi: 3
## Theta A2 = 0.791
## Theta B2 = 0.513
## Perubahan = 0.0139
##
## Iterasi: 4
## Theta A2 = 0.794
## Theta B2 = 0.517
## Perubahan = 0.0055
##
## Iterasi: 5
## Theta A2 = 0.796
## Theta B2 = 0.518
## Perubahan = 0.0022
##
## Iterasi: 6
## Theta A2 = 0.796
## Theta B2 = 0.519
## Perubahan = 9e-04
##
## Konvergen pada iterasi ke- 6
Dengan menggunakan parameter awal yang berbeda, nilai akhir parameter yang diperoleh tetap cenderung mirip. Hal ini menunjukkan bahwa algoritma EM mampu menemukan parameter terbaik dari data secara konsisten. Meskipun demikian, parameter awal tetap mempengaruhi jumlah iterasi yang dibutuhkan hingga mencapai kondisi konvergen.
Pada kedua percobaan diperoleh nilai parameter akhir sekitar theta A= 0.79 dan Theta B= 0.52, yang menunjukkan bahwa koin A memiliki probabilitas lebih besar menghasilkan Head dibandingkan koin B. Sementara, koin B memiliki probabilitas yang lebih seimbang antara Angka dan Gambar. Maka, Set (5H 5T) kemungkinan berasal dari koin B, Set (9H 1T) kemungkinan berasal dari koin A, Set (8H 2T) kemungkinan berasal dari koin A, Set (4H 6T) kemungkinan berasal dari koin B, dan Set (7H 3T) kemungkinan berasal dari koin A.