Dalam statistik, kita sering ingin melakukan resampling untuk menguji keakuratan estimasi sampel kita. Ini disebut bootstrapping—sebuah tes yang didasarkan pada pengambilan sampel acak berulang denganpengembalian (replacement). Dalam pembelajaran kali ini, kita akan :
Kita akan membuat sebuah vektor berisi angka yang terdistribusi secara normal dengan nama myData. # Membuat Distribusi Normal Acak Menggunakan rnorm() Fungsi rnorm() memungkinkan kita untuk menghasilkan urutan angka acak dari distribusi normal hipotetisdengan rata-rata (mean) 20 dan standar deviasi 4.5. Di sini, kita memilih untuk menghasilkan 2000 observasi.
set.seed(300) # Setting the seed for replication purposes
myData <- rnorm(2000,20,4.5) # Creating a random normal distribution (n=300, mean=20, sd=4.5)
Penjelasan: - set.seed(300) digunakan untuk menetapkan seed (angka acak) agar hasil yang dihasilkan oleh fungsi acak(seperti rnorm) dapat direplikasi. Ini memastikan bahwa setiap kali kode dijalankan, hasilnya akan sama.- rnorm(2000, 20, 4.5) menghasilkan 2000 observasi dari distribusi normal dengan mean 20 dan standardeviasi 4.5. Hasilnya disimpan dalam vektor myData.
Untuk memastikan bahwa vektor myData telah dibuat dengan benar, kita memverifikasi bahwa: 1. Terdapat 2000 observasi (menggunakan length()), 2. Nilai rata-rata (mean) mendekati 20 (menggunakan mean()), dan 3. Standar deviasi mendekati 4.5 (menggunakan sd()).
Catatan: Kita tidak seharusnya mengharapkan mean dan standar deviasi memiliki nilai yang persis samadengan yang kita masukkan ke dalam rnorm(), karena ada unsur acak yang terlibat saat menggunakan fungsiini (rnorm menghasilkan distribusi normal acak di sekitar mean dan standar deviasi yang diberikan).
length(myData) # How many observations?
## [1] 2000
length(myData) menghitung jumlah observasi dalam vektor myData. Harusnya menghasilkan 2000 karena kita membuat 2000 observasi.
sd(myData) # What is the standard deviation?
## [1] 4.590852
sd(myData) menghitung standar deviasi dari vektor myData. Harusnya mendekati 4.5 karena kita menetapkanstandar deviasi = 4.5 saat membuat data.
Untuk tujuan visual, berikut adalah grafik dari vektor myData. Garis putus-putus merah menunjukkan nilai mean (20.25773) dari distribusi ini.
# Membuat histogram dari myData
hist(myData, breaks = 30, col = "skyblue", main = "Distribusi myData", xlab = "Nilai", ylab = "Frekuensi")
# Menambahkan garis vertikal untuk mean
abline(v = mean(myData), col = "purple", lwd = 2, lty = 2)
# Menambahkan legenda
legend("topright", legend = paste("Mean =", round(mean(myData), 5)), col = "purple", lty = 2, lwd = 2)
Penjelasan:
Bootstrapping adalah metode untuk memperhitungkan ketidakpastian saat kitamengukur estimasi sampel. Dengan menggunakan pengambilan sampel acak dengan pengembalian (randomsampling with replacement), kita menghitung estimasi kita untuk berbagai sampel acak yang diambil dari distribusi asli kita.
Analogi dengan “Mean of Means” pada Dadu Perhatikan kejadian saat menghitung “rata-rata dari rata-rata”(mean of means) untuk lemparan dadu, kita memperkirakan seberapa besar kemungkinan kita akanmengamati estimasi sampel tertentu (misalnya, mean, standar deviasi). Jika kita mengambil sampel ulangsecara acak dari distribusi dasar ini dengan penggantian sejumlah besar kali. Alasan kita mengambil sampelulang dengan penggantian adalah untuk memungkinkan angka-angka tertentu dipilih beberapa kali, yangmenciptakan varians yang lebih besar dalam distribusi yang dihasilkan.
Mengapa Menggunakan Pengembalian (Replacement)? Alasan kita menggunakan pengembalian adalahuntuk memungkinkan angka tertentu dipilih lebih dari satu kali, yang menciptakan variasi yang lebih besardalam distribusi yang dihasilkan.
Langkah-langkah Bootstrapping: 1. Ambil sampel acak dengan pengembalian dari distribusi asli. 2. Hitung estimasi (misalnya, mean, median, standar deviasi) untuk sampel tersebut. 3. Ulangi proses ini berkali-kali (misalnya, 1000 kali) untuk menghasilkan distribusi estimasi. 4. Analisis distribusi estimasi ini untuk memahami variabilitas dan ketidakpastian dari estimasi sampel.
Secara sederhana, yang kita lakukan di sini adalah menghitung mean dari 1000 sampel yang masing-masingterdiri dari 2000 observasi dari myData menggunakan perulangan for(i in x). Mean dari setiap sampel ini disimpan dalam sebuah vektor (bootstrap.results). Tujuan: Kita tertarik untuk mengukur ketidakpastian dalam distribusi estimasi kita (dalam hal ini, mean). Untukmelakukannya, kita menghitung standar deviasi dari setiap mean yang dihitung menggunakan pengambilansampel acak dengan pengembalian (random sampling with replacement).
Latihan 1 Tetapkan benih Anda pada angka 150. Hasilkan distribusi normal acak dari 1000 observasi, dengan rata-rata30 dan simpangan baku 2,5. Hitung rata-rata dari 50 sampel dari 1000 observasi dari kumpulan data tersebut.Simpan hasil Anda dalam vektor. Fungsi yang relevan: set.seed(), rnorm(), for(i in x), sample(). Latihan 2 Hasilkan dua histogram untuk menampilkan secara grafis distribusi rata-rata yang diperoleh dalam Latihan 1serta nilai dari 1000 observasi dalam kumpulan data asli Anda. Gabungkan histogram ini menjadi satu grafikkeseluruhan. Fungsi yang relevan: par(), hist().
# Latihan 1: Membuat Distribusi Normal Acak dan Bootstrapping Mean
set.seed(150) # Menetapkan seed agar hasil bisa direplikasi
# Membuat distribusi normal acak
data <- rnorm(1000, mean = 30, sd = 2.5)
# Melakukan bootstrapping dengan 50 sampel acak
bootstrap_means <- numeric(50) # Vektor kosong untuk menyimpan hasil
for (i in 1:50) {
sample_data <- sample(data, size = length(data), replace = TRUE)
bootstrap_means[i] <- mean(sample_data)
}
# Menampilkan hasil
length(bootstrap_means) # Panjang vektor hasil bootstrapping
## [1] 50
summary(bootstrap_means) # Ringkasan statistik
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 29.75 29.89 29.92 29.93 29.97 30.10
# Latihan 2: Membuat histogram dan menambahkan legenda
par(mfrow = c(2,1), pin = c(5.8,0.98)) # Atur tata letak grafik
# --- Membuat data contoh untuk myData ---
myData <- rnorm(200, mean = 50, sd = 15) # Membuat 200 angka acak dari distribusi normal
# dengan mean 50 dan standar deviasi 15
# Histogram untuk distribusi myData
hist(myData,
col = "#37aad8",
xlab = "Value",
main = "Distribusi myData",
breaks = 30)
# Tambahkan garis vertikal untuk mean
abline(v = mean(myData), col = "yellow", lwd = 2, lty = 2)
# Tambahkan legenda
legend("topright", legend = paste("Mean =", round(mean(myData), 2)), col = "yellow", lty = 2, lwd = 2)
# --- Membuat data contoh untuk bootstrap.results ---
# Contoh simulasi bootstrap sederhana (hanya untuk ilustrasi histogram)
originalData <- rnorm(100, mean = 50, sd = 15)
bootstrap.means <- replicate(50, mean(sample(originalData, size = length(originalData), replace = TRUE)))
# Histogram untuk distribusi hasil bootstrap
hist(bootstrap.means,
col = "#d83737",
xlab = "Mean",
main = "Distribusi Mean dari 50 Sampel Bootstrap",
breaks = 30)
# Tambahkan garis vertikal untuk mean bootstrap
abline(v = mean(bootstrap.means), col = "black", lwd = 2, lty = 2)
# Tambahkan legenda
legend("topright", legend = paste("Mean Bootstrap =", round(mean(bootstrap.means), 2)),
col = "black", lty = 2, lwd = 2)