#Variabel Acak dan Simulasi: Meneropong Keacakan melalui Logika dan Eksperimen
##Pendahuluan ###Dalam kehidupan sehari-hari, kenyataan seringkali tidak linier dan tak terduga. Kita tidak bisa selalu meramal jumlah pelanggan yang datang esok hari, atau memastikan tinggi badan anak yang baru lahir. Maka, kita tidak hanya butuh logika deterministik, tetapi juga jembatan probabilistik. Jembatan inilah yang dibangun oleh variabel acak.
##Apa Itu Variabel Acak? ###Variabel acak (random variable) adalah representasi matematis dari fenomena acak, di mana setiap nilai bergantung pada hasil dari suatu percobaan yang tidak pasti. Variabel ini terbagi menjadi dua jenis utama:
###Ketika semua kemungkinan dianggap setara, distribusi uniform menjadi cermin keadilan.
# Simulasi 1000 variabel random dari distribusi uniform
set.seed(123) # 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 = "lightblue")
set.seed(123)
uniform_data <- runif(1000, min = 0, max = 1)
hist(uniform_data, breaks = 30, main = "Distribusi Uniform", xlab = "Nilai", col = "lightblue")
### Distribusi ini menyebar rata, merepresentasikan situasi di mana
tiada satu nilai pun lebih diistimewakan dari yang lain.
# 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 = "lightgreen")
binomial_data <- rbinom(1000, size = 10, prob = 0.5)
hist(binomial_data, breaks = 30, main = "Distribusi Binomial", xlab = "Jumlah Sukses", col = "lightgreen")
### Distribusi ini digunakan ketika kita ingin tahu berapa kali berhasil
dari sejumlah percobaan. ### rbinom(n, size, prob) digunakan untuk
menghasilkan n variabel random dari distribusi binomial dengan size
percobaan dan probabilitas sukses prob. Histogram menunjukkan distribusi
jumlah sukses, yang berbentuk simetris karena p = 0.5.
# 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 = "lightpink")
normal_data <- rnorm(1000, mean = 0, sd = 1)
hist(normal_data, breaks = 30, main = "Distribusi Normal", xlab = "Nilai", col = "lightpink")
### Kurva loncengnya menandakan keumuman: fenomena alam, sosial, hingga
ekonomi sering kali mengikuti pola ini. ### mean, sd) digunakan untuk
menghasilkan n variabel random dari distribusi normal dengan mean mu dan
standar deviasi sigma. Histogram menunjukkan distribusi berbentuk
lonceng, yang khas untuk distribusi normal.
lambda <- 3 # Parameter lambda
poisson_data <- rpois(n, lambda)
hist(poisson_data, breaks = 30, main = "Histogram Distribusi Poisson", xlab = "Jumlah Kejadian", col = "lightyellow")
poisson_data <- rpois(1000, lambda = 3)
hist(poisson_data, breaks = 30, main = "Distribusi Poisson", xlab = "Jumlah Kejadian", col = "lightyellow")
### Distribusi ini cocok untuk peristiwa jarang tapi signifikan seperti
kecelakaan, bencana, atau bahkan kelahiran.
exp_data <- rexp(1000, rate = 1)
hist(exp_data, breaks = 30, main = "Distribusi Eksponensial", xlab = "Waktu", col = "lightcoral")
### Distribusi ini mengukur interval waktu antara dua peristiwa dalam
proses acak. ### Distribusi eksponensial digunakan untuk memodelkan
waktu antara kejadian dalam proses Poisson. Histogram menunjukkan
distribusi yang miring ke kanan, dengan nilai-nilai yang semakin kecil
semakin sering muncul.
# 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
## Rata-rata pendapatan simulasi: 10069181
# 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
## Probabilitas pendapatan di atas Rp 12.000.000: 0.164
# 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
## 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
## Probabilitas jumlah pelanggan lebih dari 60: 0.03333333
# Distribusi Poisson - jumlah pelanggan harian
set.seed(101)
poisson_data <- rpois(1000, lambda = 20)
hist(poisson_data, breaks = 30, col = "skyblue", main = "Simulasi Poisson", xlab = "Jumlah Pelanggan")
# Distribusi Binomial - jumlah sukses dari percobaan
binomial_data <- rbinom(1000, size = 10, prob = 0.7)
hist(binomial_data, breaks = 20, col = "lightgreen", main = "Simulasi Binomial", xlab = "Jumlah Sukses")
## A. Distribusi Diskrit ### Distribusi Poisson – Jumlah Pelanggan
Harian
poisson_data <- rpois(1000, lambda = 20)
hist(poisson_data, breaks = 30, col = "skyblue", main = "Simulasi Poisson", xlab = "Jumlah Pelanggan")
### Interpretasi: Distribusi Poisson digunakan untuk memodelkan jumlah
kejadian langka dalam periode tetap. Dalam simulasi ini, kita
mengasumsikan rata-rata kedatangan pelanggan per hari adalah 20. Hasil
histogram memperlihatkan mayoritas nilai berpusat di sekitar 20, namun
tetap menunjukkan penyebaran ke arah kanan, mencerminkan sifat asimetris
Poisson—dimana kejadian yang lebih banyak dari rata-rata masih mungkin,
namun semakin jarang.
binomial_data <- rbinom(1000, size = 10, prob = 0.7)
hist(binomial_data, breaks = 20, col = "lightgreen", main = "Simulasi Binomial", xlab = "Jumlah Sukses")
### Distribusi binomial memodelkan jumlah keberhasilan dalam percobaan
yang independen. Di sini, kita melakukan 10 percobaan per individu,
dengan peluang sukses 70%. Histogram menunjukkan bahwa sebagian besar
nilai berkumpul di sekitar 7 (karena 10 × 0.7 = 7). Ini mencerminkan
probabilitas tinggi terhadap keberhasilan dan menciptakan distribusi
yang condong ke kiri.
# Distribusi Eksponensial - waktu tunggu pelanggan
exp_data <- rexp(1000, rate = 1/5)
hist(exp_data, breaks = 30, col = "salmon", main = "Simulasi Eksponensial", xlab = "Waktu Tunggu (menit)")
# Distribusi Normal - tinggi badan manusia
normal_data <- rnorm(1000, mean = 165, sd = 8)
hist(normal_data, breaks = 30, col = "orchid", main = "Simulasi Normal", xlab = "Tinggi Badan (cm)")
### Distribusi Eksponensial – Waktu Tunggu Pelanggan
exp_data <- rexp(1000, rate = 1/5)
hist(exp_data, breaks = 30, col = "salmon", main = "Simulasi Eksponensial", xlab = "Waktu Tunggu (menit)")
### Distribusi eksponensial sering digunakan untuk memodelkan waktu
antara kejadian, seperti waktu tunggu. Dengan rata-rata waktu tunggu 5
menit, histogram memperlihatkan bahwa waktu tunggu yang pendek lebih
sering terjadi, sementara waktu tunggu yang panjang makin jarang. Inilah
sifat khas eksponensial: cepat di awal, melambat di akhir—mirip waktu
antrian saat pagi ramai dan sore mulai sepi.
normal_data <- rnorm(1000, mean = 165, sd = 8)
hist(normal_data, breaks = 30, col = "orchid", main = "Simulasi Normal", xlab = "Tinggi Badan (cm)")
### Distribusi normal digunakan untuk memodelkan fenomena alami seperti
tinggi badan. Dengan rata-rata 165 cm dan simpangan baku 8 cm, histogram
membentuk kurva lonceng simetris—menandakan bahwa sebagian besar orang
memiliki tinggi di sekitar 165 cm, sementara sangat sedikit yang jauh
lebih tinggi atau lebih pendek.
set.seed(2025)
n_patients <- 1000
waiting_times <- rexp(n_patients, rate = 1/7)
mean_wait <- mean(waiting_times)
prob_above_10 <- sum(waiting_times > 10) / n_patients
hist(waiting_times, breaks = 30, col = "plum", main = "Waktu Tunggu Pasien", xlab = "Menit")
cat("Rata-rata waktu tunggu:", round(mean_wait, 2), "menit\n")
## Rata-rata waktu tunggu: 7.1 menit
cat("Proporsi pasien menunggu > 10 menit:", round(prob_above_10 * 100, 2), "%\n")
## Proporsi pasien menunggu > 10 menit: 24.8 %