#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:

- Diskrit: Hanya dapat bernilai tertentu, biasanya bilangan bulat.

- Contoh: jumlah pelanggan harian, jumlah kelahiran, lemparan dadu.

- Kontinu: Dapat bernilai tak terhingga dalam suatu interval.

- Contoh: pendapatan bulanan, suhu, waktu tunggu.

- Simulasi variabel acak menjadi penting ketika kita ingin meniru realitas dan memahami pola dari ketidakpastian itu sendiri.

Simulasi Distribusi: Menyalin Pola Dunia ke dalam Angka

1. Distribusi Uniform (Seragam)

###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")

Versi Dirubah Dikit

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.

runif(n, min, max) digunakan untuk menghasilkan n variabel random dari distribusi uniform dengan rentang min hingga max. Histogram menunjukkan bahwa nilai-nilai tersebar merata antara 0 dan 1, sesuai dengan sifat distribusi uniform.

2. Distribusi Binomial

Ketika keberhasilan dan kegagalan dipertaruhkan dalam percobaan, binomial jadi penjaga proporsi.

Distribusi binomial menggambarkan jumlah sukses dalam n percobaan independen dengan probabilitas sukses p.

# 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")

Versi Dirubah Dikit

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.

3. Distribusi Normal

Jika dunia adalah simetri dan mayoritas berada di tengah, distribusi normal menjadi manifestasi keselarasan statistik.

Distribusi normal adalah distribusi kontinu yang berbentuk lonceng, dengan mean mu dan standar deviasi sigma.

# 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")

Versi Dirubah Dikit

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.

4. Distribusi Poisson (Diskrit)

Ketika kita menghitung kejadian langka dalam kerangka waktu, distribusi Poisson menjadi saksi.

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

Versi Dirubah Dikit

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.

Distribusi Poisson digunakan untuk memodelkan jumlah kejadian langka dalam interval waktu atau ruang. Histogram menunjukkan distribusi yang miring ke kanan, yang khas untuk distribusi Poisson dengan lambda kecil.

#5. Distribusi Eksponensial ### Jika waktu adalah misteri antara satu peristiwa dan lainnya, distribusi eksponensial mengungkap celahnya.

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

Versi Dirubah Dikit

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.

Latihan Studi Kasus

1. Simulasi Pendapatan Bulanan Karyawan

Sebuah perusahaan ingin mengetahui profil pendapatan karyawannya berdasarkan distribusi normal.

# 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 ini memodelkan pendapatan bulanan karyawan dengan distribusi normal.

•Rata-rata pendapatan simulasi mendekati mean yang diberikan (Rp 10.000.000).

•Probabilitas pendapatan di atas Rp 12.000.000 dihitung dengan menghitung proporsi data yang melebihi nilai tersebut.

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
## 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

Simulasi ini memodelkan jumlah pelanggan yang datang ke restoran setiap hari dengan distribusi Poisson.

•Rata-rata jumlah pelanggan simulasi mendekati lambda (50).

•Probabilitas jumlah pelanggan lebih dari 60 dihitung dengan menghitung proporsi data yang melebihi nilai tersebut.

Tugas Tambahan

1.Buat simulasi untuk distribusi diskrit dan distribusi kontinu.

A. Distribusi Diskrit

Simulasikan jumlah pelanggan toko per hari menggunakan distribusi Poisson dan Binomial.

# 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.

Distribusi Binomial – Jumlah Sukses dalam Percobaan

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.

B. Distribusi Kontinu

Simulasikan waktu tunggu pelanggan (eksponensial) dan pengukuran tinggi badan (normal).

# 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.

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 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.

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

Studi Kasus: Simulasi Waktu Tunggu di Klinik Gigi

Anda adalah seorang analis sistem pada sebuah klinik gigi. Anda ingin memperkirakan waktu tunggu rata-rata pasien, dan berapa banyak pasien yang harus menunggu lebih dari 10 menit berdasarkan data historis yang menunjukkan bahwa waktu antar kedatangan pasien mengikuti distribusi eksponensial.

Studi Kasus Mandiri: Simulasi Waktu Tunggu di Klinik Gigi

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 %

Rata-rata waktu tunggu pasien adalah 6.84 menit, mendekati nilai harapan (ekspektasi) dari distribusi eksponensial yaitu 7 menit.

Sekitar 24.6% pasien mengalami waktu tunggu lebih dari 10 menit, yang berarti hampir 1 dari 4 pasien harus bersabar lebih lama dari standar ideal pelayanan.

Dengan kata lain, distribusi ini memperlihatkan bagaimana ketidakpastian pelayanan dapat dimodelkan, dan mengarahkan kita untuk mencari solusi pengurangan waktu tunggu lewat penjadwalan yang lebih cermat.