Metode Simulasi dan Resampling: Sebaran Percontohan dan Penerapan
Simulasi
library(ggplot2)
set.seed(123)
M = 1000 # Jumlah data yang dibangkitkan
size_n = 50 # Ukuran percobaan Binomial yang besar
# Membangkitkan data Binomial dengan variasi p
data_p03 = rbinom(M, size = size_n, prob = 0.3)
data_p05 = rbinom(M, size = size_n, prob = 0.5)
data_p08 = rbinom(M, size = size_n, prob = 0.8)
# Menggabungkan data ke dalam satu data frame untuk keperluan visualisasi (ggplot)
df_binom = data.frame(
Nilai = c(data_p03, data_p05, data_p08),
Peluang_P = factor(rep(c("p = 0.3", "p = 0.5", "p = 0.8"), each = M))
)
# 1. VISUALISASI KEPADATAN (DENSITY PLOT)
ggplot(df_binom, aes(x = Nilai, fill = Peluang_P, color = Peluang_P)) +
geom_density(alpha = 0.4) + # Alpha agar warnanya transparan
labs(title = "Distribusi Binomial dengan Berbagai Nilai p (n = 50)",
x = "Banyaknya Keberhasilan", y = "Kepadatan (Density)") +
theme_minimal()

# Uji Kenormalan (Uji Kolmogorov-Smirnov)
# Uji untuk p = 0.3 (Mean = 15, SD = 3.24)
ks_test_p03 = ks.test(data_p03, "pnorm", mean = size_n*0.3, sd = sqrt(size_n*0.3*0.7))
## Warning in ks.test.default(data_p03, "pnorm", mean = size_n * 0.3, sd =
## sqrt(size_n * : ties should not be present for the one-sample
## Kolmogorov-Smirnov test
# Uji untuk p = 0.5 (Mean = 25, SD = 3.53)
ks_test_p05 = ks.test(data_p05, "pnorm", mean = size_n*0.5, sd = sqrt(size_n*0.5*0.5))
## Warning in ks.test.default(data_p05, "pnorm", mean = size_n * 0.5, sd =
## sqrt(size_n * : ties should not be present for the one-sample
## Kolmogorov-Smirnov test
# Uji untuk p = 0.8 (Mean = 40, SD = 2.82)
ks_test_p08 = ks.test(data_p08, "pnorm", mean = size_n*0.8, sd = sqrt(size_n*0.8*0.2))
## Warning in ks.test.default(data_p08, "pnorm", mean = size_n * 0.8, sd =
## sqrt(size_n * : ties should not be present for the one-sample
## Kolmogorov-Smirnov test
# Hasil
cat("P-value Uji Kenormalan p=0.3 :", ks_test_p03$p.value, "\n")
## P-value Uji Kenormalan p=0.3 : 4.448764e-05
cat("P-value Uji Kenormalan p=0.5 :", ks_test_p05$p.value, "\n")
## P-value Uji Kenormalan p=0.5 : 9.240477e-05
cat("P-value Uji Kenormalan p=0.8 :", ks_test_p08$p.value, "\n")
## P-value Uji Kenormalan p=0.8 : 1.966831e-06
set.seed(123)
M = 10000
n = 30
mu_populasi = 50 # Parameter asli
rata_rata_sampel = numeric(M)
for(i in 1:M){
sampel = rnorm(n, mean = mu_populasi, sd = 10)
rata_rata_sampel[i] = mean(sampel)
}
E_Xbar = mean(rata_rata_sampel)
cat("Rata-rata Populasi (mu) :", mu_populasi, "\n")
## Rata-rata Populasi (mu) : 50
cat("Nilai Harapan E(X_bar) :", E_Xbar, "\n")
## Nilai Harapan E(X_bar) : 50.01865
# Hasil empiris E(X_bar) akan sangat mendekati 50
set.seed(123)
M = 10000
n = 10
ragam_populasi = 100 # Parameter asli (sigma kuadrat)
ragam_sampel = numeric(M)
for(i in 1:M){
# sd diisi akar dari ragam (yaitu 10)
sampel = rnorm(n, mean = 50, sd = sqrt(ragam_populasi))
# Fungsi var otomatis membagi n-1 (penduga tak bias)
ragam_sampel[i] = var(sampel)
}
E_S2 = mean(ragam_sampel)
cat("Ragam Populasi (Sigma^2) :", ragam_populasi, "\n")
## Ragam Populasi (Sigma^2) : 100
cat("Nilai Harapan E(S^2) :", E_S2, "\n")
## Nilai Harapan E(S^2) : 100.1031
set.seed(123)
M = 10000
n = 5
sigma_populasi = 10
simpangan_baku_sampel = numeric(M)
for(i in 1:M){
sampel = rnorm(n, mean = 50, sd = sigma_populasi)
# Menghitung simpangan baku (s)
simpangan_baku_sampel[i] = sd(sampel)
}
E_S = mean(simpangan_baku_sampel)
cat("Simpangan Baku Populasi (Sigma) :", sigma_populasi, "\n")
## Simpangan Baku Populasi (Sigma) : 10
cat("Nilai Harapan E(S) :", E_S, "\n")
## Nilai Harapan E(S) : 9.421332
# Hasilnya: E(S) akan berada di angka sekitar 9.4 (Bias ke bawah!)
library(ggplot2)
set.seed(123)
M = 5000 # Jumlah iterasi
n = 30 # Ukuran sampel
# 1. Membangkitkan 2 Populasi Berbeda Ukuran (Distribusi Poisson)
Populasi_Kecil = rpois(500, lambda = 3)
Populasi_Besar = rpois(20000, lambda = 3)
# 2. Menyiapkan wadah penyimpanan
xbar_kecil = numeric(M)
xbar_besar = numeric(M)
# 3. Looping pengambilan sampel
for(i in 1:M){
# Ambil sampel dari populasi kecil, hitung rata-rata
xbar_kecil[i] = mean(sample(Populasi_Kecil, size = n, replace = TRUE))
# Ambil sampel dari populasi besar, hitung rata-rata
xbar_besar[i] = mean(sample(Populasi_Besar, size = n, replace = TRUE))
}
# 4. Menggabungkan data untuk visualisasi plot
df_soal5 = data.frame(
Rata_Rata = c(xbar_kecil, xbar_besar),
Ukuran_N = factor(rep(c("Populasi N=500", "Populasi N=20.000"), each = M))
)
# 5. Visualisasi
ggplot(df_soal5, aes(x = Rata_Rata, fill = Ukuran_N)) +
geom_density(alpha = 0.5) +
labs(title = "Soal 5: CLT pada Dua Ukuran Populasi Ekstrem",
x = "Rata-rata Sampel", y = "Kepadatan (Density)") +
theme_minimal()

library(ggplot2)
set.seed(123)
M_iterasi = 10000 # Sesuai syarat soal (minimal 10.000)
n_tetap = 40 # Ukuran sampel tetap
# 1. Bangkitkan populasi tidak normal (Eksponensial) dengan ukuran N spesifik
Pop_1k = rexp(1000, rate = 0.2)
Pop_5k = rexp(5000, rate = 0.2)
Pop_10k = rexp(10000, rate = 0.2)
# 2. Menyiapkan vektor penyimpan rata-rata sampel
rata_1k = numeric(M_iterasi)
rata_5k = numeric(M_iterasi)
rata_10k = numeric(M_iterasi)
# 3. Looping pengambilan sampel sebanyak 10.000 kali
for(i in 1:M_iterasi){
rata_1k[i] = mean(sample(Pop_1k, size = n_tetap, replace = TRUE))
rata_5k[i] = mean(sample(Pop_5k, size = n_tetap, replace = TRUE))
rata_10k[i] = mean(sample(Pop_10k, size = n_tetap, replace = TRUE))
}
# 4. Menggabungkan data menjadi satu dataframe
df_soal6 = data.frame(
Nilai_Xbar = c(rata_1k, rata_5k, rata_10k),
Ukuran_Populasi = factor(rep(c("N = 1.000", "N = 5.000", "N = 10.000"), each = M_iterasi))
)
# 5. Visualisasi kepadatan distribusi hasil simulasi
ggplot(df_soal6, aes(x = Nilai_Xbar, fill = Ukuran_Populasi, color = Ukuran_Populasi)) +
geom_density(alpha = 0.3) +
labs(title = "Soal 6: Distribusi Rata-rata Sampel Berdasarkan Ukuran N",
subtitle = "Data asal: Eksponensial | n = 40 | Iterasi = 10.000 kali",
x = "Rata-rata Sampel", y = "Density") +
theme_minimal()

set.seed(123)
M = 10000
mu = 50
sigma_pop = 10 # Sehingga sigma^2 = 100
# Wadah untuk tiga ukuran sampel berbeda
xbar_n10 = numeric(M)
xbar_n50 = numeric(M)
xbar_n200 = numeric(M)
for(i in 1:M){
xbar_n10[i] = mean(rnorm(10, mean = mu, sd = sigma_pop))
xbar_n50[i] = mean(rnorm(50, mean = mu, sd = sigma_pop))
xbar_n200[i] = mean(rnorm(200, mean = mu, sd = sigma_pop))
}
# Menghitung varians dari hasil sebaran rata-rata tersebut
var_n10 = var(xbar_n10)
var_n50 = var(xbar_n50)
var_n200 = var(xbar_n200)
cat("Varians X-bar untuk n=10 :", var_n10, "(Teoretis: 100/10 = 10)\n")
## Varians X-bar untuk n=10 : 9.951022 (Teoretis: 100/10 = 10)
cat("Varians X-bar untuk n=50 :", var_n50, "(Teoretis: 100/50 = 2)\n")
## Varians X-bar untuk n=50 : 1.998578 (Teoretis: 100/50 = 2)
cat("Varians X-bar untuk n=200 :", var_n200, "(Teoretis: 100/200 = 0.5)\n")
## Varians X-bar untuk n=200 : 0.497941 (Teoretis: 100/200 = 0.5)
# Opsional: Jika divisualisasikan, n=200 akan menghasilkan kurva yang paling runcing/kurus.