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