Sebuah perusahaan mainan memiliki dua mesin pembuat koin, yaitu Mesin A dan Mesin B. Kedua mesin menghasilkan koin dengan karakteristik yang berbeda sehingga peluang muncul sisi Head (H) pada setiap mesin juga berbeda.
Namun, saat pengujian kualitas dilakukan, petugas hanya mencatat hasil pelemparan koin tanpa mengetahui koin tersebut berasal dari Mesin A atau Mesin B. Dengan kata lain, identitas mesin pembuat koin menjadi variabel laten (hidden variable).
Data hasil pengujian diperoleh sebagai berikut:
Set Head (H) Tail (T) 1 5 5 2 9 1 3 8 2 4 4 6 5 7 3
Tujuan analisis adalah mengestimasi probabilitas munculnya sisi Head pada koin dari Mesin A dan Mesin B menggunakan Expectation-Maximization (EM) Algorithm. Selain itu, dilakukan beberapa percobaan dengan kombinasi parameter awal yang berbeda untuk melihat pengaruhnya terhadap hasil estimasi.
#=========================================
# EM Algorithm - Dua Koin
# Mencoba Parameter Awal Berbeda
#=========================================
# Data
H <- c(5, 9, 8, 4, 7)
T <- c(5, 1, 2, 6, 3)
# ==========================
# GANTI PARAMETER DI SINI
# ==========================
thetaA <- 0.8
thetaB <- 0.3
max_iter <- 100
tol <- 0.00001
hasil <- data.frame(
Iterasi = numeric(),
ThetaA = numeric(),
ThetaB = numeric()
)
for(iter in 1:max_iter){
# E-Step
wA <- numeric(length(H))
wB <- numeric(length(H))
for(i in 1:length(H)){
probA <- thetaA^H[i] * (1-thetaA)^T[i]
probB <- thetaB^H[i] * (1-thetaB)^T[i]
wA[i] <- probA/(probA + probB)
wB[i] <- probB/(probA + probB)
}
# M-Step
thetaA_new <- sum(wA * H) / sum(wA * (H + T))
thetaB_new <- sum(wB * H) / sum(wB * (H + T))
hasil <- rbind(
hasil,
data.frame(
Iterasi = iter,
ThetaA = thetaA_new,
ThetaB = thetaB_new
)
)
perubahan <- sqrt(
(thetaA_new - thetaA)^2 +
(thetaB_new - thetaB)^2
)
if(perubahan < tol){
break
}
thetaA <- thetaA_new
thetaB <- thetaB_new
}
cat("Jumlah Iterasi :", iter, "\n")
## Jumlah Iterasi : 12
cat("Theta A Akhir :", round(thetaA_new,4), "\n")
## Theta A Akhir : 0.7968
cat("Theta B Akhir :", round(thetaB_new,4), "\n\n")
## Theta B Akhir : 0.5196
print(hasil)
## Iterasi ThetaA ThetaB
## 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
## 10 10 0.7967833 0.5195610
## 11 11 0.7967868 0.5195741
## 12 12 0.7967881 0.5195794
# Grafik Konvergensi
plot(
hasil$Iterasi,
hasil$ThetaA,
type = "l",
lwd = 2,
ylim = c(0,1),
xlab = "Iterasi",
ylab = "Nilai Parameter",
main = "Konvergensi EM Algorithm"
)
lines(
hasil$Iterasi,
hasil$ThetaB,
lwd = 2,
lty = 2
)
legend(
"right",
legend = c("Theta A","Theta B"),
lty = c(1,2),
lwd = 2
)
Berdasarkan hasil percobaan, algoritma Expectation-Maximization (EM) berhasil mengestimasi probabilitas munculnya sisi Head pada kedua koin. Nilai parameter θA konvergen pada 0,7968 yang menunjukkan bahwa Koin A memiliki kecenderungan menghasilkan Head sekitar 79,68%. Sementara itu, nilai θB konvergen pada 0,5196 yang menunjukkan bahwa Koin B memiliki peluang menghasilkan Head sekitar 51,96%.
Selain itu, terlihat bahwa perubahan nilai parameter semakin kecil pada setiap iterasi. Hal ini menunjukkan bahwa algoritma EM secara bertahap menemukan estimasi parameter yang paling sesuai dengan data hingga mencapai kondisi konvergen. Dengan hanya memerlukan 12 iterasi, algoritma sudah mampu memperoleh hasil yang stabil dan konsisten.