PEMODELAN STATISTIKA DAN SIMULASI
Nabila Rahayu Rosdiana Putri


Simulasi Variabel Random

Variabel Random adalah variabel yang nilainya ditentukan oleh hasil dari suatu percobaan acak. Variabel random dapat dibagi menjadi dua jenis:

  1. Variabel Random Diskrit: Variabel yang hanya dapat mengambil nilai-nilai tertentu (biasanya bilangan bulat). Contoh: jumlah pelanggan yang datang ke restoran dalam sehari; dan
  2. Variabel Random Kontinu: Variabel yang dapat mengambil nilai apa pun dalam suatu interval. Contoh: tinggi badan seseorang, pendapatan bulanan.

Dalam pemodelan statistika dan simulasi, variabel random digunakan untuk memodelkan fenomena acak. Simulasi variabel random membantu kita memahami distribusi data, menghitung probabilitas, dan membuat prediksi berdasarkan model yang telah dibuat.


Simulasi Untuk Distribusi Diskrit dan Distribusi Kontinu


set.seed(123)

n <- 1000
n_trials <- 20
p_success <- 0.6

binomial_data <- rbinom(n, size = n_trials, prob = p_success)

hist(binomial_data,
     breaks = 20,
     main = "Histogram Distribusi Binomial",
     xlab = "Jumlah Sukses",
     col = "lightgreen")

mean_binom <- mean(binomial_data)
var_binom <- var(binomial_data)

cat("Rata-rata simulasi:", mean_binom, "\n")
## Rata-rata simulasi: 12.021
cat("Variansi simulasi:", var_binom, "\n")
## Variansi simulasi: 4.749308
set.seed(123)

n <- 1000
mu <- 50
sigma <- 10

normal_data <- rnorm(n, mean = mu, sd = sigma)

hist(normal_data,
     breaks = 30,
     main = "Histogram Distribusi Normal",
     xlab = "Nilai",
     col = "lightblue")

mean_normal <- mean(normal_data)
sd_normal <- sd(normal_data)

cat("Rata-rata simulasi:", mean_normal, "\n")
## Rata-rata simulasi: 50.16128
cat("Standar deviasi simulasi:", sd_normal, "\n")
## Standar deviasi simulasi: 9.91695

Studi Kasus Yang Melibatkan Simulasi Variabel Random

Analisis Kecukupan Tenaga Medis di Klinik/Rumah Sakit

Analisis ini mengevaluasi kecukupan staf medis dengan menggabungkan dua variabel random. Pertama, kedatangan pasien dimodelkan dengan distribusi Poisson berdasarkan rata-rata 30 pasien per hari selama sebulan untuk memprediksi risiko lonjakan kunjungan. Kedua, lama perawatan setiap pasien dimodelkan dengan distribusi Normal (rata-rata 2 jam) guna menangkap variasi durasi pelayanan yang berbeda-beda tiap individu.

Dengan mengalikan rata-rata jumlah pasien dan durasi perawatan, kita mendapatkan total estimasi beban kerja harian. Angka ini kemudian dikomparasi dengan total kapasitas 10 tenaga medis (80 jam kerja). Jika beban kerja melebihi kapasitas tersedia, sistem akan mengidentifikasi bahwa jumlah staf saat ini tidak mencukupi, sehingga manajemen dapat mengambil langkah mitigasi seperti penambahan jam operasional atau perekrutan staf baru.


set.seed(123)

n_days <- 30
lambda_patients <- 30

patients_data <- rpois(n_days, lambda_patients)

patients_data
##  [1] 26 36 20 30 39 32 23 20 36 31 32 30 26 37 34 29 25 24 28 24 26 29 23 23 28
## [26] 22 34 34 34 33
mean_patients <- mean(patients_data)
cat("\nRata-rata pasien per hari:", mean_patients, "\n")
## 
## Rata-rata pasien per hari: 28.93333
prob_above_35 <- sum(patients_data > 35) / n_days
cat("Probabilitas pasien > 35:", prob_above_35, "\n")
## Probabilitas pasien > 35: 0.1333333
set.seed(123)

n_patients <- 1000
mu_time <- 2
sd_time <- 0.5

treatment_time <- rnorm(n_patients, mean = mu_time, sd = sd_time)

treatment_time[treatment_time < 0] <- 0

mean_time <- mean(treatment_time)
cat("\nRata-rata lama perawatan (jam):", mean_time, "\n")
## 
## Rata-rata lama perawatan (jam): 2.008064
prob_above_3 <- sum(treatment_time > 3) / n_patients
cat("Probabilitas perawatan > 3 jam:", prob_above_3, "\n")
## Probabilitas perawatan > 3 jam: 0.028
total_service_hours <- mean_patients * mean_time
cat("\nEstimasi total jam pelayanan per hari:", total_service_hours, "\n")
## 
## Estimasi total jam pelayanan per hari: 58.09998
tenaga_medis <- 10
jam_kerja <- 8

kapasitas_total <- tenaga_medis * jam_kerja
cat("Total kapasitas jam tenaga medis:", kapasitas_total, "\n")
## Total kapasitas jam tenaga medis: 80
if(total_service_hours > kapasitas_total){
  cat("\nTenaga medis TIDAK mencukupi.\n")
} else {
  cat("\nTenaga medis mencukupi.\n")
}
## 
## Tenaga medis mencukupi.