# LATIHAN 1

# Menetapkan seed
set.seed(150)

# Menghasilkan 1000 observasi berdistribusi normal
data_asli <- rnorm(1000, mean = 30, sd = 2.5)

# Menyimpan rata-rata bootstrap
bootstrap.results <- numeric(50)

# Melakukan bootstrap sebanyak 50 kali
for(i in 1:50){

  bootstrap.sample <- sample(data_asli,
                             size = 1000,
                             replace = TRUE)

  bootstrap.results[i] <- mean(bootstrap.sample)

}

# Menampilkan hasil bootstrap
bootstrap.results
##  [1] 29.91217 29.95111 29.88946 29.83869 29.83717 29.96443 29.87997 29.98104
##  [9] 29.88365 29.88761 29.92220 29.88761 29.92020 29.88494 29.90298 29.91531
## [17] 29.87105 29.87878 30.02194 29.94590 29.95923 29.74643 29.92373 29.94112
## [25] 29.83525 30.01097 29.99350 30.06145 29.97009 29.92336 29.84687 29.92258
## [33] 29.91140 29.99878 29.96903 29.90596 29.86557 29.97388 29.96784 29.97746
## [41] 29.87797 30.01480 30.10231 29.91795 29.89808 29.99120 29.93832 29.85962
## [49] 29.90181 29.95929
# Sanity Check

cat("10 Nilai Rata-rata Bootstrap Pertama\n")
## 10 Nilai Rata-rata Bootstrap Pertama
head(bootstrap.results, 10)
##  [1] 29.91217 29.95111 29.88946 29.83869 29.83717 29.96443 29.87997 29.98104
##  [9] 29.88365 29.88761
cat("\nJumlah Hasil Bootstrap\n")
## 
## Jumlah Hasil Bootstrap
length(bootstrap.results)
## [1] 50
cat("\nRingkasan Statistik\n")
## 
## Ringkasan Statistik
summary(bootstrap.results)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   29.75   29.89   29.92   29.93   29.97   30.10
cat("\nRata-rata Bootstrap\n")
## 
## Rata-rata Bootstrap
mean(bootstrap.results)
## [1] 29.92684
cat("\nSimpangan Baku Bootstrap\n")
## 
## Simpangan Baku Bootstrap
sd(bootstrap.results)
## [1] 0.06342673
cat("\nVarians Bootstrap\n")
## 
## Varians Bootstrap
var(bootstrap.results)
## [1] 0.004022951
cat("\nStruktur Data\n")
## 
## Struktur Data
str(bootstrap.results)
##  num [1:50] 29.9 30 29.9 29.8 29.8 ...

Pada latihan ini dibangkitkan 1000 observasi yang mengikuti distribusi normal dengan rata-rata 30 dan simpangan baku 2,5 menggunakan fungsi rnorm(). Selanjutnya dilakukan proses bootstrap sebanyak 50 kali dengan teknik sampling with replacement (replace = TRUE). Pada setiap proses bootstrap diambil sampel berukuran 1000 observasi dari data asli, kemudian dihitung rata-ratanya dan disimpan dalam vektor bootstrap.results.

Hasil sanity check menunjukkan bahwa bootstrap.results berisi 50 nilai rata-rata bootstrap. Ringkasan statistik (summary()) memperlihatkan bahwa rata-rata bootstrap berada di sekitar nilai rata-rata populasi, yaitu sekitar 30, sedangkan nilai simpangan baku (sd()) relatif kecil. Hal ini menunjukkan bahwa estimasi rata-rata yang diperoleh melalui bootstrap cukup stabil.

#==================================================
# LATIHAN 2
#==================================================

# Menampilkan dua histogram dalam satu jendela
par(mfrow = c(1,2))

# Histogram data asli
hist(data_asli,
     main = "Histogram Data Asli",
     xlab = "Nilai",
     col = "skyblue",
     border = "black")

# Histogram rata-rata bootstrap
hist(bootstrap.results,
     main = "Histogram Rata-rata Bootstrap",
     xlab = "Rata-rata",
     col = "lightgreen",
     border = "black")

Histogram pertama menunjukkan distribusi 1000 observasi yang dibangkitkan menggunakan distribusi normal dengan rata-rata 30 dan simpangan baku 2,5. Bentuk histogram menyerupai distribusi normal sesuai dengan parameter yang digunakan.

Histogram kedua menunjukkan distribusi 50 rata-rata bootstrap yang diperoleh dari proses resampling. Dibandingkan histogram data asli, distribusi rata-rata bootstrap tampak lebih terpusat di sekitar nilai 30 dengan penyebaran yang lebih kecil. Hal ini menunjukkan bahwa metode bootstrap menghasilkan estimasi rata-rata yang stabil dan mendekati rata-rata populasi melalui proses pengambilan sampel ulang.