티스토리 뷰
Q. 샘플 분산은 ( 표본 값과 표본 평균의 차의 제곱값 ) 을 샘플의 갯수 n이 아닌 (n-1) 로 나누어 구한다. 다음의 조건에서 n 으로 나눈 경우와 (n-1)로 나눈 경우를 모분산과 비교하여 그래프를 그리시오.
(모집단 데이터 갯수 N ) = 100,000
(모집단 분포) = 1 ~ 10 까지 정수의 균등 분포
(표본 집단의 데이터 갯수 n ) = 1000
(표본 집단의 수 num_samples ) = 500
표본 집단의 수의 변화 ( 1 ~ 500 )에 따른 2가지 방법에 의해 구한 분산과 모분산을 그래프로 그리시오.
A.
###########################################################################
################### 샘플 분산 Test
# random 초기화
set.seed(1234)
#모 데이터 100,000 개 생성
N <- 100000
org_data <- sample(1:10, N, replace = T)
# 모평균과 모분산
mu <- mean(org_data)
var <- sum((org_data - mu)^2)/N
# 1000 개 레코드를 가진 500개 샘플에 대한 평균과 분산 계산
# 1. n 사용
num_samples <- 500
n <- 1000
s500_1000_n <- replicate(num_samples, sample(org_data, n, replace = F))
mean_500_1000_n <- apply(s500_1000_n, 1, mean)
var_500_1000_n <- c(1:num_samples)
var_500_1000_n_avg <- c(1:num_samples)
for (idx in c(1:num_samples)) {
var_500_1000_n[idx] <-
sum( (s500_1000_n[idx,] - mean_500_1000_n[idx])^2 )/num_samples
var_500_1000_n_avg[idx] <-
mean(var_500_1000_n[1:idx])
}
# 2. n-1 사용
var_500_1000_n_1 <- c(1:num_samples)
var_500_1000_n_1_avg <- c(1:num_samples)
for (idx in c(1:num_samples)) {
var_500_1000_n_1[idx] <-
sum( (s500_1000_n[idx,] - mean_500_1000_n[idx])^2 )/(num_samples -1)
var_500_1000_n_1_avg[idx] <-
mean(var_500_1000_n_1[1:idx])
}
df_sample_var <- data.frame(sample_count = c(1:num_samples),
var_500_1000_n_avg,
var_500_1000_n_1_avg)
library(reshape2)
df_sample_var_reshape <- melt(df_sample_var, id.vars = c("sample_count"))
str(df_sample_var_reshape)
df_sample_var_reshape %>% ggplot(aes(x = sample_count,
y = value,
color = variable)) +
geom_line() +
geom_hline(yintercept = var, color="black")
###########################################################################################33
결과 그래프
'Simulation 방법' 카테고리의 다른 글
몬테카를로(Monte Carlo) 시뮬레이션 - 몬티홀 문제 (0) | 2019.05.27 |
---|---|
몬테카를로(Monte Carlo) 시뮬레이션 - 원 면적 구하기 (0) | 2019.05.27 |