tabel_permintaan <- data.frame(
permintaan = c(50, 60, 70, 80, 90),
frekuensi = c(10, 20, 40, 20, 10)
)
print(tabel_permintaan)
## permintaan frekuensi
## 1 50 10
## 2 60 20
## 3 70 40
## 4 80 20
## 5 90 10
total_frekuensi <- sum(tabel_permintaan$frekuensi)
tabel_permintaan$probabilitas <- tabel_permintaan$frekuensi / total_frekuensi
print(tabel_permintaan)
## permintaan frekuensi probabilitas
## 1 50 10 0.1
## 2 60 20 0.2
## 3 70 40 0.4
## 4 80 20 0.2
## 5 90 10 0.1
tabel_permintaan$probabilitas_kumulatif <- cumsum(tabel_permintaan$probabilitas)
print(tabel_permintaan)
## permintaan frekuensi probabilitas probabilitas_kumulatif
## 1 50 10 0.1 0.1
## 2 60 20 0.2 0.3
## 3 70 40 0.4 0.7
## 4 80 20 0.2 0.9
## 5 90 10 0.1 1.0
tabel_permintaan$batas_bawah <- c(1, head(tabel_permintaan$probabilitas_kumulatif, -1) * 100 + 1)
tabel_permintaan$batas_atas <- tabel_permintaan$probabilitas_kumulatif * 100
print(tabel_permintaan)
## permintaan frekuensi probabilitas probabilitas_kumulatif batas_bawah
## 1 50 10 0.1 0.1 1
## 2 60 20 0.2 0.3 11
## 3 70 40 0.4 0.7 31
## 4 80 20 0.2 0.9 71
## 5 90 10 0.1 1.0 91
## batas_atas
## 1 10
## 2 30
## 3 70
## 4 90
## 5 100
nilai_ekspektasi <- sum(tabel_permintaan$permintaan * tabel_permintaan$probabilitas)
cat("Ekspektasi permintaan:", nilai_ekspektasi, "\n")
## Ekspektasi permintaan: 70
permintaan_simulasi <- function(n, tabel_permintaan) {
bilangan_acak <- sample(1:100, n, replace = TRUE)
get_demand <- function(x) {
index <- which(x >= tabel_permintaan$batas_bawah & x <= tabel_permintaan$batas_atas)
if (length(index) == 0) {
return(NA)
} else {
return(tabel_permintaan$permintaan[index])
}
}
prediksi_permintaan <- sapply(bilangan_acak, get_demand)
result <- data.frame(
bilangan_acak = bilangan_acak,
prediksi_permintaan = prediksi_permintaan
)
result <- na.omit(result)
return(result)
}
set.seed(1000)
sim_1000 <- permintaan_simulasi(1000, tabel_permintaan)
print(head(sim_1000, 10))
## bilangan_acak prediksi_permintaan
## 1 68 70
## 2 43 70
## 3 86 80
## 4 51 70
## 5 88 80
## 6 29 60
## 7 99 90
## 8 61 70
## 9 18 60
## 10 22 60
mean_1000 <- mean(sim_1000$prediksi_permintaan)
cat("Rata-rata permintaan:",mean_1000, "\n")
## Rata-rata permintaan: 70.12097
set.seed(5000)
sim_5000 <- permintaan_simulasi(5000, tabel_permintaan)
print(head(sim_5000, 10))
## bilangan_acak prediksi_permintaan
## 1 63 70
## 2 40 70
## 3 5 50
## 4 53 70
## 5 50 70
## 6 35 70
## 7 97 90
## 8 100 90
## 9 52 70
## 10 53 70
mean_5000 <- mean(sim_5000$prediksi_permintaan)
cat("Rata-rata permintaan:", mean_5000, "\n")
## Rata-rata permintaan: 70.08871
set.seed(20000)
sim_20000 <- permintaan_simulasi(20000, tabel_permintaan)
print(head(sim_20000, 10))
## bilangan_acak prediksi_permintaan
## 1 87 80
## 2 27 60
## 3 28 60
## 4 76 80
## 5 23 60
## 6 36 70
## 7 11 60
## 8 12 60
## 9 63 70
## 10 78 80
mean_20000 <- mean(sim_20000$prediksi_permintaan)
cat("Rata-rata permintaan:", mean_20000, "\n")
## Rata-rata permintaan: 69.89096
hasil <- data.frame(
Simulasi = c(1000, 5000, 20000),
Ekspektasi_Simulasi = c(mean_1000, mean_5000, mean_20000),
Ekspektasi_Teoritis = nilai_ekspektasi
)
hasil$Selisih <- abs(hasil$Ekspektasi_Simulasi - nilai_ekspektasi)
print(hasil)
## Simulasi Ekspektasi_Simulasi Ekspektasi_Teoritis Selisih
## 1 1000 70.12097 70 0.12096774
## 2 5000 70.08871 70 0.08870968
## 3 20000 69.89096 70 0.10904134
Dengan jumlah percobaan 1.000, 5.000, dan 20.000 berdasarkan hasil dimulasi Monte Carlo diperolah ekspektasi simulasi masing-masing sebesar 70.12097, 70.08871, dan 69.89096. Jika dibandingkan dengan nilai ekspektasi teoritis yang telah dihitung sebelumnya yaitu 70. Simulasi 1.000 menghasilkan selisih sekitar 0.12097. Lalu, simulasi 5.000 menghasilkan selisih sekitar 0.08871. Dan simulasi 20.000 menghasilkan selisih sekitar 0.10904.
Terlihat ketiga hasil simulasi sudah mendekati nilai teoritis, yang menunjukkan bahwa metode Monte Carlo mampu memberikan estimasi yang baik.
Hukum Bilangan Besar (LLN) menyatakan bahwa ketika n bertambah besar, rata-rata sampel Xbar akan mendekati nilai rata-rata sebenarnya μ (Blitztein & Hwang, 2019). Selain itu, metode Monte Carlo menunjukkan bahwa peningkatan jumlah iterasi akan mengurangi variansi estimasi sehingga menghasilkan hasil yang lebih stabil (Law & Kelton, 2007).
Namun, pada dasarnya, setiap kali simulasi dijalankan, hasil yang diperoleh dapat sedikit berbeda tergantung pada bilangan acak yang terbentuk.Sehingga, peningkatan jumlah simulasi tidak selalu menghasilkan nilai yang secara monoton semakin mendekati nilai teoritis pada setiap percobaan. Misalnya, pada simulasi 20.000, selisihnya sedikit lebih besar dibandingkan 5.000.