Programing/R- programming

R을 이용한 정규분포와 확률밀도함수

sosal 2014. 10. 29. 19:32
반응형

 

/*

 http://sosal.kr/
 * made by so_Sal
 */

 

 

 

* 확률 밀도함수 (probability density function)

 

통계를 내고자 하는 실험의 데이터가 측정할 수 있는 값인 경우, 우리는 이를 연속적으로 변화할 수 있는 값이라고 생각한다.

예를 들면 몸무게나 키, 수면시간 등, 이들이 데이터가 무한할 경우 모두 연속적인 값들이라고 생각할 수 있다.

이러한 연속적인 확률변수의 분포를 연결된 선으로 연결하여 나타내며,

어느 한 값(점) 에서의 높이는 그 값이 나올 확률이 어느정도 되는지, 데이터에서 얼마나 밀집하는지 나타낸다.

 

 

한 회사의 남성들의 키를 데이터로 생각해보자.

이들의 평균 키는 약 173cm정도가 될 것이며, 크게는 190cm, 작게는 150cm 키를 가진 사람들도 있을것이다.

하지만 평균 키가 173인 만큼, 165~180 사이의 남성의 숫자가 많을 것이며, 173에 가까운 사람들이 가장 많을것이다.

 

데이터를 히스토그램과 나타내면 다음과 같이 그려질 것이다.'

 

 

 

 

히스토그램의 계급을 더 세분화 해보자.

 

 

 

 

 

 

아래 그림은 위 그림보다 히스토그램의 계급을 세분화 하여 히스토그램을 그린것이다.

계급을 세분화 할 수록, 계급의 크기가 작아지므로 점점 더 연속적인 분포를 그리게 된다.

 

 

이것을 연속적인 선으로 연결한 것이 바로 확률 밀도함수의 그래프가 된다.

위 그래프의 x축의 범위를 결정하여, 해당되는 범위의 x-y 축의 넓이는 곧 전체넓이에 대한 확률이 된다.

 

 

위에 대한 예제는 사실 정규분포를 그리는 함수를 사용하여 데이터를 뽑았다.

위 사진 1,2 에 대한 예제 코드는 다음과 같다.


> height=rnorm(n=1000000,mean = 175, sd=5)   # 데이터 생성
> hist(height, breaks=20, probability=TRUE)    # 사진1
> hist(height, breaks=100, probability=TRUE)   # 사진2
> hist(height, breaks=300, probability=TRUE)   # 더욱 더 확률밀도 함수에 가까운 히스토그램

 

 

* 정규분포

정규분포는 연속확률분포의 일종으로, 위 확률밀도함수의 예제로 들었던 사진 3 처럼 평균에 대하여 대칭인 그래프를 가진다.

 - 정규분포는 중심이 솟은 확률밀도함수의 그래프를 가지며, 평균에 대해 좌우 대칭이다.

 - 정규분포를 가지는 확률변수는 평균 주위의 값을 가장 많이 취하고, 평균으로부터 좌우 표준편차의 3배 이상 떨어진 값은 거의 취하지 않는다.

 이상치를 찾는 방법은 여러가지가 있지만, 표준편차의 3배 이상의 값을 이상치로 치는 경우도 하나의 방법이다.

 - 정규분포는 데이터의 평균과 표준편차에 의해 결정된다. 평균과 표준편차가 같지만, 다른 정규분포는 존재하지 않는다.

 

 

* Histogram에 확률밀도함수 그리기 (Density curve)


> height=rnorm(n=1000000,mean = 175, sd=5)

> hist(height, breaks=20, probability=TRUE)

> lines(density(height)) 

 


 

 

- 정규분포를 따르는 데이터 추출

> x <- rnorm(n=10000, mean=0, sd=1) # 정규분포를 따르는 데이터 추출. 평균은 0, 표준편차는 1, 샘플은 1만개

 

- 데이터가 정규분포에 얼마나 근접하는지 확인하는 함수 (Quantile-Quantile plot)
> qqnorm(x)
> qqline(x, col="red") # 이 짓건에 크게 벗어나지 않으면 정규분포를 따른다고 할 수 있다. 이것은 주관적이다.