Penerapan Metode Simulasi Menggunakan R

Anisa Dilla Puspitasari

2021-11-17

Teorema Limit Pusat

  • Rata-rata dari contoh acak yang berasal dari sebaran apapun memiliki sebaran normal jika ukuran contohnya sangat besar

  • Jika contoh acak diambil dari populasi dengan mean \(\mu\) dan ragam \(\sigma^2\), maka semakin besar ukuran contoh, sebaran dari \(\overline{x}\) akan semakin mendekati sebaran normal dengan mean \(\mu\) dan ragam \(\sigma^{2}⁄𝑛\).

Algoritma

  1. Tentukan ukuran contoh (\(n\))

  2. Tentukan sebaran data

  3. Ulang 𝑘 kali

    • Ambil 𝑛 contoh acak dari sebaran data yang sudah ditentukan

    • Hitung rataannya lalu simpan

  4. Periksa sebaran dari 𝑘 rataan

Aplikasi di R

Hampiran Normal Terhadap Geometrik

par(mfrow=c(3,1))
library(prob)
set.seed(123)
populasi    = rgeom(20, 0.1)

n1          = 2
contoh_geo1 = urnsamples(populasi, size = 2, replace = F, ordered = F)
mean_geo1   = matrix(apply(contoh_geo1, 1, mean))

n2          = 5
contoh_geo2 = urnsamples(populasi, size = 5, replace = F, ordered = F)
mean_geo2   = matrix(apply(contoh_geo2, 1, mean))

n3          = 10
contoh_geo3 = urnsamples(populasi, size = 10, replace = F, ordered = F)
mean_geo3   = matrix(apply(contoh_geo3, 1, mean))

hist(mean_geo1,main = paste("Hampiran Normal Terhadap Geometrik (n = 2)"),xlab = "xbar")
hist(mean_geo2,main = paste("Hampiran Normal Terhadap Geometrik (n = 5)"),xlab = "xbar")
hist(mean_geo3,main = paste("Hampiran Normal Terhadap Geometrik (n = 10)"),xlab = "xbar")

Hampiran Normal Terhadap Eksponensial

par(mfrow=c(3,1))
library(prob)
set.seed(123)
populasi    = rexp(20)

n1          = 2
contoh_exp1 = urnsamples(populasi, size = 2, replace = F, ordered = F)
mean_exp1   = matrix(apply(contoh_exp1, 1, mean))

n2          = 5
contoh_exp2 = urnsamples(populasi, size = 5, replace = F, ordered = F)
mean_exp2   = matrix(apply(contoh_exp2, 1, mean))

n3          = 10
contoh_exp3 = urnsamples(populasi, size = 10, replace = F, ordered = F)
mean_exp3   = matrix(apply(contoh_exp3, 1, mean))

hist(mean_exp1,main = paste("Hampiran Normal Terhadap Eksponensial (n = 2)"),xlab = "xbar")
hist(mean_exp2,main = paste("Hampiran Normal Terhadap Eksponensial (n = 5)"),xlab = "xbar")
hist(mean_exp3,main = paste("Hampiran Normal Terhadap Eksponensial (n = 10)"),xlab = "xbar")

Hampiran Normal Terhadap Seragam

par(mfrow=c(3,1))
library(prob)
set.seed(123)
populasi     = runif(20)

n1           = 2
contoh_unif1 = urnsamples(populasi, size = 2, replace = F, ordered = F)
mean_unif1   = matrix(apply(contoh_unif1, 1, mean))

n2           = 5
contoh_unif2 = urnsamples(populasi, size = 5, replace = F, ordered = F)
mean_unif2   = matrix(apply(contoh_unif2, 1, mean))

n3           = 10
contoh_unif3 = urnsamples(populasi, size = 10, replace = F, ordered = F)
mean_unif3   = matrix(apply(contoh_unif3, 1, mean))

hist(mean_unif1,main = paste("Hampiran Normal Terhadap Seragam (n = 2)"),xlab = "xbar")
hist(mean_unif2,main = paste("Hampiran Normal Terhadap Seragam (n = 5)"),xlab = "xbar")
hist(mean_unif3,main = paste("Hampiran Normal Terhadap Seragam (n = 10)"),xlab = "xbar")

Kesimpulan :

  • Semakin besar ukuran contoh, maka sebaran rata-rata dari contoh acak yang berasal dari sebaran geometrik, eksponensial, maupun uniform akan mendekati sebaran normal. Hal ini ditunjukkan dari histogram yang mana ketika n semakin besar akan semakin cenderung membentuk kurva normal

Sebaran Percontohan Sebaran Normal

par(mfrow=c(3,1))
library(prob)
set.seed(1299)
populasi     = rnorm(20,0,sqrt(12)) # Membangkitkan bil. acak ~ Normal (miu = 5, sigma2 =12) 

n1           = 3
contoh_norm1 = urnsamples(populasi, size = 3, replace = F, ordered = F)
mean_norm1   = matrix(apply(contoh_norm1, 1, mean))
mean_xbar1   = mean(mean_norm1)
var_xbar1    = var(mean_norm1)

n2           = 4
contoh_norm2 = urnsamples(populasi, size = 4, replace = F, ordered = F)
mean_norm2   = matrix(apply(contoh_norm2, 1, mean))
mean_xbar2   = mean(mean_norm2)
var_xbar2    = var(mean_norm2)

n3           = 6
contoh_norm3 = urnsamples(populasi, size = 6, replace = F, ordered = F)
mean_norm3   = matrix(apply(contoh_norm3, 1, mean))
mean_xbar3   = mean(mean_norm3)
var_xbar3    = var(mean_norm3)

hist(mean_norm1,main = paste("(n = 3)"),xlab = "xbar")
hist(mean_norm2,main = paste("(n = 4)"),xlab = "xbar")
hist(mean_norm3,main = paste("(n = 6)"),xlab = "xbar")

hasil        = data.frame("."=c("mean","varian"),"Populasi"=c(0,12),"n=3"=c(mean_xbar1,var_xbar1),"n=4"=c(mean_xbar2,var_xbar2),"n=6"=c(mean_xbar3,var_xbar3))
hasil
##        . Populasi        n.3        n.4        n.6
## 1   mean        0 -0.1905848 -0.1905848 -0.1905848
## 2 varian       12  4.5470438  3.2075245  1.8707180

Kesimpulan :

  • Berdasarkan output di atas, contoh acak yang diambil dari populasi dengan mean = \(\mu\) dan ragam = \(\sigma^2\), maka semakin besar ukuran contoh, mean dari \(\overline{x}\) akan semakin mendekati \(\mu\) dan ragamnya semakin mendekati \(\sigma^{2}⁄𝑛\).

  • Dilihat dari histogramnya pun, semakin besar ukuran contoh, kurva mendekati sebaran normal.

Ketakbiasan Penduga Parameter

\(\overline{x}\) adalah penduga tak bias bagi \(\mu\) , jika E ( \(\overline{x}\) ) = \(\mu\)

\(s^2\) adalah penduha tak bisa bagi \(\sigma ^{2}\) , jika E ( \(s^2\) ) = \(\sigma ^{2}\)

Maka dalam hal ini kita akan membuktikan apakah benar nilai harapan penduga parameter sama dengan nilai parameternya

Algoritme :

  • Tentukan sebaran yang akan digunakan

  • Ulangi sebanyak k kali

    • Bangkitkan n buah data dari sebaran yang sudah ditentukan

    • Hitung nilai \(\overline{x}\) dan \(s^2\)

  • Hitung rata-rata dari \(\overline{x}\) dan \(s^2\) , kemudian bandingkan dengan \(\mu\) dan \(\sigma ^{2}\)

Aplikasi di R

PENERAPAN KETAKBIASAN PENDUGA (MEAN)

#POPULASI TERHINGGA

#1. Sebaran Normal 
library(prob)
set.seed(123)
n              = 10
populasi1      = rnorm(20)
mean_pop1      = mean(populasi1)
sampel_normal1 = urnsamples(populasi1, size = 10, replace = F, ordered = F)
mean_normal1   = matrix(apply(sampel_normal1, 1, mean))
median_normal1 = matrix(apply(sampel_normal1, 1, median))
harapan_mean_norm1     = mean(mean_normal1)
harapan_median_norm1   = mean(median_normal1)
 
#2. Sebaran Eksponensial
library(prob)
set.seed(123)
n              = 10
populasi2      = rexp(20)
mean_pop2      = mean(populasi2)
sampel_exp1    = urnsamples(populasi2, size = 10, replace = F, ordered = F)
mean_exp1      = matrix(apply(sampel_exp1, 1, mean))
median_exp1 = matrix(apply(sampel_exp1, 1, median))
harapan_mean_exp1     = mean(mean_exp1)
harapan_median_exp1   = mean(median_exp1)
 
#3. Uniform
library(prob)
set.seed(123)
n              = 10
populasi3      = runif(20)
mean_pop3      = mean(populasi3)
sampel_unif1   = urnsamples(populasi3, size = 10, replace = F, ordered = F)
mean_unif1     = matrix(apply(sampel_unif1, 1, mean))
median_unif1   = matrix(apply(sampel_unif1, 1, median))
harapan_mean_unif1     = mean(mean_unif1)
harapan_median_unif1   = mean(median_unif1)

hasil = data.frame("Hasil"=c("mean_populasi","harapan_mean_contoh","harapan_median_contoh"),"Sebaran Normal"=c(mean_pop1,harapan_mean_norm1,harapan_median_norm1),"Sebaran Eksponensial"=c(mean_pop2,harapan_mean_exp1,harapan_median_exp1),"Sebaran Seragam"=c(mean_pop3,harapan_mean_unif1,harapan_median_unif1))

hasil
##                   Hasil Sebaran.Normal Sebaran.Eksponensial Sebaran.Seragam
## 1         mean_populasi      0.1416238            0.8111726       0.5508084
## 2   harapan_mean_contoh      0.1416238            0.8111726       0.5508084
## 3 harapan_median_contoh      0.1174878            0.4931612       0.5504018
#POPULASI TAK HINGGA

#1. Sebaran Normal 
library(prob)
set.seed(123)
k              = 1000
n              = 10
populasi1      = rnorm(20)
mean_pop1      = mean(populasi1)
sampel_normal1 = matrix(NA,k,n)
for (i in 1:k) sampel_normal1[i,] = sample(populasi1,n)
mean_normal1   = matrix(apply(sampel_normal1, 1, mean))
median_normal1 = matrix(apply(sampel_normal1, 1, median))
harapan_mean_norm1     = mean(mean_normal1)
harapan_median_norm1   = mean(median_normal1)
 
#2. Sebaran Eksponensial
library(prob)
set.seed(123)
k              = 1000
n              = 10
populasi2      = rexp(20)
mean_pop2      = mean(populasi2)
sampel_exp1    = matrix(NA,k,n)
for (i in 1:k) sampel_exp1[i,] = sample(populasi2,n)
mean_exp1      = matrix(apply(sampel_exp1, 1, mean))
median_normal1 = matrix(apply(sampel_exp1, 1, median))
harapan_mean_exp1     = mean(mean_exp1)
harapan_median_exp1   = mean(median_exp1)
 
#3. Uniform
library(prob)
set.seed(123)
k              = 1000
n              = 10
populasi3      = runif(20)
mean_pop3      = mean(populasi3)
sampel_unif1   = matrix(NA,k,n)
for (i in 1:k) sampel_unif1[i,] = sample(populasi3,n)
mean_unif1     = matrix(apply(sampel_unif1, 1, mean))
median_unif1   = matrix(apply(sampel_unif1, 1, median))
harapan_mean_unif1     = mean(mean_unif1)
harapan_median_unif1   = mean(median_unif1)

hasil2 = data.frame("Hasil"=c("mean_populasi","harapan_mean_contoh","harapan_median_contoh"),"Sebaran Normal"=c(mean_pop1,harapan_mean_norm1,harapan_median_norm1),"Sebaran Eksponensial"=c(mean_pop2,harapan_mean_exp1,harapan_median_exp1),"Sebaran Seragam"=c(mean_pop3,harapan_mean_unif1,harapan_median_unif1))

hasil2
##                   Hasil Sebaran.Normal Sebaran.Eksponensial Sebaran.Seragam
## 1         mean_populasi      0.1416238            0.8111726       0.5508084
## 2   harapan_mean_contoh      0.1349098            0.8137735       0.5496176
## 3 harapan_median_contoh      0.1047891            0.4931612       0.5476368

Kesimpulan :

  • Berdasarkan output di atas, dengan populasi terhingga maupun tak hingga serta tiga sebaran yang berbeda, nilai harapan median contoh tetap berbeda dengan \(\mu\) dan nilai harapan rataan contoh ( \(\overline{x}\) ) mendekati sama (pada populasi tak hingga) bahkan sama persis dengan nilai parameter rataan populasi (\(\mu\)) (pada populasi terhingga) sehingga penduga tak bias bagi \(\mu\) adalah \(\overline{x}\).

  • Pada populasi terhingga, percontohan bersifat unik artinya tidak ada percontohan yang berulang sehingga dapat dipastikan kombinasi contoh hanya muncul satu kali sehingga nilai parameter dan nilai harapan penduga parameter yang tak bias sama persis.

  • Pada populasi tak hingga, percontohan yang terambil secara acak merupakan sebagian dari keseluruhan kemungkinan percontohan yang ada sehingga nilai parameter dan nilai harapan penduga parameter yang tak bias tidak sama persis, namun sangat mendekati.

PENERAPAN KETAKBIASAN PENDUGA (RAGAM)

# POPULASI TERHINGGA

#Sebaran Normal
set.seed(888)
n        = 10
populasi = rnorm(20) 
sigma2   = var(populasi)*(20-1)/20 #fungsi var pada R adalah varian contoh (penyebut n-1) sehingga perlu dikali (n-1)/n

library(prob)
sampel      = urnsamples(populasi, size = 10, replace = F, ordered = F)

## Pembagi (n-1)
s2.n1       = matrix(apply(sampel, 1, var))
E.s2.n1     = mean(s2.n1)

## Pembagi (n)
s2.n        = s2.n1*(10-1)/10
E.s2.n      = mean(s2.n)

#Sebaran Eksponensial
set.seed(888)
n           = 10
populasi2   = rexp(20) 
sigma2.exp  = var(populasi2)*(20-1)/20

library(prob)
sampel_exp     = urnsamples(populasi2, size = 10, replace = F, ordered = F)

## Pembagi (n-1)
s2.n1.exp   = matrix(apply(sampel_exp, 1, var))
E.s2.n1.exp = mean(s2.n1.exp)

## Pembagi (n)
s2.n.exp    = s2.n1.exp*(10-1)/10
E.s2.n.exp  = mean(s2.n.exp)


hasil = data.frame( "."  = c("ragam populasi","nilai harapan ragam contoh (n-1)","nilai harapan ragam contoh (n)"), 
                    "Sebaran Normal" = c(sigma2, E.s2.n1, E.s2.n),"Sebaran Eksponensial" = c(sigma2.exp, E.s2.n1.exp, E.s2.n.exp))
hasil
##                                  . Sebaran.Normal Sebaran.Eksponensial
## 1                   ragam populasi       1.298573             1.750903
## 2 nilai harapan ragam contoh (n-1)       1.366919             1.843056
## 3   nilai harapan ragam contoh (n)       1.230227             1.658750
# POPULASI TAK HINGGA

#Sebaran Normal
set.seed(123)
n        = 10
k        = 1000
populasi = rnorm(20) 
sigma2   = var(populasi)*(20-1)/20

library(prob)
sampel_norm1   = matrix(NA,k,n)
for (i in 1:k) sampel_norm1[i,] = sample(populasi,n)
## Pembagi (n-1)
s2.n1          = matrix(apply(sampel, 1, var))
E.s2.n1        = mean(s2.n1)

## Pembagi (n)
s2.n           = s2.n1*(10-1)/10
E.s2.n         = mean(s2.n)

#Sebaran Eksponensial
set.seed(123)
n = 10
populasi2   = rexp(20) 
sigma2.exp  = var(populasi2)*(20-1)/20

library(prob)
sampel_exp1 = matrix(NA,k,n)
for (i in 1:k) sampel_exp1[i,] = sample(populasi,n)
## Pembagi (n-1)
s2.n1.exp   = matrix(apply(sampel_exp1, 1, var))
E.s2.n1.exp = mean(s2.n1.exp)

## Pembagi (n)
s2.n.exp    = s2.n1.exp*(10-1)/10
E.s2.n.exp  = mean(s2.n.exp)


hasil = data.frame( "."  = c("ragam populasi","nilai harapan ragam contoh (n-1)","nilai harapan ragam contoh (n)"), 
                    "Sebaran Normal" = c(sigma2, E.s2.n1, E.s2.n),"Sebaran Eksponensial" = c(sigma2.exp, E.s2.n1.exp, E.s2.n.exp))
hasil
##                                  . Sebaran.Normal Sebaran.Eksponensial
## 1                   ragam populasi      0.8987739            0.9439256
## 2 nilai harapan ragam contoh (n-1)      0.9460778            0.9491318
## 3   nilai harapan ragam contoh (n)      0.8514700            0.8542186

Kesimpulan :

  • Berdasarkan output di atas, dengan skenario populasi terhingga maupun tak hingga serta dua sebaran yang berbeda, nilai harapan ragam contoh dengan penyebut \(n-1\) lebih mendekati nilai parameter daripada nilai harapan ragam contoh dengan penyebut n. Hal ini menunjukkan bahwa penduga tak bias bagi ragam populasi (\(\sigma^2\)) adalah \(s^2\) dengan penyebut adalah \(n-1\), meskipun masih terdapat celah perbedaan (tidak 100% tak berbias).

  • Pada populasi terhingga, percontohan bersifat unik artinya tidak ada percontohan yang berulang sehingga dapat dipastikan kombinasi contoh hanya muncul satu kali. Jika pada penduga mean nilai parameter dan statistik penduga tak bias sama persis, pada penduga ragam ini hal tersebut tidak berlaku karena perhitungan ragam populasi perlu dikali dengan faktor koreksi \((n-1)/n\) sedangkan perhitungan ragam contoh (dengan penyebut \(n-1\)) tidak perlu mengalikan dengan faktor koreksi.

  • Pada populasi tak hingga, percontohan yang terambil secara acak merupakan sebagian dari keseluruhan kemungkinan percontohan yang ada. Namun, dalam hal ini nilai parameter ragam dan nilai harapan penduga tak biasnya tidak sama persis, hanya mendekati.

Selang Kepercayaan

Apa arti dari SK 95% ?

  • SK 95% bagi \(\theta\) : Kita percaya 95% bahwa selang a sampai b memuat nilai parameter \(\theta\) yang sebenarnya.

  • SK 95% : Jika kita melakukan 100 kali percontohan acak dan setiap percontohan acak dibuat selang kepercayaannya, maka dari 100 SK yang terbentuk, ada 95 SK yang mencakup parameter sedangkan sisanya sebanyak 5 SK tidak mencakup parameter.

Algoritme :

  • Tentukan sebaran yang akan digunakan

  • Ulangi sebanyak k kali

    • Bangkitkan n buah data dari sebaran yang sudah ditentukan

    • Hitung nilai \(\overline{x}\) dan \(s^2\)

    • Hitung \(\sigma^{2}_\overline{x}\) dan buat selang kepercayaann (1- \(\alpha\) )%

  • Hitung proporsi banyaknya selang kepercayaan yang memuat \(\mu\), bandingkan dengan (1-\(\alpha\))

Aplikasi di R

n1     = 10
k      = 100 #ulangan
alpha  = 0.05
mu     = 50
std    = 10
set.seed(123)
sampel.norm1 = matrix(rnorm(n1*k,mu,std),k)
xbar.norm1   = apply(sampel.norm1,1,mean)
s.norm1      = apply(sampel.norm1,1,sd)
SE.norm1     = s.norm1/sqrt(n1)
z.norm1      = qnorm(1-alpha/2)
SK.norm1     = (xbar.norm1-z.norm1*SE.norm1 < mu & mu < xbar.norm1+z.norm1*SE.norm1)
x.norm1      = sum(SK.norm1)/k #proporsi banyaknya SK yang memuat mu

n2     = 30
k      = 100 #ulangan
alpha  = 0.05
mu     = 50
std    = 10
set.seed(123)
sampel.norm2 = matrix(rnorm(n2*k,mu,std),k)
xbar.norm2   = apply(sampel.norm2,1,mean)
s.norm2      = apply(sampel.norm2,1,sd)
SE.norm2     = s.norm2/sqrt(n2)
z.norm2      = qnorm(1-alpha/2)
SK.norm2     = (xbar.norm2-z.norm2*SE.norm2 < mu & mu < xbar.norm2+z.norm2*SE.norm2)
x.norm2      = sum(SK.norm2)/k #proporsi banyaknya SK yang memuat mu

n3     = 100
k      = 100 #ulangan
alpha  = 0.05
mu     = 50
std    = 10
set.seed(123)
sampel.norm3 = matrix(rnorm(n3*k,mu,std),k)
xbar.norm3   = apply(sampel.norm3,1,mean)
s.norm3      = apply(sampel.norm3,1,sd)
SE.norm3     = s.norm3/sqrt(n3)
z.norm3      = qnorm(1-alpha/2)
SK.norm3     = (xbar.norm3-z.norm3*SE.norm3 < mu & mu < xbar.norm3+z.norm3*SE.norm3)
x.norm3      = sum(SK.norm3)/k #proporsi banyaknya SK yang memuat mu

hasil = data.frame("n" =c(10,30,100),"Ketepatan SK Sebaran Normal"=c(x.norm1, x.norm2, x.norm3))
hasil
##     n Ketepatan.SK.Sebaran.Normal
## 1  10                        0.93
## 2  30                        0.93
## 3 100                        0.96
matplot(rbind (xbar.norm2-z.norm2*SE.norm2, xbar.norm2+z.norm2*SE.norm2), rbind(1:k,1:k), col=ifelse(SK.norm2,"blue","red"), type = "l", lty = 1,main='Selang Kepercayaan 95% (n=100)', xlab='SK', ylab='banyak ulangan')
abline(v=mu)

Kesimpulan :

  • Semakin besar ukuran contoh (n), maka proporsi SK yang memuat nilai parameter semakin mendekati kebenaran (1-alpha)