Simulasi Sederhana: Variabel Random Uniform

Distribusi uniform adalah distribusi di mana semua nilai dalam interval tertentu memiliki probabilitas yang sama.

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

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.

Simulasi Distribusi Diskrit: Distribusi Binomial

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

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 Distribusi Kontinu: Distribusi Normal

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

menghasilkan n variabel random dari distribusi normal dengan mean mu dan standar deviasi sigma. Histogram menunjukkan distribusi berbentuk lonceng, yang khas untuk distribusi normal.

Distribusi Poisson (Diskrit)

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

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.

Distribusi Eksponensial (Kontinu)

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

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

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

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

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.

Tambahan tugas

  1. Distribusi Diskrit: Distribusi Binomial Studi Kasus: Sebuah pabrik menghasilkan produk dengan tingkat cacat sebesar 5%. Setiap hari, pabrik memproduksi 100 produk. Kita ingin mensimulasikan jumlah produk cacat yang dihasilkan dalam 30 hari.
# Parameter distribusi binomial
n <- 100  # Jumlah percobaan (produk per hari)
p <- 0.05 # Probabilitas sukses (produk cacat)
hari <- 30 # Jumlah hari

# Simulasi jumlah produk cacat per hari
set.seed(123) # Untuk hasil yang reproducible
produk_cacat <- rbinom(hari, n, p)

# Menampilkan hasil simulasi
print(produk_cacat)
##  [1]  4  7  4  8  9  2  5  8  5  5  9  5  6  5  2  8  3  2  4  9  8  6  6 11  6
## [26]  6  5  5  4  3
# Visualisasi hasil simulasi
hist(produk_cacat, breaks = 10, main = "Distribusi Jumlah Produk Cacat per Hari",
     xlab = "Jumlah Produk Cacat", ylab = "Frekuensi", col = "lightblue")

Distribusi Binomial:

Akan menghasilkan vektor dengan 30 nilai, masing-masing mewakili jumlah produk cacat per hari.

Histogram akan menunjukkan distribusi frekuensi jumlah produk cacat.

  1. Distribusi Kontinu: Distribusi Normal Studi Kasus: Tinggi badan siswa di sebuah sekolah diketahui berdistribusi normal dengan rata-rata 160 cm dan standar deviasi 10 cm. Kita ingin mensimulasikan tinggi badan 200 siswa.
# Parameter distribusi normal
mean <- 160 # Rata-rata
sd <- 10    # Standar deviasi
n_siswa <- 200 # Jumlah siswa

# Simulasi tinggi badan siswa
set.seed(123) # Untuk hasil yang reproducible
tinggi_badan <- rnorm(n_siswa, mean, sd)

# Menampilkan hasil simulasi
print(tinggi_badan)
##   [1] 154.3952 157.6982 175.5871 160.7051 161.2929 177.1506 164.6092 147.3494
##   [9] 153.1315 155.5434 172.2408 163.5981 164.0077 161.1068 154.4416 177.8691
##  [17] 164.9785 140.3338 167.0136 155.2721 149.3218 157.8203 149.7400 152.7111
##  [25] 153.7496 143.1331 168.3779 161.5337 148.6186 172.5381 164.2646 157.0493
##  [33] 168.9513 168.7813 168.2158 166.8864 165.5392 159.3809 156.9404 156.1953
##  [41] 153.0529 157.9208 147.3460 181.6896 172.0796 148.7689 155.9712 155.3334
##  [49] 167.7997 159.1663 162.5332 159.7145 159.5713 173.6860 157.7423 175.1647
##  [57] 144.5125 165.8461 161.2385 162.1594 163.7964 154.9768 156.6679 149.8142
##  [65] 149.2821 163.0353 164.4821 160.5300 169.2227 180.5008 155.0897 136.9083
##  [73] 170.0574 152.9080 153.1199 170.2557 157.1523 147.7928 161.8130 158.6111
##  [81] 160.0576 163.8528 156.2934 166.4438 157.7951 163.3178 170.9684 164.3518
##  [89] 156.7407 171.4881 169.9350 165.4840 162.3873 153.7209 173.6065 153.9974
##  [97] 181.8733 175.3261 157.6430 149.7358 152.8959 162.5688 157.5331 156.5246
## [105] 150.4838 159.5497 152.1510 143.3206 156.1977 169.1900 154.2465 166.0796
## [113] 143.8212 159.4444 165.1941 163.0115 161.0568 153.5929 151.5030 149.7587
## [121] 161.1765 150.5253 155.0944 157.4391 178.4386 153.4805 162.3539 160.7796
## [129] 150.3814 159.2869 174.4455 164.5150 160.4123 155.7750 139.4675 171.3134
## [137] 145.3936 167.3995 179.0910 145.5611 167.0178 157.3780 144.2786 144.8533
## [145] 143.9846 154.6909 145.3824 166.8792 181.0011 147.1297 167.8774 167.6904
## [153] 163.3220 149.9162 158.8055 157.1960 165.6299 156.2756 169.7697 156.2542
## [161] 170.5271 149.5082 147.3984 192.4104 155.8314 162.9823 166.3657 155.1622
## [169] 165.1686 163.6896 157.8462 160.6529 159.6593 181.2845 152.5866 149.0400
## [177] 160.3779 163.1048 164.3652 155.4163 149.3667 172.6319 156.5035 151.3449
## [185] 157.6372 158.0282 171.0992 160.8474 167.5405 155.0071 162.1445 156.7531
## [193] 160.9458 151.0464 146.8920 179.9721 166.0071 147.4873 153.8883 148.1452
# Visualisasi hasil simulasi
hist(tinggi_badan, breaks = 20, main = "Distribusi Tinggi Badan Siswa",
     xlab = "Tinggi Badan (cm)", ylab = "Frekuensi", col = "lightgreen")

Distribusi Normal:

Akan menghasilkan vektor dengan 200 nilai, masing-masing mewakili tinggi badan siswa.

Histogram akan menunjukkan distribusi frekuensi tinggi badan siswa.