# Set seed agar hasil reproducible
set.seed(123)

# Parameter
n_values <- c(5, 30, 100)
sd_values <- c(10, 50, 90)
mean_pop <- 100   # asumsi mean populasi

# Fungsi menghitung Interval Kepercayaan 95%
hitung_ci <- function(data, sigma_known = TRUE, sigma_pop = NULL) {
  n <- length(data)
  mean_sample <- mean(data)
  s <- sd(data)
  
  if (sigma_known) {
    # Menggunakan Z
    z <- qnorm(0.975)
    se <- sigma_pop / sqrt(n)
    lower <- mean_sample - z * se
    upper <- mean_sample + z * se
    metode <- "Z (σ diketahui)"
  } else {
    # Menggunakan t 
    t_val <- qt(0.975, df = n - 1)
    se <- s / sqrt(n)
    lower <- mean_sample - t_val * se
    upper <- mean_sample + t_val * se
    metode <- "t (σ tidak diketahui)"
  }
  
  return(data.frame(
    n = n,
    mean = mean_sample,
    sd = s,
    lower = lower,
    upper = upper,
    lebar = upper - lower,
    metode = metode
  ))
}

# Simulasi
hasil <- data.frame()

for (n in n_values) {
  for (sd_pop in sd_values) {
    
    # Generate data
    data <- rnorm(n, mean = mean_pop, sd = sd_pop)
    
    # Kasus 1: σ diketahui
    ci_z <- hitung_ci(data, sigma_known = TRUE, sigma_pop = sd_pop)
    ci_z$sd_pop <- sd_pop
    
    # Kasus 2: σ tidak diketahui
    ci_t <- hitung_ci(data, sigma_known = FALSE)
    ci_t$sd_pop <- sd_pop
    
    # Gabungkan
    hasil <- rbind(hasil, ci_z, ci_t)
  }
}

# Tampilkan hasil
print(hasil)
##      n      mean        sd    lower    upper      lebar                metode
## 1    5 101.93570  8.110218 93.17048 110.7009  17.530451       Z (σ diketahui)
## 2    5 101.93570  8.110218 91.86554 112.0059  20.140333 t (σ tidak diketahui)
## 3    5  97.78405 58.174480 53.95792 141.6102  87.652254       Z (σ diketahui)
## 4    5  97.78405 58.174480 25.55089 170.0172 144.466314 t (σ tidak diketahui)
## 5    5 127.71116 57.551686 48.82413 206.5982 157.774057       Z (σ diketahui)
## 6    5 127.71116 57.551686 56.25130 199.1710 142.919714 t (σ tidak diketahui)
## 7   30 100.24349 10.074973 96.66510 103.8219   7.156777       Z (σ diketahui)
## 8   30 100.24349 10.074973 96.48143 104.0055   7.524113 t (σ tidak diketahui)
## 9   30  98.26662 46.347452 80.37468 116.1586  35.783883       Z (σ diketahui)
## 10  30  98.26662 46.347452 80.96020 115.5730  34.612846 t (σ tidak diketahui)
## 11  30 115.19503 73.515041 82.98954 147.4005  64.410989       Z (σ diketahui)
## 12  30 115.19503 73.515041 87.74407 142.6460  54.901935 t (σ tidak diketahui)
## 13 100  99.46196  9.993672 97.50200 101.4219   3.919928       Z (σ diketahui)
## 14 100  99.46196  9.993672 97.47900 101.4449   3.965923 t (σ tidak diketahui)
## 15 100 102.38772 46.794062 92.58790 112.1875  19.599640       Z (σ diketahui)
## 16 100 102.38772 46.794062 93.10276 111.6727  18.569914 t (σ tidak diketahui)
## 17 100  99.13488 93.090754 81.49520 116.7746  35.279352       Z (σ diketahui)
## 18 100  99.13488 93.090754 80.66365 117.6061  36.942450 t (σ tidak diketahui)
##    sd_pop
## 1      10
## 2      10
## 3      50
## 4      50
## 5      90
## 6      90
## 7      10
## 8      10
## 9      50
## 10     50
## 11     90
## 12     90
## 13     10
## 14     10
## 15     50
## 16     50
## 17     90
## 18     90
# Urutkan agar rapi
hasil <- hasil[order(hasil$n, hasil$sd_pop), ]
print(hasil)
##      n      mean        sd    lower    upper      lebar                metode
## 1    5 101.93570  8.110218 93.17048 110.7009  17.530451       Z (σ diketahui)
## 2    5 101.93570  8.110218 91.86554 112.0059  20.140333 t (σ tidak diketahui)
## 3    5  97.78405 58.174480 53.95792 141.6102  87.652254       Z (σ diketahui)
## 4    5  97.78405 58.174480 25.55089 170.0172 144.466314 t (σ tidak diketahui)
## 5    5 127.71116 57.551686 48.82413 206.5982 157.774057       Z (σ diketahui)
## 6    5 127.71116 57.551686 56.25130 199.1710 142.919714 t (σ tidak diketahui)
## 7   30 100.24349 10.074973 96.66510 103.8219   7.156777       Z (σ diketahui)
## 8   30 100.24349 10.074973 96.48143 104.0055   7.524113 t (σ tidak diketahui)
## 9   30  98.26662 46.347452 80.37468 116.1586  35.783883       Z (σ diketahui)
## 10  30  98.26662 46.347452 80.96020 115.5730  34.612846 t (σ tidak diketahui)
## 11  30 115.19503 73.515041 82.98954 147.4005  64.410989       Z (σ diketahui)
## 12  30 115.19503 73.515041 87.74407 142.6460  54.901935 t (σ tidak diketahui)
## 13 100  99.46196  9.993672 97.50200 101.4219   3.919928       Z (σ diketahui)
## 14 100  99.46196  9.993672 97.47900 101.4449   3.965923 t (σ tidak diketahui)
## 15 100 102.38772 46.794062 92.58790 112.1875  19.599640       Z (σ diketahui)
## 16 100 102.38772 46.794062 93.10276 111.6727  18.569914 t (σ tidak diketahui)
## 17 100  99.13488 93.090754 81.49520 116.7746  35.279352       Z (σ diketahui)
## 18 100  99.13488 93.090754 80.66365 117.6061  36.942450 t (σ tidak diketahui)
##    sd_pop
## 1      10
## 2      10
## 3      50
## 4      50
## 5      90
## 6      90
## 7      10
## 8      10
## 9      50
## 10     50
## 11     90
## 12     90
## 13     10
## 14     10
## 15     50
## 16     50
## 17     90
## 18     90
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.4.3
ggplot(hasil, aes(x = factor(n), y = lebar, fill = metode)) +
  geom_bar(stat = "identity", position = "dodge") +
  facet_wrap(~ sd_pop) +
  labs(
    title = "Pengaruh n dan Standar Deviasi terhadap Lebar Interval Kepercayaan 95%",
    x = "Ukuran Sampel (n)",
    y = "Lebar Interval"
  ) +
  theme_minimal()

INTERPRETASI

Berdasarkan hasil simulasi, diperoleh bahwa ukuran sampel memiliki pengaruh negatif terhadap lebar interval kepercayaan 95%, dimana semakin besar ukuran sampel maka interval kepercayaan semakin sempit. Sebaliknya, standar deviasi memiliki pengaruh positif terhadap lebar interval, dimana semakin besar variabilitas data maka interval semakin lebar. Selain itu, penggunaan distribusi t pada kondisi standar deviasi populasi tidak diketahui menghasilkan interval yang lebih lebar dibandingkan distribusi Z karena adanya tambahan ketidakpastian dalam estimasi.