본문 바로가기
Data Science/통계이론

정규분포(Nomal distribution) 이해하기 :: Data 쿡북

by 쿡북 2017. 9. 5.

| 들어가며 

통계를 처음 공부하다보면 분포가 어김없이 나온다.

분포... 말은 좋은데 그래서 어디 써야할지 왜 배워야 하는지는 배워도 쉽게 설명하기 어렵다.

특히 당장 분석하고 싶은 통계 입문자들에게는 요상한 분포 얘기부터 나오니 재미도 없고 미칠 지경이다.

따라서 여러가지 분포에 대해서 비 통계학과 출신들을 위해 분포란 무엇이며 어디에 어떻게 쓸지 왜 배워야 하는지 얘기할까 한다.

(잘못된 설명이나 부가 설명에 대해서는 언급해 주시면 감사드립니다.)


첫번째로 그 유명한 정규분포에 대한 이야기다 


| 분포란 무엇인가? 

좀 길지만 잠시 세상 이치에 대해 얘기 해보자.

이 세상은 불확실하다. 때문에 생겨나는 데이터들을 찍어내듯이 똑같은 경우가 없고 제각각이 된다.

이렇게 데이터가 제각각인 수치로 나타나는 것을 '데이터 분포' 라고 한다.

그리고 데이터 분포의 특징이나 반복되는 것을 설명하기 위해 평균값, 표준편차 등이 활용된다.


그런데 이런 제각각인 데이터들도 가만 따지고 보면 어떤 패턴(분포)을 보이는 경우가 있다.

그중 대표적인 분포인 정규분포는 자연연상에서 관측되는 데이터들 속에 자주 나온다.

즉, 어떤 자연현상의 데이터들을 쭉 풀어놓고 한 걸음 물러서 바라보니 '정규분포'의 형태가 많이 보이더라~  라는 것이다.

때문에 보통 데이터를 말할때 '무엇 무엇은 어떠한 분포를 따른다.' 라고 표현하기도 한다.


예를 들어보자.

사람의 키나 생물의 키데이터 동전던지기 경우의 수 등은 보통 정규분포를 따른다고 한다. 

그냥 그렇다고 한다. 관련된 내용들은 과거 수학자들이 관착이나 수식등을 통해 밝혀낸 것이고 여러 현상들도 정규분포로 많이 설명되어 있다.


여기서 분포를 배워야 하는 이유가 나온다.

즉 데이터는 언뜻 보면 아무 의미 없는것 같지만, 만약 어떤 분포를 따르는 잘 알려진 현상(상황)이라면 이는 분포를 통해 다른 현상들을 해석하거나 예측할 수 있게 되는 것이다.

(필자는 이 부분이 상당히 신앙심을 갖고 접근해야 하는 부분이라 본다.) 


대표적인 분포의 종류는 다음으며 크게 이산확률분포와 연속확룰분포로 나눠져 있다.





| 표준정규분포란?

정규분포중 제일 기초가 되는 표준 정규분포를 알아보자. 

표준 정규분포의 모습은 다음과 같다.


> x <- seq(-4, 4, length=100)

> plot(x, dnorm(x, mean=0, sd=1), type='l', main="표준 정규분포, X~N(0,1)")


표준 정규분포의 성질은 다음과 같다.

1) 평균이 0, 표준편차가 1이다.

2) (-1)~(+1) 번위의 데이터(평균에서 표준편차 1배 이내)의 상대도수(전체에서 차지하는 비중)이 0.6826(약 70%)

   (-2)~(+2) 번위의 데이터(평균에서 표준편차 2배 이내)의 상대도수(전체에서 차지하는 비중)이 0.9544(약 95%)


| 일반정규분포란? 

일반 정규분포는 표준 정규분포 형태에 평균값(, 뮤 라고 읽는다)과 표준편차(, 시그마 라고 읽는다) 가 달라지는 것이다.

정확하게는 표준편차()X(표준정규분포) + 평균값()  로 표현된다.


그러면 일반 정규분포를 표준 정규 분포로 변경할 수 있지 않을까?  

맞다. 

여기서 데이터의 표준화가 나온다. 

만약 데이터 x가 평균값이 , 표준편차가 인 일반 정규분포를 따르는 데이터라면, 

그리고 그 평균값과 표준편차를 알 수 있다면 다음 공식에 대입해 표준화 할 수 있다.


   이다.


Z는 표준정규분포를 따르는 데이터가 된다.

이것을 유식하게 표현해서 표준점수(Z score) 라고 한다.


표준화를 하는 이유는 데이터의 scale이 다른 경우 직접적으로 상호 비교를 할 수가 없는데 그때 표준화가 활용된다.

통계분석에 많이 나오는 내용이기 때문에 위 공식은 암기하자


정규분포는 중심극한 정리에 따라서 샘플의 개수 n이 증가하면 (기본 30개)  이산형 확률분포(이항분포, 초기하분포, 포아송 분포)와 연속형 확률분포(t-분포, F-분포)가 정규분포로 근사하게 된다. 따라서 아주 중요한 분포라 할 수 있다.



| R에서의 정규분포관련 함수 

R에서 활용되는 정규분포 함수는 다음과 같다.


구분

R 함수

 확률 밀도 함수 (Density function)

  dnorm(x, mean=0, sd=1, log=FALSE)

 누적 분포 함수 

 (Cumulative distribution function)

  pnorm(q, mean=0, sd =1, lower.tail =TRUE, log.p=FALSE)

 분위수 (Quantile)

  qnorm(p, mean=0, sd=1, lower.tail=TRUE, log.p=FALSE)

 난수 (random)

  rnorm(n, mean=0, sd=1)

* x 또는 q : 확률밀도함수와 누적분포함수의 값을 얻고자 하는 분위수 벡터

* p : 분위수를 얻고자 하는 확률값의 벡터

* n : 생성할 난수의 개수

* log 및 log.p : TRUE 또는 FALSE 논리값을 주며 이 값이 참이면 x 또는 확률이 log(x), 또는 log(p)로 출력

* lower.tail : 논리값을 가지며 TRUE이면(기본값), 분위수 q를 기준으로 왼쪽의 -inf부터 q 까지 면적에 대한 합계, FALSE이면 q를 기준으로 +inf 까지의 오른쪽 면적 합계 출력

[출처 : 고급R활용, 방송통신대교재


그려보자 

# 표준 정규분포

> x <- seq(-3, 3, length=100)

> plot(x, dnorm(x, mean=0, sd=1), type='l', main="표준 정규분포, X~N(0,1)")




# 누적 정규분포

> x <- seq(-3, 3, length=100)

> plot(x, pnorm(x, mean=0, sd=1), type='l', main="누적 정규분포, x~N(0,1)")



# 분위수

분위수는 100(1-a)% 로 표현한다.

> qnorm(p=0.025, mean=0, sd=1, lower.tail = TRUE) #-0.25%

[1] -1.959964

> qnorm(p=0.975, mean=0, sd=1, lower.tail = TRUE) #+0.25%

[1] 1.959964


따라서 95% 적중구간에 대한 값은 많이 나오는 -1.96 이상  +1.96 이하의 범위로 설명된다.


95% 예언적중구간은 다음의 사이에 들어야 한다.


즉, 

만약 뮤가 50, 시그마가 5이면

(50-1.96*5) 이상 (50+1.96*5) 이하라서  40.2 이상 59.8이하가 95% 예언 적중 범위가 된다 라고 표현한다.

좀 어려운데 이 부분은 기회되면 다시 정리하기로 한다.


# 난수

> rnorm(100, mean=0, sd=1)

  [1]  0.493666926  1.146710266  0.592917524  0.442261081 -0.280502769  2.547463898

  [7]  0.340765823 -0.593958393 -2.051004811  0.889489493  0.155829207  0.783846384

 [13]  0.488081573  1.123582924  0.682120526 -0.469116637  0.816543544  0.398077705

 [19]  1.577459338 -0.404414544 -0.641896789 -0.647490428 -0.597140696  0.888572992

 [25] -0.447735047 -0.302541681  2.734287107 -0.598251339  0.711256847 -0.001605372

 [31] -0.083009137  0.064960595 -0.328866239  1.094417963 -0.386985862  0.901959648

 [37] -1.807811159 -0.349162363  0.407188893 -1.529212308  0.964879137 -1.763862392

 [43] -0.662715154  0.144735685  0.406271764 -1.744139632 -0.356535827 -0.052059928

 [49] -0.062973442  0.106631478  0.934310176 -0.004073617 -0.813347267 -0.121520074

 [55] -1.085607251  2.251408141 -2.242005741 -0.694137846  0.710556376  0.877754200

 [61]  0.641654301 -0.336562102  0.438084375  0.113376738 -0.540948999 -1.091557618

 [67]  0.520522879  0.996397358 -0.409991971 -0.816934115  1.946749322  1.513113895

 [73]  0.516062388 -2.428567795  0.891295286  0.742805244  0.359804106 -1.127043794

 [79]  0.151560011  0.230669153  1.685597508 -1.812675816  0.746907652 -0.218676654

 [85] -1.300714817 -0.177111016 -0.572203036  0.235435977  0.953199203  0.963019815

 [91] -1.206966114 -1.188635233 -0.209848156 -1.956361939  0.995726184 -1.239096396

 [97] -1.900271619 -0.859228481 -1.433591056 -1.832317404


> hist(rnorm(100, mean=0, sd=1))  #100개의 랜던 값으로 히스토그램 출력

> hist(rnorm(100000, mean=0, sd=1))  #100000개의 랜던 값으로 



중심극한 정리에 의해 랜덤 개수 n이 증가할 수록 점차 표준 정규분포에 가까운 hist가 그려지는것을 확인할 수 있다.


| 결론

지금까지 분포의 가장 기초가 되는 정규분포에 대해 알아보았다.

다음 시간에는 카이제곱 분포에 대해 얘기한다.



| 참고자료

저서 : 세상에서 가장 쉬운 통계학 입문

저서 : 고급R 활용 (방송통신대교재)

블로그 : http://rfriend.tistory.com/102, http://rfriend.tistory.com/268



도움 되셨다면 아래 버튼을 눌러주세요

댓글