1. Data Awal

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

2. Menghitung Total Frekuensi

total_frekuensi <- sum(
  tabel_permintaan$frekuensi
)

3. Menghitung Probabilitas

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

4. Probabilitas Kumulatif

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

5. Menentukan Interval Bilangan Acak

tabel_permintaan$batas_bawah <- c(
  1,
  11,
  31,
  71,
  91
)

tabel_permintaan$batas_atas <- c(
  10,
  30,
  70,
  90,
  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

6. Menghitung Nilai Ekspektasi Manual

nilai_ekspektasi <- sum(
  tabel_permintaan$permintaan *
  tabel_permintaan$probabilitas
)

cat(
  "Ekspektasi permintaan:",
  nilai_ekspektasi,
  "\n"
)
## Ekspektasi permintaan: 70

7. Fungsi Simulasi Permintaan

permintaan_simulasi <- function(
  n,
  tabel_permintaan
) {
  
  # Bilangan acak 1 sampai 100
  bilangan_acak <- sample(
    1:100,
    n,
    replace = TRUE
  )
  
  # Fungsi menentukan permintaan
  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)
}

8. Simulasi 1000 Hari

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
cat(
  "Rata-rata permintaan 1000 hari:",
  mean(sim_1000$prediksi_permintaan),
  "\n"
)
## Rata-rata permintaan 1000 hari: 70.12

9. Simulasi 5000 Hari

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
cat(
  "Rata-rata permintaan 5000 hari:",
  mean(sim_5000$prediksi_permintaan),
  "\n"
)
## Rata-rata permintaan 5000 hari: 70.088

10. Simulasi 20000 Hari

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
cat(
  "Rata-rata permintaan 20000 hari:",
  mean(sim_20000$prediksi_permintaan),
  "\n"
)
## Rata-rata permintaan 20000 hari: 69.892

11. Perbandingan Hasil

perbandingan <- data.frame(
  
  Metode = c(
    "Ekspektasi Teoritis",
    "Simulasi 1000 Hari",
    "Simulasi 5000 Hari",
    "Simulasi 20000 Hari"
  ),
  
  Permintaan_Rata_Rata = c(
    round(nilai_ekspektasi, 2),
    round(mean(sim_1000$prediksi_permintaan), 2),
    round(mean(sim_5000$prediksi_permintaan), 2),
    round(mean(sim_20000$prediksi_permintaan), 2)
  )
)

print(perbandingan)
##                Metode Permintaan_Rata_Rata
## 1 Ekspektasi Teoritis                70.00
## 2  Simulasi 1000 Hari                70.12
## 3  Simulasi 5000 Hari                70.09
## 4 Simulasi 20000 Hari                69.89

12. Analisis Hasil

Nilai ekspektasi teoritis dari perhitungan manual adalah sebesar 70. Hasil simulasi menunjukkan bahwa: Simulasi 1000 hari sudah cukup mendekati nilai ekspektasi teoritis. Simulasi 5000 hari menghasilkan nilai yang semakin dekat dengan nilai teoritis. Simulasi 20000 hari memberikan hasil yang paling stabil dan paling mendekati nilai ekspektasi sebenarnya. Hal ini menunjukkan bahwa semakin besar jumlah simulasi yang dilakukan, maka hasil estimasi menjadi semakin baik. Penyebabnya adalah karena pengaruh unsur acak akan semakin kecil jika jumlah pengamatan semakin besar Kondisi ini sesuai dengan. Hukum Bilangan Besar (Law of Large Numbers) yaitu semakin banyak simulasi, maka rata-rata hasil simulasi akan semakin mendekati nilai harapan sebenarnya Sehingga dapat disimpulkan bahwa peningkatan jumlah simulasi membuat estimasi menjadi lebih stabil, lebih akurat, dan lebih dapat dipercaya