NOMOR 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
# 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
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)
}
# a. 5 hari
sim_5 <- permintaan_simulasi(5, tabel_permintaan)
print(head(sim_5, 10))
## bilangan_acak prediksi_permintaan
## 1 78 80
## 2 95 90
## 3 54 70
## 4 7 50
## 5 12 60
cat("Rata-rata permintaan:", mean(sim_5$prediksi_permintaan), "\n")
## Rata-rata permintaan: 70
# b. 20 hari
sim_20 <- permintaan_simulasi(20, tabel_permintaan)
print(head(sim_20, 10))
## bilangan_acak prediksi_permintaan
## 1 98 90
## 2 16 60
## 3 94 90
## 4 95 90
## 5 1 50
## 6 16 60
## 7 63 70
## 8 89 80
## 9 72 80
## 10 64 70
cat("Rata-rata permintaan:", mean(sim_20$prediksi_permintaan), "\n")
## Rata-rata permintaan: 72.5
# c. 100 hari
sim_100 <- permintaan_simulasi(100, tabel_permintaan)
print(head(sim_100, 10))
## bilangan_acak prediksi_permintaan
## 1 68 70
## 2 58 70
## 3 38 70
## 4 53 70
## 5 84 80
## 6 9 50
## 7 20 60
## 8 29 60
## 9 52 70
## 10 46 70
cat("Rata-rata permintaan:", mean(sim_100$prediksi_permintaan), "\n")
## Rata-rata permintaan: 71.31313
# d. 1000 hari
sim_1000 <- permintaan_simulasi(1000, tabel_permintaan)
print(head(sim_1000, 10))
## bilangan_acak prediksi_permintaan
## 1 95 90
## 2 61 70
## 3 41 70
## 4 29 60
## 5 19 60
## 6 78 80
## 7 17 60
## 8 84 80
## 9 91 90
## 10 88 80
cat("Rata-rata permintaan:", mean(sim_1000$prediksi_permintaan), "\n")
## Rata-rata permintaan: 70.12121
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 70.00
## 3 Simulasi 20 hari 72.50
## 4 Simulasi 100 hari 71.31
## 5 Simulasi 1000 hari 70.12
NOMOR 2
# Data awal
set.seed(123)
data <- data.frame(
permintaan = round(rexp(10,0.01234)),
frekuensi = ceiling(rnorm(10,10,5))
)
data
## permintaan frekuensi
## 1 68 8
## 2 47 17
## 3 108 12
## 4 3 13
## 5 5 11
## 6 26 8
## 7 25 19
## 8 12 13
## 9 221 1
## 10 2 14
# 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 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
# Probabilitas kumulatif
tabel_permintaan$probabilitas_kumulatif <- cumsum(tabel_permintaan$probabilitas)
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
# 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
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)
}
# a. 5 hari
sim_5 <- permintaan_simulasi(5, tabel_permintaan)
print(head(sim_5, 10))
## bilangan_acak prediksi_permintaan
## 1 76 80
## 2 15 60
## 3 32 70
## 4 7 50
## 5 9 50
cat("Rata-rata permintaan:", mean(sim_5$prediksi_permintaan), "\n")
## Rata-rata permintaan: 62
# b. 20 hari
sim_20 <- permintaan_simulasi(20, tabel_permintaan)
print(head(sim_20, 10))
## bilangan_acak prediksi_permintaan
## 1 41 70
## 2 74 80
## 3 23 60
## 4 27 60
## 5 60 70
## 6 53 70
## 7 7 50
## 8 53 70
## 9 27 60
## 10 96 90
cat("Rata-rata permintaan:", mean(sim_20$prediksi_permintaan), "\n")
## Rata-rata permintaan: 71.5
# c. 100 hari
sim_100 <- permintaan_simulasi(100, tabel_permintaan)
print(head(sim_100, 10))
## bilangan_acak prediksi_permintaan
## 1 97 90
## 2 91 90
## 3 25 60
## 4 38 70
## 5 21 60
## 6 79 80
## 7 41 70
## 8 47 70
## 9 90 80
## 10 60 70
cat("Rata-rata permintaan:", mean(sim_100$prediksi_permintaan), "\n")
## Rata-rata permintaan: 71.42857
# d. 1000 hari
sim_1000 <- permintaan_simulasi(1000, tabel_permintaan)
print(head(sim_1000, 10))
## bilangan_acak prediksi_permintaan
## 1 1 50
## 2 40 70
## 3 30 60
## 4 94 90
## 5 89 80
## 6 16 60
## 7 88 80
## 8 54 70
## 9 75 80
## 10 48 70
cat("Rata-rata permintaan:", mean(sim_1000$prediksi_permintaan), "\n")
## Rata-rata permintaan: 70.17172
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 62.00
## 3 Simulasi 20 hari 71.50
## 4 Simulasi 100 hari 71.43
## 5 Simulasi 1000 hari 70.17