Pendahuluan

Simulasi variabel random adalah teknik yang digunakan untuk menghasilkan data acak berdasarkan distribusi probabilitas tertentu. Dalam analisis statistik dan pemodelan data, simulasi ini membantu memahami perilaku variabel acak dalam berbagai kondisi tanpa harus mengumpulkan data nyata.

Terdapat dua jenis utama variabel random yang sering disimulasikan:

  1. Variabel Random Diskrit: Nilai yang dihasilkan terbatas pada himpunan diskrit, seperti hasil pelemparan dadu atau jumlah keberhasilan dalam percobaan binomial.
  2. Variabel Random Kontinu: Nilai dapat berupa bilangan real dalam rentang tertentu, seperti tinggi badan atau waktu tunggu pelanggan, yang sering mengikuti distribusi normal, eksponensial, atau lainnya.

Dengan menggunakan simulasi variabel random di R, kita dapat menguji teori probabilitas, melakukan eksperimen statistik, serta membuat model prediksi berdasarkan data sintetis.

Simulasi Sederhana: Variabel Random Uniform

Distribusi uniform menghasilkan angka acak yang memiliki peluang sama untuk muncul dalam rentang tertentu.

# simulasi 1000 variabel random dari distribusi uniform
set.seed(44)  # set seed untuk reproducibility
n <- 1000
uniform_data <- runif(n, min = 0, max = 1)

# plot histogram
hist(uniform_data, breaks = 30, main = "Histogram Distribusi Uniform", xlab = "Nilai", col = "blueviolet")

runif(n, min, max) digunakan untuk menghasilkan n variabel random dari distribusi uniform dengan rentang min hingga max. Kemudian, histogram dibuat dengan 30 bin (breaks = 30), yang menunjukkan bahwa data tersebar secara merata tanpa pola tertentu. Dari histogram, terlihat bahwa frekuensi kemunculan tiap nilai relatif merata, sesuai dengan sifat distribusi uniform.

Simulasi Distribusi Diskrit: Distribusi Binomial

Distribusi binomial digunakan untuk memodelkan jumlah keberhasilan dalam sejumlah percobaan dengan probabilitas tetap.

# simulasi 1000 variabel random dari distribusi binomial
n_trials <- 10  # jumlah percobaan
p_success <- 0.5  # probabilitas sukses
binomial_data <- rbinom(n, size = n_trials, prob = p_success)

# plot histogram
hist(binomial_data, breaks = 30, main = "Histogram Distribusi Binomial", xlab = "Jumlah Sukses", col = "darkmagenta")

Pada simulasi ini, kita menghasilkan 1000 angka acak dari distribusi binomial dengan 10 percobaan (n_trials = 10) dan probabilitas sukses 0.5 (p_success = 0.5). Setiap angka yang dihasilkan mewakili jumlah keberhasilan dalam 10 percobaan. Histogram menunjukkan bahwa jumlah sukses cenderung berkumpul di sekitar nilai tengah (mean = 5), membentuk pola mirip distribusi normal, sesuai dengan teori distribusi binomial

Simulasi Distribusi Kontinu: Distribusi Normal

Distribusi normal adalah distribusi kontinu yang berbentuk lonceng, dengan mean mu dan standar deviasi sigma. Distribusi normal sering digunakan dalam statistik karena banyak fenomena alamiah mengikuti pola ini, seperti tinggi badan atau nilai ujian.

# simulasi 1000 variabel random dari distribusi normal
mu <- 0  # Mean
sigma <- 1  # Standar deviasi
normal_data <- rnorm(n, mean = mu, sd = sigma)

# plot histogram
hist(normal_data, breaks = 30, main = "Histogram Distribusi Normal", xlab = "Nilai", col = "darkslateblue")

Pada simulasi ini, kita menghasilkan 1000 angka acak dari distribusi normal standar dengan mean (μ) = 0 dan standar deviasi (σ) = 1. Histogram menunjukkan bentuk distribusi lonceng simetris, di mana sebagian besar data berkumpul di sekitar nilai rata-rata 0, dan semakin jauh dari rata-rata, frekuensi kemunculannya semakin berkurang.

Distribusi Poisson (Diskrit)

Distribusi Poisson digunakan untuk memodelkan jumlah kejadian dalam interval waktu atau ruang tertentu ketika kejadian terjadi secara acak dengan rata-rata tertentu.

lambda <- 3  # parameter lambda
poisson_data <- rpois(n, lambda)
hist(poisson_data, breaks = 30, main = "Histogram Distribusi Poisson", xlab = "Jumlah Kejadian", col = "cornflowerblue")

Distribusi Eksponensial (Kontinu)

Distribusi eksponensial sering digunakan untuk memodelkan waktu antar kejadian dalam proses Poisson, seperti waktu kedatangan pelanggan atau waktu kegagalan mesin.

rate <- 1  # Parameter rate
exp_data <- rexp(n, rate)
hist(exp_data, breaks = 30, main = "Histogram Distribusi Eksponensial", xlab = "Nilai", col = "darkorchid3")

Latihan Studi Kasus

Studi Kasus 1: Simulasi Pendapatan Bulanan

# Simulasi pendapatan bulanan
set.seed(123)
n_employees <- 500
mean_income <- 10000000
sd_income <- 2000000
income_data <- rnorm(n_employees, mean = mean_income, sd = sd_income)

# 1. Rata-rata pendapatan simulasi
mean_simulated <- mean(income_data)
cat("Rata-rata pendapatan simulasi:", mean_simulated, "\n")
## Rata-rata pendapatan simulasi: 10069181

Simulasi ini menggambarkan distribusi pendapatan bulanan 500 karyawan dengan rata-rata Rp10.000.000 dan standar deviasi Rp2.000.000. Hasil simulasi menunjukkan bahwa rata-rata pendapatan yang diperoleh adalah Rp10.069.181, mencerminkan variasi yang wajar dalam data acak yang dihasilkan.

# 2. Probabilitas pendapatan di atas Rp 12.000.000
prob_above_12m <- sum(income_data > 12000000) / n_employees
cat("Probabilitas pendapatan di atas Rp 12.000.000:", prob_above_12m, "\n")
## Probabilitas pendapatan di atas Rp 12.000.000: 0.164

Hasil simulasi menunjukkan bahwa sekitar 16,4% karyawan memiliki pendapatan bulanan di atas Rp12.000.000. Ini mencerminkan distribusi pendapatan yang mengikuti pola normal dengan sebagian kecil karyawan berpenghasilan lebih tinggi dari rata-rata.

Studi Kasus 2: Simulasi Jumlah Pelanggan

# Simulasi jumlah pelanggan
set.seed(123)
n_days <- 30
lambda_customers <- 50
customers_data <- rpois(n_days, lambda_customers)

# 1. Rata-rata jumlah pelanggan simulasi
mean_customers <- mean(customers_data)
cat("Rata-rata jumlah pelanggan simulasi:", mean_customers, "\n")
## Rata-rata jumlah pelanggan simulasi: 48.96667
# 2. Probabilitas jumlah pelanggan lebih dari 60
prob_above_60 <- sum(customers_data > 60) / n_days
cat("Probabilitas jumlah pelanggan lebih dari 60:", prob_above_60, "\n")
## Probabilitas jumlah pelanggan lebih dari 60: 0.03333333

Studi kasus ini mensimulasikan jumlah pelanggan harian selama 30 hari dengan distribusi Poisson, di mana rata-rata pelanggan per hari adalah 50. Dari hasil simulasi, rata-rata jumlah pelanggan yang diperoleh adalah sekitar 48,97 pelanggan per hari.
Selain itu, probabilitas jumlah pelanggan harian melebihi 60 adalah sekitar 3,33%. Ini menunjukkan bahwa kejadian pelanggan yang sangat ramai (lebih dari 60 dalam sehari) cukup jarang terjadi.

Tugas Tambahan

1. Buat simulasi untuk distribusi diskrit dan distribusi kontinu.

set.seed(123) # set seed untuk reproducibility
n <- 1010 # jumlah sampel
# Simulasi Distribusi Diskrit

## Distribusi Binomial: 1010 sampel, 10 percobaan, probabilitas sukses 0.5
n_trials <- 10
p_success <- 0.5
data_binomial <- rbinom(n, size = n_trials, prob = p_success)

hist(data_binomial, breaks = 10, main = "Distribusi Binomial", xlab = "Jumlah Sukses", col = "darkgreen", border = "white")

## Distribusi Poisson: 1010 sampel, rata-rata kejadian per interval = 3
lambda <- 3
data_poisson <- rpois(n, lambda)

hist(data_poisson, breaks = 10, main = "Distribusi Poisson", xlab = "Jumlah Kejadian", col = "darkgoldenrod2", border = "white")

# Simulasi Distribusi Kontinu

## Distribusi Normal: 1010 sampel, mean = 0, sd = 1
mu <- 0
sigma <- 1
normal_data <- rnorm(n, mean = mu, sd = sigma)

hist(normal_data, breaks = 30, main = "Distribusi Normal", xlab = "Nilai", col = "aquamarine4", border = "white")

## Distribusi Eksponensial: 1010 sampel, rate = 1
rate <- 1
exp_data <- rexp(n, rate)

hist(exp_data, breaks = 30, main = "Distribusi Eksponensial", xlab = "Nilai", col = "chocolate", border = "white")

Visualisasi di atas menunjukkan pola unik dari berbagai distribusi probabilitas. Dari distribusi binomial yang simetris hingga distribusi eksponensial yang menurun tajam, setiap grafik mencerminkan bagaimana data dapat tersebar dalam berbagai situasi. Simulasi ini membantu memahami bagaimana variabel acak berperilaku dalam berbagai kondisi.

2. Buat studi kasus sendiri yang melibatkan simulasi variabel random dari distribusi yang telah dipelajari.

Studi Kasus: Analisis Waktu Pelayanan di Sebuah Restoran Sebuah restoran ingin menganalisis jumlah pelanggan yang datang setiap jam serta waktu pelayanan setiap pelanggan untuk meningkatkan efisiensi operasional. Untuk itu, dilakukan simulasi berdasarkan distribusi probabilitas yang sesuai.

  1. Jumlah pelanggan per jam (Distribusi Poisson). Restoran memperkirakan bahwa rata-rata ada 10 pelanggan datang setiap jam. Maka, jumlah pelanggan dalam setiap jam dapat dimodelkan menggunakan distribusi poisson dengan parameter λ = 10.

  2. Jumlah item yang dipesan oleh pelanggan (Distribusi Binomial). Setiap pelanggan memiliki kemungkinan 0,7 untuk memesan lebih dari satu item, dengan jumlah maksimal 5 item. Maka, jumlah item yang dipesan setiap pelanggan dapat dimodelkan menggunakan distribusi binomial dengan n = 5, p = 0.7.

  3. Waktu pelayanan per pelanggan (Distribusi Eksponensial). Waktu pelayanan pelanggan rata-rata 5 menit, sehingga dapat dimodelkan dengan Distribusi Eksponensial dengan rate = 1/5 menit.

  4. Total pendapatan per jam (Distribusi Normal). Jika rata-rata pendapatan per pelanggan adalah Rp 50.000 dengan standar deviasi Rp 10.000, maka pendapatan per pelanggan dapat dimodelkan dengan Distribusi Normal dengan mean = 50000, sd = 10000.

set.seed(123)

# Parameter simulasi
n_hours <- 12  # Simulasi untuk 12 jam operasional
lambda_customers <- 10  # Rata-rata pelanggan per jam
n_items <- 5  # Maksimal item per pelanggan
p_item <- 0.7  # Probabilitas pelanggan membeli lebih dari 1 item
mean_service_time <- 5  # Waktu pelayanan rata-rata dalam menit
rate_service <- 1 / mean_service_time
mean_income <- 50000  # Rata-rata pendapatan per pelanggan
sd_income <- 10000  # Standar deviasi pendapatan

# Simulasi jumlah pelanggan per jam (Distribusi Poisson)
customers_per_hour <- rpois(n_hours, lambda_customers)

# Simulasi jumlah item yang dipesan pelanggan (Distribusi Binomial)
items_per_customer <- rbinom(sum(customers_per_hour), n_items, p_item)

# Simulasi waktu pelayanan pelanggan (Distribusi Eksponensial)
service_time <- rexp(sum(customers_per_hour), rate_service)

# Simulasi pendapatan per pelanggan (Distribusi Normal)
income_per_customer <- rnorm(sum(customers_per_hour), mean_income, sd_income)

# Hitung total pendapatan per jam
total_income_per_hour <- tapply(income_per_customer, rep(1:n_hours, customers_per_hour), sum)

# Output ringkasan simulasi
cat("Rata-rata jumlah pelanggan per jam:", mean(customers_per_hour), "\n")
## Rata-rata jumlah pelanggan per jam: 10.08333
cat("Rata-rata item per pelanggan:", mean(items_per_customer), "\n")
## Rata-rata item per pelanggan: 3.578512
cat("Rata-rata waktu pelayanan per pelanggan:", mean(service_time), "menit\n")
## Rata-rata waktu pelayanan per pelanggan: 4.864774 menit
cat("Rata-rata pendapatan per pelanggan: Rp", mean(income_per_customer), "\n")
## Rata-rata pendapatan per pelanggan: Rp 49745.21
cat("Total pendapatan rata-rata per jam: Rp", mean(total_income_per_hour), "\n")
## Total pendapatan rata-rata per jam: Rp 501597.5
# Load library
library(ggplot2)

# Histogram jumlah pelanggan per jam
ggplot(data.frame(customers_per_hour), aes(x = customers_per_hour)) +
  geom_histogram(binwidth = 1, fill = "steelblue", color = "black") +
  labs(title = "Distribusi Jumlah Pelanggan per Jam", x = "Jumlah Pelanggan", y = "Frekuensi") +
  theme_minimal()

# Histogram jumlah item per pelanggan
ggplot(data.frame(items_per_customer), aes(x = items_per_customer)) +
  geom_histogram(binwidth = 1, fill = "darkolivegreen4", color = "black") +
  labs(title = "Distribusi Jumlah Item per Pelanggan", x = "Jumlah Item", y = "Frekuensi") +
  theme_minimal()

# Histogram waktu pelayanan per pelanggan
ggplot(data.frame(service_time), aes(x = service_time)) +
  geom_histogram(binwidth = 1, fill = "darkorange", color = "black") +
  labs(title = "Distribusi Waktu Pelayanan", x = "Waktu Pelayanan (menit)", y = "Frekuensi") +
  theme_minimal()

# Histogram pendapatan per pelanggan
ggplot(data.frame(income_per_customer), aes(x = income_per_customer)) +
  geom_histogram(binwidth = 5000, fill = "purple", color = "black") +
  labs(title = "Distribusi Pendapatan per Pelanggan", x = "Pendapatan (Rp)", y = "Frekuensi") +
  theme_minimal()

# Histogram total pendapatan per jam
ggplot(data.frame(total_income_per_hour), aes(x = total_income_per_hour)) +
  geom_histogram(binwidth = 50000, fill = "brown1", color = "black") +
  labs(title = "Distribusi Total Pendapatan per Jam", x = "Pendapatan (Rp)", y = "Frekuensi") +
  theme_minimal()

Berdasarkan simulasi yang dilakukan, berikut beberapa temuan utama:

  1. Distribusi jumlah pelanggan per jam: variasi jumlah pelanggan per jam menunjukkan adanya fluktuasi yang cukup signifikan.Puncak distribusi menunjukkan adanya jam sibuk dengan jumlah pelanggan yang lebih banyak dibandingkan jam lainnya.
  2. Distribusi jumlah item per pelanggan: sebagian besar pelanggan membeli antara 3 hingga 5 item, menunjukkan pola pembelian yang cukup konsisten. Sebagian kecil pelanggan membeli dalam jumlah yang sangat sedikit atau sangat banyak.
  3. Distribusi waktu pelayanan: Waktu pelayanan mengikuti distribusi eksponensial, dengan sebagian besar pelanggan dilayani dalam waktu singkat.Terdapat beberapa pelanggan yang membutuhkan waktu pelayanan lebih lama, namun jumlahnya relatif kecil.
  4. Distribusi pendapatan per pelanggan: sebagian besar pelanggan berkontribusi terhadap pendapatan di kisaran Rp40.000 hingga Rp60.000.Beberapa pelanggan memiliki nilai transaksi yang lebih tinggi, namun jumlahnya tidak terlalu banyak.
  5. Distribusi total pendapatan per jam: total pendapatan per jam mengalami variasi yang besar, kemungkinan dipengaruhi oleh jumlah pelanggan dan rata-rata belanja mereka.Beberapa jam memiliki pendapatan yang jauh lebih tinggi dibandingkan jam lainnya, menunjukkan adanya peak hour.

Implikasi Bisnis:

  1. Waktu sibuk dapat dimanfaatkan untuk strategi promosi atau peningkatan efisiensi pelayanan guna mengoptimalkan pendapatan.
  2. Memahami pola pembelian pelanggan dapat membantu dalam mengatur stok dan strategi penjualan.
  3. Analisis waktu pelayanan dapat menjadi dasar untuk peningkatan efisiensi operasional.