DATA 1

# Input Data
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
total_frekuensi <- sum(tabel_permintaan$frekuensi)

# Peluang
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
# 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
# Interval dengan +1 untuk lower bound
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
# Ekspektasi Berdasarkan distribusi peluang yang sudah dihitung sebelumnya
nilai_ekspektasi <- sum(tabel_permintaan$permintaan * tabel_permintaan$probabilitas)
cat("Ekspektasi permintaan:", nilai_ekspektasi, "\n")
## Ekspektasi permintaan: 70

PREDIKSI

permintaan_simulasi <- function(n, tabel_permintaan) {
  # Bilangan acak dari 1 sampai 100 (diskrit sesuai interval)
  bilangan_acak <- sample(1:100, n, replace = TRUE)
  
  # Fungsi bantu untuk menentukan demand berdasarkan interval
  get_demand <- function(x) {
    index <- which(x >= tabel_permintaan$batas_bawah & x <= tabel_permintaan$batas_atas)
    if (length(index) == 0) {
      return(NA)  # atau fallback ke 70 jika mau pakai nilai tengah
    } else {
      return(tabel_permintaan$permintaan[index])
    }
  }
  
  prediksi_permintaan <- sapply(bilangan_acak, get_demand)
  
  # Hapus NA jika ada
  result <- data.frame(
    bilangan_acak = bilangan_acak,
    prediksi_permintaan = prediksi_permintaan
  )
  result <- na.omit(result)
  
  return(result)
}
set.seed(5)
# a. 5 hari
sim_5 <- permintaan_simulasi(5, tabel_permintaan)
print(head(sim_5, 10))
##   bilangan_acak prediksi_permintaan
## 1            66                  70
## 2            57                  70
## 3            79                  80
## 4            75                  80
## 5            41                  70
cat("Rata-rata permintaan:", mean(sim_5$prediksi_permintaan), "\n")
## Rata-rata permintaan: 74
set.seed(20)
# a. 20 hari
sim_20 <- permintaan_simulasi(20, tabel_permintaan)
print(head(sim_20, 10))
##    bilangan_acak prediksi_permintaan
## 1             38                  70
## 2             63                  70
## 3              2                  50
## 4             98                  90
## 5             29                  60
## 6             94                  90
## 7             62                  70
## 8             45                  70
## 9             41                  70
## 10            67                  70
cat("Rata-rata permintaan:", mean(sim_20$prediksi_permintaan), "\n")
## Rata-rata permintaan: 71
set.seed(100)
# c. 100 hari
sim_100 <- permintaan_simulasi(100, tabel_permintaan)
print(head(sim_100, 10))
##    bilangan_acak prediksi_permintaan
## 1             74                  80
## 2             89                  80
## 3             78                  80
## 4             23                  60
## 5             86                  80
## 6             70                  70
## 7              4                  50
## 8             55                  70
## 9             70                  70
## 10            98                  90
cat("Rata-rata permintaan:", mean(sim_100$prediksi_permintaan), "\n")
## Rata-rata permintaan: 69.19192
set.seed(1000)
# d. 1000 hari
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:", mean(sim_1000$prediksi_permintaan), "\n")
## Rata-rata permintaan: 70.12097
perbandingan <- data.frame(
  Metode = c("Ekspektasi Teoritis", "Simulasi 5 hari","Simulasi 20 hari", "Simulasi 100 hari", "Simulasi 1000 hari"),
  Permintaan_Rata_Rata = c(
    round(nilai_ekspektasi, 2),
    round(mean(sim_5$prediksi_permintaan), 2),
    round(mean(sim_20$prediksi_permintaan), 2),
    round(mean(sim_100$prediksi_permintaan), 2),
    round(mean(sim_1000$prediksi_permintaan), 2)
  )
)

# Tampilkan tabel
print(perbandingan)
##                Metode Permintaan_Rata_Rata
## 1 Ekspektasi Teoritis                70.00
## 2     Simulasi 5 hari                74.00
## 3    Simulasi 20 hari                71.00
## 4   Simulasi 100 hari                69.19
## 5  Simulasi 1000 hari                70.12

DATA 2

# Bangkitkan data
set.seed(123)

# Variabel permintaan ~ eksponensial (10 data)
permintaan <- round(rexp(10, rate = 0.1), 0)

# Variabel frekuensi ~ normal (dibulatkan & dibuat positif)
frekuensi <- round(rnorm(10, mean = 50, sd = 10), 0)
frekuensi[frekuensi < 1] <- 1

data <- data.frame(permintaan, frekuensi)
print(data)
##    permintaan frekuensi
## 1           8        46
## 2           6        62
## 3          13        54
## 4           0        54
## 5           1        51
## 6           3        44
## 7           3        68
## 8           1        55
## 9          27        30
## 10          0        57
# Probabilitas

total_frekuensi <- sum(data$frekuensi)
data$probabilitas <- data$frekuensi / total_frekuensi

# Probabilitas kumulatif
data$prob_kumulatif <- cumsum(data$probabilitas)

# Interval 1–100
data$batas_bawah <- c(1, head(data$prob_kumulatif, -1) * 100 + 1)
data$batas_atas <- data$prob_kumulatif * 100

print(data)
##    permintaan frekuensi probabilitas prob_kumulatif batas_bawah batas_atas
## 1           8        46   0.08829175     0.08829175    1.000000   8.829175
## 2           6        62   0.11900192     0.20729367    9.829175  20.729367
## 3          13        54   0.10364683     0.31094050   21.729367  31.094050
## 4           0        54   0.10364683     0.41458733   32.094050  41.458733
## 5           1        51   0.09788868     0.51247601   42.458733  51.247601
## 6           3        44   0.08445298     0.59692898   52.247601  59.692898
## 7           3        68   0.13051823     0.72744722   60.692898  72.744722
## 8           1        55   0.10556622     0.83301344   73.744722  83.301344
## 9          27        30   0.05758157     0.89059501   84.301344  89.059501
## 10          0        57   0.10940499     1.00000000   90.059501 100.000000
# Ekspektasi

ekspektasi <- sum(data$permintaan * data$probabilitas)
cat("Ekspektasi permintaan:", ekspektasi, "\n")
## Ekspektasi permintaan: 5.170825
# Fungsi simulasi

simulasi <- function(n, data){
  acak <- sample(1:100, n, replace = TRUE)
  
  get_value <- function(x){
    idx <- which(x >= data$batas_bawah & x <= data$batas_atas)
    if(length(idx) == 0){
      return(NA)
    } else {
      return(data$permintaan[idx])
    }
  }
  
  hasil <- sapply(acak, get_value)
  
  hasil_df <- data.frame(
    acak = acak,
    permintaan = hasil
  )
  
  hasil_df <- na.omit(hasil_df)
  return(hasil_df)
}
# Simulasi 5, 20, 100, 1000 hari

set.seed(5)
sim_5 <- simulasi(5, data)
cat("Rata-rata 5 hari:", mean(sim_5$permintaan), "\n")
## Rata-rata 5 hari: 1.6
set.seed(20)
sim_20 <- simulasi(20, data)
cat("Rata-rata 20 hari:", mean(sim_20$permintaan), "\n")
## Rata-rata 20 hari: 4.722222
set.seed(100)
sim_100 <- simulasi(100, data)
cat("Rata-rata 100 hari:", mean(sim_100$permintaan), "\n")
## Rata-rata 100 hari: 5.752688
set.seed(1000)
sim_1000 <- simulasi(1000, data)
cat("Rata-rata 1000 hari:", mean(sim_1000$permintaan), "\n")
## Rata-rata 1000 hari: 5.54057
# Perbandingan

perbandingan <- data.frame(
  Metode = c("Ekspektasi", "5 hari", "20 hari", "100 hari", "1000 hari"),
  Rata_rata = c(
    round(ekspektasi, 2),
    round(mean(sim_5$permintaan), 2),
    round(mean(sim_20$permintaan), 2),
    round(mean(sim_100$permintaan), 2),
    round(mean(sim_1000$permintaan), 2)
  )
)

print(perbandingan)
##       Metode Rata_rata
## 1 Ekspektasi      5.17
## 2     5 hari      1.60
## 3    20 hari      4.72
## 4   100 hari      5.75
## 5  1000 hari      5.54