# ==========================================
# Simulasi Interval Kepercayaan 95%
# Pengaruh Ukuran Sampel, Standar Deviasi,
# dan Pengetahuan Standar Deviasi Populasi
# ==========================================

set.seed(18)

# Parameter simulasi
mu <- 100
n <- c(5, 30, 100)
sigma <- c(10, 50, 90)
B <- 1000

# Menyiapkan data untuk menyimpan hasil simulasi
hasil <- data.frame()

# Proses simulasi
for(i in n){

  for(j in sigma){

    for(k in 1:B){

      # Membangkitkan data berdistribusi normal
      x <- rnorm(
        n = i,
        mean = mu,
        sd = j
      )

      # Menghitung rata-rata dan standar deviasi sampel
      xbar <- mean(x)
      s <- sd(x)

      # Interval kepercayaan jika sigma diketahui
      z <- qnorm(0.975)

      lower_z <- xbar - z * j / sqrt(i)
      upper_z <- xbar + z * j / sqrt(i)

      # Interval kepercayaan jika sigma tidak diketahui
      t <- qt(0.975, df = i - 1)

      lower_t <- xbar - t * s / sqrt(i)
      upper_t <- xbar + t * s / sqrt(i)

      # Menyimpan hasil simulasi
      hasil <- rbind(
        hasil,
        data.frame(
          n = i,
          SD = j,
          kondisi = "Sigma diketahui",
          lower = lower_z,
          upper = upper_z,
          lebar = upper_z - lower_z
        ),
        data.frame(
          n = i,
          SD = j,
          kondisi = "Sigma tidak diketahui",
          lower = lower_t,
          upper = upper_t,
          lebar = upper_t - lower_t
        )
      )

    }

  }

}

# Menampilkan beberapa hasil simulasi
head(hasil)
##   n SD               kondisi    lower    upper    lebar
## 1 5 10       Sigma diketahui 92.25784 109.7883 17.53045
## 2 5 10 Sigma tidak diketahui 84.69046 117.3557 32.66520
## 3 5 10       Sigma diketahui 97.35689 114.8873 17.53045
## 4 5 10 Sigma tidak diketahui 88.30694 123.9373 35.63034
## 5 5 10       Sigma diketahui 85.19075 102.7212 17.53045
## 6 5 10 Sigma tidak diketahui 80.24259 107.6694 27.42676
# Menghitung rata-rata lebar interval kepercayaan
hasil_akhir <- aggregate(
  lebar ~ n + SD + kondisi,
  data = hasil,
  FUN = mean
)

hasil_akhir
##      n SD               kondisi      lebar
## 1    5 10       Sigma diketahui  17.530451
## 2   30 10       Sigma diketahui   7.156777
## 3  100 10       Sigma diketahui   3.919928
## 4    5 50       Sigma diketahui  87.652254
## 5   30 50       Sigma diketahui  35.783883
## 6  100 50       Sigma diketahui  19.599640
## 7    5 90       Sigma diketahui 157.774057
## 8   30 90       Sigma diketahui  64.410989
## 9  100 90       Sigma diketahui  35.279352
## 10   5 10 Sigma tidak diketahui  23.284875
## 11  30 10 Sigma tidak diketahui   7.397150
## 12 100 10 Sigma tidak diketahui   3.959915
## 13   5 50 Sigma tidak diketahui 116.738583
## 14  30 50 Sigma tidak diketahui  37.015688
## 15 100 50 Sigma tidak diketahui  19.743135
## 16   5 90 Sigma tidak diketahui 212.041966
## 17  30 90 Sigma tidak diketahui  66.922891
## 18 100 90 Sigma tidak diketahui  35.645244
# Membuat grafik
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.5.2
ggplot(
  hasil_akhir,
  aes(
    x = factor(n),
    y = lebar,
    fill = kondisi
  )
) +
  geom_col(position = "dodge") +
  facet_wrap(~SD) +
  labs(
    title = "Pengaruh Ukuran Sampel dan Standar Deviasi terhadap Lebar Interval Kepercayaan 95%",
    x = "Ukuran Sampel",
    y = "Rata-rata Lebar Interval Kepercayaan"
  )

# Membuat ringkasan hasil simulasi
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.5.2
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
ringkasan <- hasil %>%
  group_by(n, SD, kondisi) %>%
  summarise(
    rata_rata_lebar_CI = mean(lebar),
    .groups = "drop"
  )

ringkasan
## # A tibble: 18 × 4
##        n    SD kondisi               rata_rata_lebar_CI
##    <dbl> <dbl> <chr>                              <dbl>
##  1     5    10 Sigma diketahui                    17.5 
##  2     5    10 Sigma tidak diketahui              23.3 
##  3     5    50 Sigma diketahui                    87.7 
##  4     5    50 Sigma tidak diketahui             117.  
##  5     5    90 Sigma diketahui                   158.  
##  6     5    90 Sigma tidak diketahui             212.  
##  7    30    10 Sigma diketahui                     7.16
##  8    30    10 Sigma tidak diketahui               7.40
##  9    30    50 Sigma diketahui                    35.8 
## 10    30    50 Sigma tidak diketahui              37.0 
## 11    30    90 Sigma diketahui                    64.4 
## 12    30    90 Sigma tidak diketahui              66.9 
## 13   100    10 Sigma diketahui                     3.92
## 14   100    10 Sigma tidak diketahui               3.96
## 15   100    50 Sigma diketahui                    19.6 
## 16   100    50 Sigma tidak diketahui              19.7 
## 17   100    90 Sigma diketahui                    35.3 
## 18   100    90 Sigma tidak diketahui              35.6
Berdasarkan hasil simulasi, ukuran sampel, standar deviasi, dan pengetahuan mengenai standar deviasi populasi berpengaruh terhadap lebar interval kepercayaan 95%. Semakin besar ukuran sampel, interval kepercayaan semakin sempit sehingga estimasi menjadi lebih presisi. Sebaliknya, semakin besar standar deviasi, interval kepercayaan semakin lebar karena penyebaran data yang lebih tinggi. Selain itu, kondisi standar deviasi populasi yang tidak diketahui menghasilkan interval kepercayaan yang sedikit lebih lebar dibandingkan ketika standar deviasi populasi diketahui karena menggunakan distribusi t yang mempertimbangkan ketidakpastian tambahan.