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.