Summary

Last Updated: 2022-02-27

주의사항: 본 블로그 내용은 통계 학습차원에서 정리한 내용이며, 틀린 내용이 포함될 수 있습니다. 혹시 틀린 내용이 있다면 알려주세요. 감사합니다.

표본을 이용해서 모평균(모집단 평균값)의 95% 신뢰구간의 내용을 정리한다. ([1], p530)

정리 내용

’95% 신뢰구간’에 대한 핵심 내용은 보건의학통계에 정리가 잘 되어 있다. 이 내용을 위주로 재정리한다. ([3] p208~212)

모집단으로부터 표본을 추출하고, 추출된 표본의 통계량(표본평균, 표본표준편차)을 통해 모수(모평균, 모표준편차)를 추정할 수 있다. 이를 점추정(point estimation)이라고 한다. 하지만, 점추정만으로는 이 모수가 얼마나 정밀하게 추정되었는지 알 수 없으므로, 모평균이 존재할 구간을 확률적으로 추정하는 것이 구간추정(interval estimation)이 동시에 사용될 수 있다. ([3] p208)

95%가 의미하는 것은 무엇일까? 표본에서 구한 평균값으로 모집단 평균값의 구간추정을 할 때, 이 구간안에 모집단 평균값이 들어 있어야 하는데… 모집단 평균값이 없을 수도 있다. 100번 구간추정을 해서 100개의 신뢰구간을 구했을 때, 이 중 95개의 신뢰구간에는 모평균값이 들어 있다고 판단하는 것이 95%의 의미이다.

예를들어, 모집단으로 1000명의 학생이 있고, 모평균이 65, 표준편차가 5인 정규분포라고 가정하자. 여기서 무작위 비복원 샘플링을 하고, 표본의 평균과 분산을 구해서, 모평균에 대한 95% 신뢰구간을 구해보자. 이걸 100번 시도하고, 이렇게 구한 신뢰구간에 모수가 몇번이나 포함되는지 시뮬레이션 해보자.

\(모평균의 95\% 신뢰구간 = \bar{X} \pm 1.96 \frac{s}{\sqrt{n}}\)

set.seed(3456)
score <- rnorm(1000, mean = 65, sd = 5) # 1000명의 학생의 성적 (모집단)

hist(score, breaks = 100)

score_mean <- mean(score) # 모집단의 평균
score_sd <- sd(score) # 모집단의 표준편차

score_mean
## [1] 65.09506
score_sd
## [1] 5.060097
# 30명을 무작위로 추출한다. (표본)
n <- 30 # 표본 사이즈
try_count <- 100 # 시행 횟수
result <- c() # 모집단의 평균이 표본을 이용한 신뢰구간에 포함되는 개수 

for(i in 1:try_count)
{
  sample_score <- sample(score, n, replace = FALSE) # 무작위 비복원 샘플링 수행
  sample_mean <- mean(sample_score) # 표본 평균
  sample_sd <- sd(sample_score) # 표본 표준편차

  intervals <- sample_mean + c(-1.96, 1.96) * sample_sd / sqrt(n) # 샘플의 신뢰구간
  
  # 만약 샘플의 신뢰구간안에 모집단의 평균이 포함되면 1을 아니면 0을 결과에 추가한다.
  in_score <- (score_mean >= intervals[1] && score_mean <= intervals[2])
  result <- c(result, in_score)
}

result
##   [1]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
##  [13]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
##  [25]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
##  [37]  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
##  [49]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
##  [61]  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
##  [73]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
##  [85]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
##  [97]  TRUE  TRUE  TRUE  TRUE
sum(result)
## [1] 98

즉, 1번 샘플링 할 때 30를 뽑아서 신뢰구간을 얻고, 이를 100번 시도해서 100개의 신뢰구간을 얻었는데, 신뢰구간안에 모집단의 평균이 포함된 횟수가 93번이다.

모집단의 모표준편차에 따라서, 표본으로 구한 모평균의 신뢰구간에 영향을 줄까? 예제를 다시 보자.

# 모집단, 시행횟수, 샘플수
getCICount <- function(score, try_count, n)
{
  score_mean <- mean(score) # 모집단의 평균값
  result <- c() # 모집단의 평균이 신뢰구간에 포함되는지의 결과값
  
  for(i in 1:try_count)
  {
    sample_score <- sample(score, n, replace = FALSE) # 무작위 비복원 샘플링 수행
    sample_mean <- mean(sample_score) # 샘플의 평균
    sample_sd <- sd(sample_score) # 샘플의 표준편차
  
    intervals <- sample_mean + c(-1.96, 1.96) * sample_sd / sqrt(n) # 샘플의 신뢰구간
  
    # 만약 샘플의 신뢰구간안에 모집단의 평균이 포함되면 1을 아니면 0을 결과에 추가한다.
    in_score <- (score_mean >= intervals[1] && score_mean <= intervals[2])
    result <- c(result, in_score)
  }
  return (mean(result))
}

  
# 모집단의 표준편차를 0.5에서 10까지 0.2씩 증가시켜 모집단을 생성한다.
p_sd <- seq(0.5, 10, by=0.2)

try_count <- 100 # 샘플링 시도 횟수
n <- 30 # 표본 사이즈

# 모집단의 평균이 신뢰구간안에 들어 있는 비율
ratio_interval <- c()

for(i in p_sd)
{
  score <- rnorm(10000, mean = 65, sd = i) # 1000명의 학생의 성적 (모집단), 편차를 달리해서 생성한다.
  ratio <- getCICount(score, try_count, n) # 시뮬레이션 결과값, 모집단 평균이 신뢰구간안에 들어 있는 횟수
  ratio_interval <- c(ratio_interval, ratio)
}

library(ggplot2)

g <- ggplot(data.frame(x = p_sd, y = ratio_interval), aes(x = x, y = y, group = 1)) + geom_line()
g <- g + labs(title = "모의실험", x = "모집단의 편차", y="신뢰구간에 포함된 비율")
#g <- g + theme(text = element_text(family = "나눔명조")) # for windows
g <- g + theme(text = element_text(family = "NanumGothic")) # for mac
g

mean(ratio_interval)
## [1] 0.940625

모집단의 표준편차하고 상관없이 샘플을 이용한 신뢰구간의 95% 정도는 거의 유지됨을 알 수 있다.

신뢰구간에는 표준편차가 사용되는데, 모집단의 표준편차를 알면 모집단의 표준편차를 사용하면 되고, 모를 경우 샘플의 불편분산을 이용하면 된다. 모집단의 표준편차가 무엇인지도 모르고 샘플 수도 30미만이면 정규분포를 이용한 신뢰구간을 구하는 것이 아니라 t-분포의 신뢰구간을 구한다.

t-분포 예를 보자. 아침에 출근버스를 기다리는데 10일동안 평균을 내보니 6시 25분에 도착한다. 표본의 편차가 2분이라고 할 경우, 도착시간의 95% 신뢰구간을 구해보자.

# 1. 모집단 통계를 선택
# 도착시간을 모집단이라고 하고, 도착 평균시간 mu에 대한 신뢰구간을 설정한다.

s_mean <- 0
s_sd <- 2
n <- 10

# 2. 표본분포 선택
# 모집단의 편차를 모르고, 샘플수도 30보다 작으니까 t-분포를 사용한다.
# X_bar ~ t(9)

# 3. 신뢰수준은 95%이다.
tc <- c(1, -1) * qt(0.025, df=(n-1))
interval <- s_mean + tc * s_sd / sqrt(n)

interval
## [1] -1.430714  1.430714

즉, 6시 23분~6시 27분 사이에는 버스가 도착할 가능성이 95% 정도 된다고 볼 수 있다.

다른 예제를 하나 더 보자. Galton의 데이터는 아버지와 자식의 키에 대한 정보가 있다. 자식의 키에 대한 95% 신뢰구간을 구해라.

library(UsingR)
data(galton)

x <- galton$child

interval <- mean(x) + c(-1, 1) * qnorm(0.975) * sd(x) / sqrt(length(x))
interval
## [1] 67.92647 68.25047

References

[1] 돈 그리피스, 2012, Head First Statistics, 한빛미디어

[2] 고지마 히로유키, 2006, 세상에서 가장 쉬운 통계학 입문, 지상사

[3] 배정민, 그림으로 이해하는 닥터 배의 술술 보건의학통계, 2012, 한나래 아카데미