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.
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
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
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
# 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
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.
Distribusi Normal adalah distribusi kontinu yang berbentuk lonceng (bell-shaped) dan simetris terhadap mean.
X ~ N(μ, σ²)
Karakteristik: - Mean (μ) - Standar deviasi (σ)
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
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()
# 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
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.
Simulasi variabel random sangat membantu dalam memahami perilaku distribusi probabilitas secara empiris.