# 필요한 라이브러리 로드
library(ggplot2)
library(purrr)
# 모집단에서 표본 추출하여 표본 평균 계산하는 함수
sample_mean <- function(dist, n, size) {
if (dist == "norm") {
replicate(n, mean(rnorm(size)))
} else if (dist == "unif") {
replicate(n, mean(runif(size)))
} else if (dist == "exp") {
replicate(n, mean(rexp(size)))
} else {
stop("지원되지 않는 분포입니다.")
}
}
# 중심극한정리 시뮬레이션 함수
clt_simulation <- function(dist, sizes, n) {
# 표본 크기별로 표본 평균 계산
means_list <- map(sizes, ~ sample_mean(dist, n, .x))
# 결과 데이터프레임 생성
means_df <- data.frame(
sample_size = rep(sizes, each = n),
sample_mean = unlist(means_list)
)
# 표본 평균 분포 시각화
ggplot(means_df, aes(x = sample_mean)) +
geom_histogram(aes(y = after_stat(density)), bins = 30, color = "black", fill = "lightblue") +
facet_wrap(~ sample_size, ncol = length(sizes)) +
stat_function(fun = dnorm, args = list(mean = mean(means_df$sample_mean), sd = sd(means_df$sample_mean)),
color = "red", linewidth = 1) +
labs(title = "표본 크기에 따른 표본 평균의 분포",
x = "표본 평균",
y = "밀도") +
theme_minimal()
}
# 중심극한정리 시뮬레이션 실행
dist <- "unif" # 모집단 분포 선택 ("norm", "unif", "exp")
sizes <- c(1, 10, 30, 50, 100) # 표본 크기 설정
n <- 1000 # 표본 개수 설정
clt_simulation(dist, sizes, n)