CLT Visual Simulation
Package
Berikut package yang digunakan dalam eksplorasi ini
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) )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.
Jodi Jhouranda Siregar, IPB University, jodijhouranda@apps.ipb.ac.id↩︎