library(ggplot2)
library(knitr)

1. Simulasi Distribusi Diskrit & Kontinu

a. Distribusi Diskrit (Poisson)

Distribusi Poisson digunakan untuk memodelkan jumlah kejadian dalam rentang waktu atau ruang tertentu. Misalkan kita mensimulasikan jumlah pelanggan yang datang ke sebuah toko per jam dengan rata-rata (\(\lambda\)) = 15 pelanggan.

set.seed(123)
n_simulasi <- 1000
lambda_val <- 15

# Simulasi data
data_poisson <- rpois(n_simulasi, lambda = lambda_val)
mean_poisson <- mean(data_poisson)
var_poisson <- var(data_poisson)

cat("Statistik Empiris (Hasil Simulasi):\n")
## Statistik Empiris (Hasil Simulasi):
cat("- Rata-rata (Mean):", mean_poisson, "\n")
## - Rata-rata (Mean): 15.01
cat("- Varians         :", var_poisson, "\n")
## - Varians         : 15.12302
cat("- Parameter Target (Lambda):", lambda_val, "\n")
## - Parameter Target (Lambda): 15
# Visualisasi
hist(data_poisson, breaks = 20, col = "skyblue", main = "Simulasi Distribusi Poisson (n=1000)",
     xlab = "Jumlah Pelanggan per Jam", ylab = "Frekuensi")
abline(v = mean(data_poisson), col = "red", lwd = 2, lty = 2)

Interpretasi: Berdasarkan output empiris di atas, rata-rata jumlah pelanggan dari 1.000 simulasi adalah 15.01. Hasil ini sangat mendekati parameter \(\lambda = 15\). Selain itu, pada distribusi Poisson, nilai rata-rata dan varians seharusnya hampir sama. Secara empiris, varians kita adalah 15.123, yang membuktikan bahwa simulasi telah berjalan sesuai dengan karakteristik distribusi Poisson.

b. Distribusi Kontinu (Normal)

Distribusi Normal memodelkan variabel yang memiliki sebaran simetris di sekitar rata-rata. Misalkan kita mensimulasikan tinggi badan pria di suatu daerah dengan rata-rata (\(\mu\)) = 170 cm dan standar deviasi (\(\sigma\)) = 7 cm.

# Simulasi data
data_normal <- rnorm(n_simulasi, mean = 170, sd = 7)
mean_norm <- mean(data_normal)
sd_norm <- sd(data_normal)

cat("Statistik Empiris (Hasil Simulasi):\n")
## Statistik Empiris (Hasil Simulasi):
cat("- Rata-rata (Mean)        :", round(mean_norm, 4), "\n")
## - Rata-rata (Mean)        : 170.1084
cat("- Standar Deviasi (SD)   :", round(sd_norm, 4), "\n")
## - Standar Deviasi (SD)   : 6.8673
cat("- Target: Mean=170, SD=7\n")
## - Target: Mean=170, SD=7
# Visualisasi
plot(density(data_normal), main = "Simulasi Distribusi Normal Tinggi Badan",
     col = "darkgreen", lwd = 2, xlab = "Tinggi Badan (cm)")
polygon(density(data_normal), col = "lightgreen", border = "darkgreen")

Interpretasi: Hasil perhitungan empiris menunjukkan rata-rata tinggi badan sebesar 170.11 cm dengan standar deviasi 6.87 cm. Hasil ini menunjukkan deviasi yang sangat kecil dari parameter target (\(\mu=170, \sigma=7\)), sehingga data simulasi ini valid untuk merepresentasikan populasi tinggi badan pria sesuai asumsi distribusi normal.


2. Studi Kasus Mandiri: Simulasi Operasional Coffee Shop

Masalah: Sebuah Coffee Shop ingin mengetahui performa layanan mereka pada jam sibuk (08:00 - 09:00).

  1. Jumlah pelanggan yang masuk mengikuti Distribusi Poisson (\(\lambda = 25\) orang/jam).
  2. Waktu pembuatan kopi per pelanggan mengikuti Distribusi Eksponensial dengan rata-rata 3 menit (\(\lambda_{service} = 1/3\)).

a. Simulasi Kedatangan Pelanggan (Diskrit)

# Simulasi kedatangan selama 30 hari pada jam yang sama
hari <- 30
kedatangan_harian <- rpois(hari, lambda = 25)

cat("Rata-rata kedatangan pelanggan per jam selama 30 hari:", mean(kedatangan_harian), "\n")
## Rata-rata kedatangan pelanggan per jam selama 30 hari: 23.5

b. Simulasi Waktu Pelayanan (Kontinu)

Kita akan mensimulasikan waktu pembuatan kopi untuk 100 pesanan pertama.

n_pesanan <- 100
waktu_service <- rexp(n_pesanan, rate = 1/3) # Rata-rata 3 menit

# Menghitung statistik deskriptif waktu pelayanan
summary_service <- data.frame(
  Min = min(waktu_service),
  Mean = mean(waktu_service),
  Max = max(waktu_service)
)

knitr::kable(summary_service, caption = "Statistik Waktu Pelayanan (Menit)")
Statistik Waktu Pelayanan (Menit)
Min Mean Max
0.0099568 3.075161 19.43072

c. Analisis Probabilitas

Berapa probabilitas seorang pelanggan dilayani dalam waktu kurang dari 2 menit?

# Menghitung proporsi dari data simulasi
prob_cepat <- mean(waktu_service < 2)

cat("Probabilitas pelayanan < 2 menit berdasarkan simulasi:", round(prob_cepat * 100, 2), "%\n")
## Probabilitas pelayanan < 2 menit berdasarkan simulasi: 51 %

Interpretasi Hasil:

  1. Dalam satu bulan, rata-rata kedatangan pelanggan pada jam sibuk stabil di angka 23.5 orang.
  2. Meskipun rata-rata pembuatan kopi adalah 3 menit, terdapat variasi waktu pelayanan di mana sekitar 51% pelanggan mendapatkan kopi mereka dalam waktu kurang dari 2 menit.
  3. Manajemen dapat menggunakan data ini untuk menentukan apakah perlu menambah barista tambahan jika jumlah pelanggan di atas 30 orang per jam (batas kapasitas maksimal saat ini).

Kesimpulan

Simulasi variabel random memungkinkan kita untuk memprediksi perilaku sistem nyata tanpa harus melakukan observasi fisik yang mahal. Dengan memahami distribusi Poisson (Diskrit) dan Eksponensial/Normal (Kontinu), kita dapat melakukan perencanaan kapasitas bisnis yang lebih akurat.