CLT Visual Simulation

Package

Berikut package yang digunakan dalam eksplorasi ini

library(dplyr)
library(ggplot2)
library(gganimate)
library(ggpubr)
library(gridExtra)
library(reshape2)

Simulasi Inverse Transform Method (ITM)

Pembangkitan angka random

Untuk simulasi pertama akan dibangkitakan data dengan $ f(x)= 8x^3 $ dengan metode IMT

set.seed(9667765)
#Generate angka random
n = 10000
u = runif (n)
randITM = (.5*u)^(1/4)
hist (randITM , prob = TRUE, main = "Histogram f(x) = 8x^3")
sbx = seq (0 ,1 ,.01)
lines ( sbx , 8*sbx^3)

Fungsi simulasi

Dibangun fungsi simulasi untuk menghasilkan plot untuk berbagai macam n sample

#Fungsi untuk menghasilkan plot untuk berbagai macam n sample

simulate_density = function(populasi , n){
  sample_mean = replicate(100,sample(populasi,n)) %>% colMeans() %>% as.data.frame() 
  colnames(sample_mean) = "xbar"
  plot_mnorm = ggplot(sample_mean, aes(x = xbar)) + 
    geom_density(col = "black",fill = "#56B4E9")+ ylim(c(0, 30))+ xlim(c(0,1))+
    labs(title = paste("Density Plot Sample Mean dengan n =",n))+
    theme(
      plot.title = element_text(color = "black", size = 10, face = "bold",),
    )
  plot_mnorm
}

Grafik simulasi

Selanjutnya, dilakukan simulasi untuk n = {5,20,50,70}

#Generate Density Plot dengan fungsi yang telah dibentuk
hist_5 = simulate_density(randITM,5)
hist_20 = simulate_density(randITM,20)
hist_50 = simulate_density(randITM,50)
hist_70 = simulate_density(randITM,70)
ggarrange(hist_5,hist_20,hist_50,hist_70,nrow = 2,ncol = 2)

Animasi

Untuk melihat perubahan lebih jelas, dilakukan simulasi pengambilan sampel dengan n=2-30. Kemudian dilakukan pembentukan animasi sederhana terhadap plot density dari setiap sample mean.

#Generate Density Plot dengan fungsi yang telah dibentuk
for(n in 2:30) {
  x = replicate(100,sample(randITM,n)) %>% colMeans() 
  if(n==2) sample_mean = c(dataset = n, xbar =x )
  else {sample_mean = rbind(sample_mean,c(dataset = n, xbar =x ))}
}
sample_mean = as.data.frame(sample_mean)
sample_mean = sample_mean %>% melt(id=1) %>% arrange(dataset)

#Plot animasi perubuhan density
dens = sample_mean %>% ggplot(aes(value)) +geom_density(alpha = 0.85, color = "#000000",fill = "#FF3838", size=1) +
  transition_states(states = dataset,transition_length = 48 ,state_length = 2) + 
  ease_aes('cubic-in-out') + 
  labs(title = 'Plot Density Sample Mean dari random ITM dengan n = {closest_state}')+
  theme(plot.title = element_text(color = "black", size = 12, face = "bold",))
animate(dens,nframes = 175,end_pause=40)

Simulasi Acceptance-rejection method (ARM)

Pembangkitan angka random

Untuk simulasi pertama akan dibangkitakan data dengan X ~ Beta(2,2) dengan ARM

n <- 10000
j <- k <- 0
y <- numeric ( n)
while ( k < n) {
  u <- runif (1)
  j <- j +1
  x <- runif (1)
if (3*x*(1 - x ) > u ) {
  k <- k +1
#terima x
  y [ k ] <- x
 }
}
hist (y , prob = T , main = "Histogram X ~ Beta(2,2)")
  sbx <- seq (0 ,1 ,.01)
  lines ( sbx , dbeta ( sbx ,2 ,2) )

randARM = y

Grafik simulasi

Selanjutnya, dilakukan simulasi untuk n = {5,20,50,70}

#Generate Density Plot dengan fungsi yang telah dibentuk
hist_5 = simulate_density(randARM,5)
hist_20 = simulate_density(randARM,20)
hist_50 = simulate_density(randARM,50)
hist_70 = simulate_density(randARM,70)
ggarrange(hist_5,hist_20,hist_50,hist_70,nrow = 2,ncol = 2)

Animasi

Untuk melihat perubahan lebih jelas, dilakukan simulasi pengambilan sampel dengan n=2-30. Kemudian dilakukan pembentukan animasi sederhana terhadap plot density dari setiap sample mean.

Kesimpulan: Hasil Simulasi

Dari simulasi diatas dapat disimpulkan secara empirik bahwa :

Sample mean akan menyebar normal jika dan hanya jika ketika jumlah sampel (n) semakin besar.


  1. Jodi Jhouranda Siregar, IPB University, ↩︎