티스토리 뷰

STATA

신뢰구간이란 무엇인가?

비조 2018. 10. 31. 14:38

신뢰구간에 대한 이해

나만 그랬는지 모르겠지만

통계학을 공부하면서 처음 맞이하는 당황스러움 중 하나는 신뢰구간에 대한 이해이다.

경제학에서 리카도의 비교우위론이 전혀 이해가 안되었던 것처럼 

신뢰구간 역시도 아직도 직관적으로 이해가 가질 않는다.


신뢰구간에 대한 이해가 어려운 이유는

우리가 상식적으로 생각하는 신뢰구간에 대한 직관적인 이해와

통계학적 정의 사이에 불일치가 발생하기 때문이다.


예컨대, 대통령 선거 전 여론조사에서 문재인 후보에 대한 지지율을 조사했다고 해보자.

조사개요에 따르면 조사된 문재인 후보의 지지율이 40%이고 95% 신뢰수준에 표본오차가 플러스-마이너스 2.5%라고 하자. 

그러면 신뢰구간은 [37.5%, 42.5%]이 된다.

이 신뢰구간의 의미는 무엇인가?


상식적으로 생각해보면 사람들은 위 신뢰구간을 보고

[37.5%, 42.5%]안에 문재인 후보의 참 지지율 $\theta$가 있고 

더 정확히는 신뢰수준이 95%이기 때문에 참 지지율이 위 신뢰구간에 포함될 확률이 95%라는 것이다.

즉, 95% 정도의 정확도를 가지고 위 신뢰구간 안에 참 지지율이 있을 것이라는 정도로 해석을 할 것이다.

굳이 식으로 나타내자면 다음과 같다.


$$ \Pr(37.5 \leq \theta \leq 42.5) = 0.95 $$


신뢰구간에 대한 이러한 해석은 신뢰구간의 정의에 비쳐 보았을 때 옳은 것인가?

이른바 frequentist의 입장에서 보면, 위 해석에는 문제가 있다. 

먼저, 문재인 후보의 참 지지율 $\theta$는 확률변수가 아니다. 

참 지지율은 상수이기 때문에 $ P(37.5 \leq \theta \leq 42.5) = 0.95 $ 이라고 쓰는 것이 아예 의미가 없다. 


그렇다면 우리의 생각이 잘못된 것이 아닐까? 

그렇지는 않다. 다만 통계학에서 배우는 신뢰구간이 우리가 생각하는 것을 의미하지 않기 때문에 발생하는 문제이다.

그러한 이유로 우리가 생각하는 방법과 유사한 답을 주는 Bayesian이 등장하게 되는 것이다(이건 나중에 따로 기술할 예정).


그럼 도대체 신뢰구간 [37.5%, 42.5%]은 도대체 무엇을 의미하는 것인가?

표본이라는 것은 다른 숫자들이 나올 수 있었음에도 불구하고 특정 숫자들로 실현된 값들이다. 

충분히 높은 가능성으로 다른 숫자들이 나올 수도 있었다. 

그렇다면 위 신뢰구간과는 다른 신뢰구간이 구축되었을 것이다. 

100번의 표집이 이루어졌다면 100개의 신뢰구간이 구축할 수 있었을 것이다.

이렇게 구축된 신뢰구간 100개 중 95개는 무엇인지 모르지만 문재인 후부의 참 지지율을 포함하고(덮고) 있다는 것이다.

[37.5%, 42.5%]는 이러한 100개의 신뢰구간 중 하나이기 때문에 참값을 포함할 가능성이 0.95가 된다는 것이다.


아래와 같은 Stata 프로그램으로 간단히 이해해 볼 수 있다.

다음과 같이 ci_s라는 프로그램을 만들자. 

아래 프로그램은 30개의 샘플을 평균 2, 표준편차 2인 정규분포에서 표본을 임의추출해서 표본의 평균과 신뢰구간의 상한, 하한을 계산해주는 프로그램이다.

. cap program drop ci_s

. set seed 1234567

. program define ci_s, rclass
  1.         clear
  2.         drop _all
  3.         set obs 30
  4.         tempvar x
  5.         gen `x' = rnormal(2, 2)
  6.         qui ci means `x'
  7.         return scalar mean = r(mean)
  8.         return scalar ci_u = r(ub)
  9.         return scalar ci_l = r(lb)
 10. end

그리고 다음과 같이 시뮬레이션을 해보자. 

위 표본 추출을 100번 시뮬레이션 해서 신뢰구간을 100개 구축하는 것이다.

. simulate mean = r(mean) ul = r(ci_u) ll = r(ci_l), reps(100): ci_s

      command:  ci_s
         mean:  r(mean)
           ul:  r(ci_u)
           ll:  r(ci_l)

Simulations (100)
----+--- 1 ---+--- 2 ---+--- 3 ---+--- 4 ---+--- 5 
..................................................    50
..................................................   100

다음으로 적당히 그림을 그려보자.

. gen order = _n

. tw ( rcap ul ll order, sort color(%30) ) ///
> (rcap ul ll order if ul <2, sort color(red) )  ///
> (rcap ul ll order if ll >2, sort color(blue))  ///
> (scatter mean order, sort msize(tiny) mcolor(gs12)), ///
> scheme(538) legend(off) yline(2.0, lcolor(black)) ///
> xtitle(trials) ytitle("confidence intervals") xla(, nogrid)  yla(, nogrid) 

그러면 아래 그림처럼 100개의 신뢰구간 중 5-6개의 신뢰구간은 모평균인 2.0을 덮지 못하고 있음을 확인할 수 있다.

link

'STATA' 카테고리의 다른 글

두 횡단면 자료 merge 하기  (0) 2019.04.08
회귀선과 잔차  (0) 2019.03.08
cross-validation in Stata  (0) 2018.10.22
명령어 자동화  (0) 2018.10.10
Cheat Sheet for Policy Evaluation  (1) 2018.01.29
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함