# Mendefinisikan faktor dan level
n_levels <- c(5, 30, 100)
sd_levels <- c(10, 50, 90)
alpha <- 0.05

# Membuat dataframe kosong untuk menampung hasil
df_base <- data.frame(
  n = numeric(),
  sd = numeric(),
  knowledge = character(),
  lebar_interval = numeric(),
  stringsAsFactors = FALSE
)

# Menggunakan nested loop untuk simulasi
for (sd in sd_levels) {
  for (n in n_levels) {
    # 1. Kasus Diketahui (Menggunakan Distribusi Z)
    me_z <- qnorm(1 - alpha / 2) * (sd / sqrt(n))
    df_base <- rbind(df_base, data.frame(n = n, sd = sd, knowledge = "Diketahui (Z)", lebar_interval = 2 * me_z))
    
    # 2. Kasus Tidak Diketahui (Menggunakan Distribusi t)
    me_t <- qt(1 - alpha / 2, df = n - 1) * (sd / sqrt(n))
    df_base <- rbind(df_base, data.frame(n = n, sd = sd, knowledge = "Tidak Diketahui (t)", lebar_interval = 2 * me_t))
  }
}

# Tampilkan hasil data frame ke konsol
print("Tabel Hasil Simulasi (Base R):")
## [1] "Tabel Hasil Simulasi (Base R):"
print(df_base)
##      n sd           knowledge lebar_interval
## 1    5 10       Diketahui (Z)      17.530451
## 2    5 10 Tidak Diketahui (t)      24.833280
## 3   30 10       Diketahui (Z)       7.156777
## 4   30 10 Tidak Diketahui (t)       7.468123
## 5  100 10       Diketahui (Z)       3.919928
## 6  100 10 Tidak Diketahui (t)       3.968434
## 7    5 50       Diketahui (Z)      87.652254
## 8    5 50 Tidak Diketahui (t)     124.166400
## 9   30 50       Diketahui (Z)      35.783883
## 10  30 50 Tidak Diketahui (t)      37.340614
## 11 100 50       Diketahui (Z)      19.599640
## 12 100 50 Tidak Diketahui (t)      19.842170
## 13   5 90       Diketahui (Z)     157.774057
## 14   5 90 Tidak Diketahui (t)     223.499520
## 15  30 90       Diketahui (Z)      64.410989
## 16  30 90 Tidak Diketahui (t)      67.213105
## 17 100 90       Diketahui (Z)      35.279352
## 18 100 90 Tidak Diketahui (t)      35.715905
# ==========================================
# PROSES VISUALISASI MENGGUNAKAN BASE R
# ==========================================

# Mengatur tata letak grafik menjadi 1 baris dan 3 kolom (seperti facet_wrap)
par(mfrow = c(1, 3), mar = c(5, 4, 4, 1)) 

# Loop untuk membuat grafik di setiap level Standar Deviasi
for (current_sd in sd_levels) {
  
  # Filter data untuk SD yang aktif saat ini
  sub_z <- subset(df_base, sd == current_sd & knowledge == "Diketahui (Z)")
  sub_t <- subset(df_base, sd == current_sd & knowledge == "Tidak Diketahui (t)")
  
  # Menentukan batas sumbu Y tertinggi agar grafik tidak terpotong
  max_y <- max(df_base$lebar_interval[df_base$sd == current_sd])
  
  # 1. Plot dasar untuk kelompok "Diketahui (Z)" (Garis Biru)
  plot(
    x = 1:3, # Menggunakan indeks 1, 2, 3 untuk mewakili posisi n (5, 30, 100)
    y = sub_z$lebar_interval,
    type = "b",          # "b" berarti plot keduanya: baik titik maupun garis
    col = "blue",        # Warna biru
    pch = 16,            # Jenis simbol titik (solid circle)
    lwd = 2,             # Ketebalan garis
    ylim = c(0, max_y * 1.1), # Batas vertikal
    xaxt = "n",          # Hilangkan label sumbu X bawaan untuk kustomisasi
    xlab = "Ukuran Sampel (n)",
    ylab = "Lebar Interval Kepercayaan 95%",
    main = paste("Standar Deviasi =", current_sd)
  )
  
  # Mengganti label sumbu X (1, 2, 3) menjadi nominal asli (5, 30, 100)
  axis(side = 1, at = 1:3, labels = c("5", "30", "100"))
  
  # 2. Menambahkan garis untuk kelompok "Tidak Diketahui (t)" (Garis Merah Putus-putus)
  lines(x = 1:3, y = sub_t$lebar_interval, type = "b", col = "red", pch = 17, lwd = 2, lty = 2)
  
  # Menambahkan grid pembantu di latar belakang grafik
  grid(nx = NULL, ny = NULL, col = "gray85", lty = "dotted")
  
  # Menambahkan legenda hanya pada plot pertama (paling kiri) agar rapi
  if (current_sd == sd_levels[1]) {
    legend(
      "topright",
      legend = c("Diketahui (\U03C3)", "Tidak Diketahui (s)"),
      col = c("blue", "red"),
      lty = c(1, 2),
      pch = c(16, 17),
      bty = "n",         # Menghilangkan kotak luar legenda
      cex = 0.9          # Ukuran font legenda
    )
  }
}

# Mengembalikan pengaturan grafik ke default (1x1) setelah selesai menggambar
par(mfrow = c(1, 1))

Secara umum, terdapat tiga pola utama yang dapat kita baca mengenai bagaimana faktor-faktor tersebut berinteraksi dalam menentukan lebar interval kepercayaan 95%: 1. Dampak Ukuran Sampel (n) terhadap Presisi Jika kita perhatikan pergerakan dari kiri ke kanan pada grafik (dari n = 5, ke n = 30, hingga n = 100), lebar interval kepercayaan menyusut secara drastis. - Interpretasi: Sampel yang lebih besar memberikan informasi yang lebih banyak dan akurat tentang populasi. Secara matematis, ukuran sampel (n) bertindak sebagai pembagi (\(\sqrt{n}\)) pada rumus kesalahan standar (standard error). - Dampak Praktis: Ketika sampel Anda sangat kecil (n = 5), rentang ketidakpastiannya sangat lebar (kurang presisi). Ketika sampel dinaikkan menjadi n = 100, kesalahan standar mengecil sehingga rentang taksiran parameter menjadi jauh lebih sempit dan presisi. 2. Dampak Variabilitas Data (Standar Deviasi) terhadap Ketidakpastian Jika kita membandingkan ketiga panel grafik dari kiri ke kanan (Standar Deviasi = 10, 50, dan 90), seluruh garis melonjak ke atas secara linear, mengindikasikan interval yang semakin lebar. - Interpretasi: Standar deviasi mengukur seberapa tersebar atau “berisik” data yang kita miliki. Nilai standar deviasi berada di pembilang pada rumus kesalahan standar. - Dampak Praktis: Data yang homogen/konsisten (SD = 10) membuat kita bisa menebak rata-rata populasi dengan rentang yang sempit. Sebaliknya, jika data sangat heterogen/bervariasi (SD = 90), tingkat ketidakpastiannya tinggi, sehingga kita terpaksa membuat interval yang sangat lebar agar tetap mencakup nilai rata-rata populasi yang sebenarnya dengan keyakinan 95%. 3. Pengaruh Pengetahuan tentang \(\sigma\) (Z vs \(t\)) Faktor ini menunjukkan fenomena yang sangat menarik ketika berinteraksi dengan ukuran sampel (garis Biru vs garis Merah pada simulasi): - Pada Sampel Kecil (n = 5): Jarak (gap) antara garis Distribusi-t (Tidak Diketahui) dan Distribusi-Z (Diketahui) sangat lebar. Interval menggunakan Distribusi-t jauh lebih luas (misal pada SD 50: lebarnya 124.17 vs 87.65). Hal ini terjadi karena pada sampel kecil, kita memiliki “ketidakpastian ganda”—kita tidak tahu rata-rata populasi dan kita juga menebak standar deviasi populasi menggunakan standar deviasi sampel (s). Distribusi-t memberikan “hukuman” berupa nilai kritis yang lebih besar untuk menjaga tingkat kepercayaan tetap 95%. - Pada Sampel Besar (n = 30 dan n = 100): Garis Biru dan Merah saling berimpit dan hampir sama persis. Ketika sampel sudah cukup besar (\(n \ge 30\)), nilai standar deviasi sampel (s) sudah menjadi estimator yang sangat tangguh dan akurat untuk menggantikan \(\sigma\). Akibatnya, nilai kritis dari Distribusi-\(t\) mendekati nilai kritis Distribusi-Z (\(\approx 1.96\)), dan perbedaan pengetahuan ini tidak lagi memengaruhi lebar interval secara signifikan.