library(probs)
## Warning: package 'probs' was built under R version 4.4.3
## 
## Attaching package: 'probs'
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, union
set.seed(876)
par(mfrow=c(3,1))
#1. TEOREMA LIMIT PUSAT
# Menentukan Jumlah Populasi
populasi = runif(20)
hist(populasi)

# Simulasi dengan n berbeda
# n = 2
contoh_unif1 = urnsamples(populasi, size = 2, replace = F, ordered = F)
mean_unif1   = matrix(apply(contoh_unif1, 1, mean))

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

# Visualisasi dengan Histogram
hist(mean_unif1, main = "Hampiran Normal (n = 2)", xlab = "xbar")

hist(mean_unif3, main = "Hampiran Normal (n = 10)", xlab = "xbar")

# Berdasarkan hasil simulasi dapat disimpulkan bahwa semakin besar ukuran contoh sampel maka sebaran rata-rata dari contoh acak tersebut semakin mendekati sebaran normal. Hal ini dibuktikan melalui histogram di mana pada n yang kecil (n=2), bentuk distribusinya masih mengikuti sebaran asalnya (seperti condong ke satu sisi). Namun, ketika n meningkat (n=10), histogram cenderung membentuk kurva normal yang simetris

# MEAN
# Populasi 
set.seed(81)
populasi1 = rnorm(20)
mean_pop1 = mean(populasi1) # Parameter populasi

# Mengambil semua kemungkinan kombinasi contoh
sampel_normal1 = urnsamples(populasi1, size = 10, replace = F, ordered = F)
mean_normal1   = matrix(apply(sampel_normal1, 1, mean))

# Menghitung Nilai Harapan (E[Xbar])
harapan_mean_norm1 = mean(mean_normal1) 
harapan_mean_norm1
## [1] -0.1048131
mean_pop1
## [1] -0.1048131

#Rataan (Mean): Nilai harapan rataan contoh terbukti sama persis dengan nilai parameter rataan populasi (μ) pada populasi terhingga. Ini berarti x bar adalah penduga tak bias bagi μ

# RAGAM
# Menghitung ragam populasi (sigma^2)
sigma2 = var(populasi1) * (19/20) 

# Penduga dengan pembagi (n-1)
s2.n1 = matrix(apply(sampel_normal1, 1, var))
E.s2.n1 = mean(s2.n1) 

s2.n = s2.n1 * (9/10)
E.s2.n = mean(s2.n)

# Membuat tabel perbandingan untuk melihat hasilnya
hasil_ragam = data.frame(
  "Statistik" = c("Ragam Populasi (sigma^2)", 
                  "Nilai Harapan Ragam (n-1)", 
                  "Nilai Harapan Ragam (n)"),
  "Nilai" = c(sigma2, E.s2.n1, E.s2.n)
)

print(hasil_ragam)
##                   Statistik     Nilai
## 1  Ragam Populasi (sigma^2) 0.6132359
## 2 Nilai Harapan Ragam (n-1) 0.6455115
## 3   Nilai Harapan Ragam (n) 0.5809603

Ragam (Variance): Terdapat perbedaan hasil antara penggunaan pembagi n dan n−1. Hasil simulasi menunjukkan bahwa nilai harapan ragam contoh dengan penyebut n−1 lebih mendekati nilai parameter ragam populasi dibandingkan dengan penyebut n. Oleh karena itu, s kuadrat dengan penyebut n−1 merupakan penduga tak bias bagi σ kuadrat.

# SIMULASI SELANG KEPERCAYAAN
n1    = 10   # ukuran contoh
k     = 100  # jumlah ulangan  
alpha = 0.05
mu    = 50   # mean populasi yang ditentukan
std   = 10   # standar deviasi populasi

set.seed(99)
# Bangkitkan 100 kelompok data contoh
sampel.norm1 = matrix(rnorm(n1*k, mu, std), k)

# Hitung statistik per contoh
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)

# Menghitunh proporsi keberhasilan
proporsi = sum(SK.norm1)/k 
print(proporsi)
## [1] 0.9
warna <- ifelse(SK.norm1 == TRUE, "blue", "red")
plot(xbar.norm1, 1:k, pch = 20, col = warna, 
     xlim = c(mu - 15, mu + 15), 
     xlab = "SK", ylab = "banyak ulangan", 
     main = "Selang Kepercayaan 95% (k=100)")
abline(v = mu, lwd = 2)
for (i in 1:k) {
  lines(c(xbar.norm1[i] - z.norm1 * SE.norm1[i], 
          xbar.norm1[i] + z.norm1 * SE.norm1[i]), 
        c(i, i), col = warna[i])
}

# Proporsi banyaknya selanga memuat μ dalam simulasi ini adalah 0.9. # Dalam grafik simulasi (garis-garis horizontal), garis berwarna biru melambangkan selang yang berhasil memuat parameter populasi, sedangkan garis merah adalah selang yang gagal (tidak melewati garis vertikal rata-rata populasi)