Simulasi CLT untuk Populasi Berdistribusi Normal.

library yang diperlukan untuk melakukan simulasi ini

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

Kasus 1 dilakukan simulasi pembentukan density plot dari sample mean untuk populasi normal dengan berbagai n (jumlah sampel). Untuk itu, dilakukan pembentukan populasi normal dengan N = 10000 sd = 5 mu = 15 dan r function untuk memudahkan proses plot hasil simulasi.

set.seed(9667765)
#Generate normal population dengan N = 100000 sd = 5 mu = 15
normal_population =rnorm(10000,15,5)

#Fungsi untuk menghasilkan plot untuk berbagai macam n sample

simulate_density = function(populasi , n){
  sample_mean = replicate(100,sample(normal_population,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,.7))+
    labs(title = paste("Density Plot Sample Mean dengan n =",n))+
    theme(
      plot.title = element_text(color = "black", size = 10, face = "bold",),
    )
  plot_mnorm
}

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

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

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.

#Pembentukan sample mean untuk setiap n
for(n in 2:30) {
  x = replicate(100,sample(normal_population,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 Normal Distribution dengan n = {closest_state}')+
  theme(plot.title = element_text(color = "black", size = 12, face = "bold",))
animate(dens,nframes = 175,end_pause=40)

Simulasi CLT untuk Populasi Berdistribusi Ekponensial

Kasus 2 dilakukan simulasi pembentukan Density Plot dari sample mean untuk populasi ekponensial dengan berbagai n (jumlah sampel). Untuk itu, dilakukan pembentukan populasi ekponensial dengan N = 10000 dan Theta = 6 function untuk memudahkan proses plot hasil simulasi.

#Generate exponential population dengan N = 100000 sd = 5 mu = 15

exp_population =rexp(10000,6)

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

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.

#Pembentukan sample mean untuk setiap n
for(n in 2:30) {
  x = replicate(100,sample(exp_population,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 Exponential Distribution dengan n = {closest_state}')+
  theme(plot.title = element_text(color = "black", size = 12, face = "bold",))
animate(dens, nframes = 175,end_pause=40)

Kesimpulan: Hasil Simulasi

Dari simulasi diatas dapat disimpulkan secara empirik bahwa :

  1. Untuk distribusi normal, sample mean akan menyebar normal untuk n berapapun.
  2. Untuk distribusi eksponensial, sample mean akan menyebar normal jika dan hanya jika ketika jumlah sampel (n) semakin besar.