Algoritma: 1. Tentukan ukuran contoh (\(n\)) 2. Tentukan sebaran data 3. Ulang \(k\) kali 4. Ambil \(n\) contoh acak dari sebaran data yang sudah ditentukan 5. Hitung rataannya lalu simpan 6. Periksa sebaran dari \(\bar{X}\)
par(mfrow=c(3,1))
library(probs)
## Warning: package 'probs' was built under R version 4.3.3
##
## Attaching package: 'probs'
## The following objects are masked from 'package:base':
##
## intersect, setdiff, union
# → Mengatur layout grafik menjadi 3 baris dan 1 kolom, sehingga tiga histogram dapat ditampilkan dalam satu tampilan vertikal.
set.seed(777)
populasi = rgeom(20, 0.1)
# → Membuat populasi sebanyak 20 data yang berasal dari distribusi Geometrik dengan probabilitas sukses 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))
# → Sampel diambil dengan ukuran berbeda (n = 2, 5, dan 10) menggunakan fungsi urnsamples() yang mengambil kombinasi acak tanpa penggantian.
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")
# → Membuat histogram dari rata-rata sampel untuk melihat bagaimana sebaran rata-rata berubah dengan bertambahnya ukuran sampel.
Tujuannya adalah untuk menunjukkan bagaimana distribusi rata-rata sampel \(\bar{X}\) dari distribusi geometrik mendekati distribusi normal ketika ukuran sampel \((n)\) meningkat.
par(mfrow=c(3,1))
library(probs)
# → Mengatur layout grafik menjadi 3 baris dan 1 kolom, sehingga tiga histogram dapat ditampilkan dalam satu tampilan vertikal.
set.seed(777)
populasi = rexp(20)
# → Membentuk populasi dari distribusi eksponensial dengan 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))
# → Sampel diambil dengan ukuran berbeda (n = 2, 5, dan 10) menggunakan fungsi urnsamples() yang mengambil kombinasi acak tanpa penggantian.
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")
# → Menampilkan histogram dari distribusi rata-rata sampel untuk melihat bagaimana distribusi mendekati normal saat𝑛bertambah.
Tujuannya adalah untuk menunjukkan bagaimana distribusi rata-rata sampel \(\bar{X}\) dari distribusi eksponensial mendekati distribusi normal ketika ukuran sampel \((n)\) meningkat.
par(mfrow=c(3,1))
library(probs)
# → Mengatur layout grafik menjadi 3 baris dan 1 kolom, sehingga tiga histogram dapat ditampilkan dalam satu tampilan vertikal.
set.seed(777)
populasi = runif(20)
# → Membuat populasi sebanyak 20 data yang berasal dari distribusi Uniform(0,1).
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))
# → Sampel diambil dengan ukuran berbeda (n = 2, 5, dan 10) menggunakan fungsi urnsamples() yang mengambil kombinasi acak tanpa penggantian.
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")
# → Menampilkan histogram dari distribusi rata-rata sampel untuk melihat bagaimana distribusi mendekati normal saat𝑛bertambah.
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.
par(mfrow=c(3,1))
library(probs)
# → Mengatur layout grafik menjadi 3 baris dan 1 kolom, sehingga tiga histogram dapat ditampilkan dalam satu tampilan vertikal.
set.seed(777)
populasi = rnorm(20,5,sqrt(12))
# → Membangkitkan bilangan acak ~ Normal (μ = 5, σ^2 =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 = 15
contoh_norm3 = urnsamples(populasi, size = 15, replace = F, ordered = F)
mean_norm3 = matrix(apply(contoh_norm3, 1, mean))
mean_xbar3 = mean(mean_norm3)
var_xbar3 = var(mean_norm3)
# → Sampel diambil dengan ukuran berbeda (n = 2, 5, dan 10) menggunakan fungsi urnsamples() yang mengambil kombinasi acak tanpa penggantian.
hist(mean_norm1,main = paste("(n = 3)"),xlab = "xbar")
hist(mean_norm2,main = paste("(n = 4)"),xlab = "xbar")
hist(mean_norm3,main = paste("(n = 15)"),xlab = "xbar")
# → Menampilkan histogram dari distribusi rata-rata sampel untuk melihat bagaimana distribusi mendekati normal saat𝑛bertambah.
hasil = data.frame("."=c("mean","varian"),
"Populasi"=c(5,12),
"n=3"=c(mean_xbar1,var_xbar1),
"n=4"=c(mean_xbar2,var_xbar2),
"n=15"=c(mean_xbar3,var_xbar3))
# → Membuat tabel untuk membandingkan rata-rata dan varians dari populasi serta rata-rata dan varians dari rata-rata sampel untuk berbagai ukuran𝑛.
hasil
## . Populasi n.3 n.4 n.15
## 1 mean 5 6.022126 6.022126 6.0221260
## 2 varian 12 2.768356 1.952822 0.1627121
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 \(\bar{X}\) akan semakin mendekati \(\mu\) dan ragamnya semakin mendekati \(\frac{\sigma^2}{n}\). - Dilihat dari histogramnya pun, semakin besar ukuran contoh (\(n\)), kurva distribusi semakin mendekati sebaran normal.
\(\bar{X}\) adalah penduga tak bias
bagi \(\mu\), jika \(E(\bar{X}) = \mu\). \(s^2\) adalah penduga tak bias 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.
#POPULASI TERHINGGA
#1. Sebaran Normal
library(probs)
set.seed(777)
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(probs)
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(probs)
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)
# Rangkuman fungsi code per baris:
# → Membangkitkan 20 data.
# → Menghitung rata-rata populasi (mean_pop) sebagai nilai parameter sebenarnya (populasi).
# → Mengambil sampel ukuran n tanpa pengembalian menggunakan urnsamples().
# → Menghitung rata-rata (mean) dan median dari sampel.
# → Menghitung nilai harapan rata-rata (harapan_mean) dan median (harapan_median) dari sampel.
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.2950624 0.8111726 0.5508084
## 2 harapan_mean_contoh 0.2950624 0.8111726 0.5508084
## 3 harapan_median_contoh 0.2768291 0.4931612 0.5504018
Kesimpulan: - Berdasarkan output di atas, dengan populasi terhingga maupun tak hingga serta tiga sebaran yang berbeda dengan nilai harapan median contoh tetap berbeda dengan \(\mu\), sedangkan nilai harapan rata-rata contoh (\(\bar{X}\)) mendekati \(\mu\) pada populasi tak hingga, dan bahkan sama persis dengan \(\mu\) pada populasi terhingga. Oleh karena itu, penduga tak bias bagi \(\mu\) adalah \(\bar{X}\). - Pada populasi terhingga, percontohan bersifat unik, artinya tidak ada percontohan yang berulang, sehingga setiap kombinasi contoh hanya muncul satu kali. Hal ini menyebabkan nilai parameter dan nilai harapan penduga parameter yang tak bias sama persis. - Pada populasi tak hingga, percontohan yang diambil secara acak merupakan bagian dari keseluruhan kemungkinan percontohan yang ada. Oleh karena itu, nilai parameter dan nilai harapan penduga parameter yang tak bias tidak selalu sama persis, tetapi sangat mendekati.
# POPULASI TERHINGGA
#Sebaran Normal
set.seed(777)
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(probs)
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(probs)
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 0.7728327 1.750903
## 2 nilai harapan ragam contoh (n-1) 0.8135081 1.843056
## 3 nilai harapan ragam contoh (n) 0.7321573 1.658750
Kesimpulan: - Berdasarkan output di atas, dengan skenario populasi terhingga dan dua sebaran yang berbeda, nilai harapan ragam contoh dengan penyebut \(n-1\) lebih mendekati nilai parameter dibandingkan dengan penyebut \(n\). Hal ini menunjukkan bahwa penduga tak bias bagi ragam populasi \((\sigma^2)\) adalah \(s^2\) dengan penyebut \(n-1\), meskipun masih terdapat sedikit perbedaan (tidak 100% tak berbias). - Pada populasi terhingga, percontohan bersifat unik, artinya tidak ada percontohan yang berulang, sehingga kombinasi contoh hanya muncul satu kali. Jika pada penduga rata-rata nilai parameter dan penduga tak bias sama persis, pada penduga ragam hal tersebut tidak berlaku karena perhitungan ragam populasi perlu dikalikan dengan faktor koreksi \(\frac{(n-1)}{n}\), sedangkan perhitungan ragam contoh dengan penyebut \(n-1\) tidak memerlukan faktor koreksi. - Pada populasi tak hingga, percontohan yang diambil secara acak merupakan bagian dari keseluruhan kemungkinan percontohan yang ada. Oleh karena itu, nilai parameter ragam dan nilai harapan penduga tak bias tidak sama persis, tetapi mendekati.
Apa arti dari SK 95%? - SK 95% bagi \(\theta\): Kita percaya bahwa dengan tingkat kepercayaan 95%, selang \(\left[a, b\right]\) akan mencakup nilai parameter \(\theta\) yang sebenarnya. - SK 95%: Jika kita melakukan 100 kali percontohan acak dan setiap percontohan menghasilkan selang kepercayaan, maka dari 100 selang kepercayaan yang terbentuk, 95 di antaranya mencakup parameter yang sebenarnya, sedangkan 5 selang lainnya tidak mencakup parameter tersebut.
n1 = 10
k = 100 # → Ulangan
alpha = 0.05
mu = 50
std = 10
set.seed(777)
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)
- Gambar ini menunjukkan hasil simulasi selang kepercayaan 95% untuk
rata-rata populasi \((\mu = 50)\)
dengan ukuran sampel \(n = 100\).
- Simulasi dilakukan sebanyak \(k =
100\) kali, sehingga terdapat 100 selang kepercayaan yang
dihasilkan. Tujuan dari visualisasi ini adalah untuk menunjukkan
seberapa sering selang kepercayaan mencakup nilai rata-rata populasi
\((\mu)\).
- Garis vertikal pada \(x = 50\)
merepresentasikan nilai rata-rata populasi \((\mu = 50)\). Selang kepercayaan yang
mencakup \(\mu\) akan melintasi garis
ini.
- Garis horizontal menunjukkan bahwa setiap garis mewakili selang
kepercayaan dari satu sampel. Jika garis tersebut melintasi garis
vertikal di \(x = 50\), maka selang
kepercayaan tersebut mencakup \(\mu\).
- Semakin besar ukuran sampel \((n)\),
maka proporsi selang kepercayaan yang mencakup nilai parameter akan
semakin mendekati \((1 - \alpha)\).
# Interval Kepercayaan
library(car)
## Warning: package 'car' was built under R version 4.3.3
## Loading required package: carData
## Warning: package 'carData' was built under R version 4.3.3
data("Prestige")
# Menghitung rata-rata
m <- mean(Prestige$income)
m
## [1] 6797.902
# Menghitung standar error
p <- dim(Prestige)[1]
se <- sd(Prestige$income)/sqrt(p)
se
## [1] 420.4089
# Menghitung nilai kritis t
tval <- qt(0.975, df=p-1)
# Menghitung interval kepercayaan
cat(paste("KI: [", round(m-tval*se, 2),",",round(m+tval*se,2),"]"))
## KI: [ 5963.92 , 7631.88 ]
Artinya, dengan tingkat kepercayaan 95%, rata-rata pendapatan populasi berada dalam rentang 5963.92 hingga 7631.88.