Bootstrap adalah teknik resampling yang digunakan untuk mengestimasi distribusi sampling dari suatu statistik berdasarkan sampel yang tersedia. Teknik ini memungkinkan kita untuk membuat banyak sampel baru dari sampel yang tersedia dengan memilih sampel secara acak dengan pengembalian.
set.seed(1234)
populasi <- rnorm(1000, mean = 50, sd = 10)
n_sample <- 1000
sample_means <- replicate(n_sample, mean(sample(populasi, 100, replace=TRUE)))
estimated_mean <- mean(sample_means)
estimated_mean
## [1] 49.79265
sample_medians <- replicate(n_sample, median(sample(populasi, 100, replace=TRUE)))
estimated_medians <- median(sample_medians)
estimated_medians
## [1] 49.64058
library(tidyr)
library(ggplot2)
## Menggabungkan data mean dan median hasil resampling dalam satu dataframe
df <- data.frame(sample_means, sample_medians)
ggplot(gather(df), aes(x=value, fill=key)) +
geom_histogram(alpha=0.5, position="identity", bins=30) +
labs(title="Histogram Data Mean dan Data Median", x="Nilai", y="Frekuensi", fill="Data")+
geom_vline(aes(xintercept=mean(sample_means)), color="red", linetype="dashed", size=0.5)+
geom_vline(aes(xintercept=mean(sample_medians)), color="blue", linetype="dashed", size=0.5)
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
# data
set.seed(1234)
data <- rnorm(1000)
# Membuat fungsi untuk menghitung ragam
calculate_variance <- function(x) {
return(var(x))
}
# Melakukan bootstrap dengan 1000 iterasi
n_boot <- 1000
variances <- numeric(n_boot)
set.seed(1234)
for (i in 1:n_boot) {
# Mengambil sampel acak dengan pengembalian
sample <- sample(data, 100, replace=TRUE)
# Menghitung ragam dari sampel
variances[i] <- calculate_variance(sample)
}
mean(variances)
## [1] 0.9912643
# dengan pembagi n-1
calculate_variance1 <- function(x) {
return(var(x)*(100-1)/100)
}
set.seed(1234)
for (i in 1:n_boot) {
# Mengambil sampel acak dengan pengembalian
sample1 <- sample(data, 100, replace=TRUE)
# Menghitung ragam dari sampel
variances[i] <- calculate_variance1(sample1)
}
mean(variances)
## [1] 0.9813517
Hasilnya, penduga ragam dengan pembagi n-1 lebih mendekati nilai ragam sebenarnya dari populasi.