Pendahuluan

Pada praktikum ini dilakukan simulasi variabel random untuk distribusi diskrit dan distribusi kontinu.
Distribusi diskrit yang digunakan adalah Distribusi Binomial, sedangkan distribusi kontinu yang digunakan adalah Distribusi Normal.

Simulasi dilakukan untuk melihat apakah hasil empiris mendekati nilai teoritis.


1. Simulasi Distribusi Diskrit – Distribusi Binomial

Konsep Teori

Distribusi Binomial digunakan untuk menghitung banyaknya keberhasilan (success) dalam sejumlah percobaan tetap (n), dengan probabilitas sukses tetap (p).

Secara matematis:

X ~ Binomial(n, p)

Nilai harapan: E(X) = n × p


Studi Kasus

Sebuah toko online memiliki probabilitas 30% bahwa pelanggan yang melihat iklan akan melakukan pembelian.

Jika terdapat 20 pelanggan yang melihat iklan dalam satu hari, maka:

n = 20
p = 0.3

Kita akan melakukan simulasi sebanyak 5000 kali.


set.seed(123)

n <- 20
p <- 0.3

sim_binomial <- rbinom(5000, size = n, prob = p)

mean_sim <- mean(sim_binomial)
mean_teori <- n * p

mean_sim
## [1] 5.9838
mean_teori
## [1] 6

Visualisasi

df_binom <- data.frame(Jumlah_Pembeli = sim_binomial)

ggplot(df_binom, aes(x = Jumlah_Pembeli)) +
  geom_histogram(aes(y = ..density..),
                 binwidth = 1,
                 fill = "skyblue",
                 color = "black") +
  stat_function(fun = dbinom,
                args = list(size = n, prob = p),
                color = "red",
                size = 1) +
  labs(title = "Simulasi Distribusi Binomial",
       x = "Jumlah Pelanggan Membeli",
       y = "Density") +
  theme_minimal()
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## Warning: The dot-dot notation (`..density..`) was deprecated in ggplot2 3.4.0.
## ℹ Please use `after_stat(density)` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 0.140000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 0.280000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 0.420000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 0.560000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 0.700000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 0.840000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 0.980000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 1.120000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 1.260000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 1.400000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 1.540000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 1.680000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 1.820000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 1.960000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 2.100000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 2.240000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 2.380000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 2.520000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 2.660000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 2.800000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 2.940000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 3.080000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 3.220000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 3.360000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 3.500000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 3.640000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 3.780000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 3.920000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 4.060000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 4.200000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 4.340000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 4.480000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 4.620000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 4.760000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 4.900000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 5.040000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 5.180000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 5.320000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 5.460000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 5.600000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 5.740000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 5.880000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 6.020000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 6.160000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 6.300000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 6.440000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 6.580000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 6.720000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 6.860000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 7.140000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 7.280000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 7.420000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 7.560000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 7.700000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 7.840000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 7.980000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 8.120000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 8.260000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 8.400000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 8.540000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 8.680000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 8.820000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 8.960000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 9.100000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 9.240000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 9.380000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 9.520000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 9.660000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 9.800000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 9.940000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 10.080000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 10.220000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 10.360000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 10.500000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 10.640000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 10.780000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 10.920000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 11.060000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 11.200000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 11.340000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 11.480000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 11.620000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 11.760000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 11.900000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 12.040000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 12.180000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 12.320000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 12.460000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 12.600000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 12.740000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 12.880000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 13.020000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 13.160000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 13.300000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 13.440000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 13.580000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 13.720000
## Warning in fun(x_trans, size = 20, prob = 0.3): non-integer x = 13.860000

Analisis Peluang

# Peluang teoritis P(X > 8)
prob_teori_binom <- 1 - pbinom(8, size = n, prob = p)

# Peluang simulasi
prob_sim_binom <- mean(sim_binomial > 8)

prob_teori_binom
## [1] 0.1133315
prob_sim_binom
## [1] 0.108

Interpretasi

Rata-rata hasil simulasi mendekati nilai teoritis 6 (20 × 0.3).
Hal ini menunjukkan bahwa simulasi telah merepresentasikan distribusi binomial dengan baik.

Nilai peluang teoritis dan peluang simulasi untuk P(X > 8) juga mendekati sama, sehingga model simulasi dapat dianggap valid.

Distribusi terlihat sedikit miring ke kanan karena probabilitas sukses kurang dari 0.5.


2. Simulasi Distribusi Kontinu – Distribusi Normal

Konsep Teori

Distribusi Normal adalah distribusi kontinu yang berbentuk lonceng (bell-shaped) dan simetris terhadap mean.

X ~ N(μ, σ²)

Karakteristik: - Mean (μ) - Standar deviasi (σ)


Studi Kasus

Waktu pelayanan nasabah di sebuah bank memiliki rata-rata 10 menit dan standar deviasi 2 menit.

μ = 10
σ = 2

Simulasi dilakukan sebanyak 5000 data.


set.seed(123)

mean_time <- 10
sd_time <- 2

sim_normal <- rnorm(5000, mean = mean_time, sd = sd_time)

mean_sim_norm <- mean(sim_normal)
sd_sim_norm <- sd(sim_normal)

mean_sim_norm
## [1] 9.998861
sd_sim_norm
## [1] 1.989142

Visualisasi

df_norm <- data.frame(Waktu = sim_normal)

ggplot(df_norm, aes(x = Waktu)) +
  geom_histogram(aes(y = ..density..),
                 bins = 30,
                 fill = "lightgreen",
                 color = "black") +
  stat_function(fun = dnorm,
                args = list(mean = mean_time, sd = sd_time),
                color = "red",
                size = 1) +
  labs(title = "Simulasi Distribusi Normal",
       x = "Waktu Pelayanan (menit)",
       y = "Density") +
  theme_minimal()

Analisis Peluang

# Peluang teoritis P(X > 12)
prob_teori_norm <- 1 - pnorm(12, mean = mean_time, sd = sd_time)

# Peluang simulasi
prob_sim_norm <- mean(sim_normal > 12)

prob_teori_norm
## [1] 0.1586553
prob_sim_norm
## [1] 0.1562

Interpretasi

Rata-rata simulasi mendekati 10 dan standar deviasi mendekati 2, sesuai parameter awal.
Histogram menunjukkan bentuk simetris menyerupai kurva lonceng.

Nilai peluang simulasi dan teoritis untuk P(X > 12) juga hampir sama, sehingga dapat disimpulkan bahwa simulasi berhasil menggambarkan distribusi normal secara akurat.


Kesimpulan

  1. Distribusi Binomial cocok digunakan untuk variabel diskrit seperti jumlah pelanggan yang membeli.
  2. Distribusi Normal cocok digunakan untuk variabel kontinu seperti waktu pelayanan.
  3. Hasil simulasi mendekati nilai teoritis.
  4. Semakin besar jumlah simulasi, hasil semakin mendekati teori (Hukum Bilangan Besar).

Simulasi variabel random sangat membantu dalam memahami perilaku distribusi probabilitas secara empiris.