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