놀고 싶어요

[R Programming] R에서의 정규분포 / 중심극한정리 본문

R

[R Programming] R에서의 정규분포 / 중심극한정리

챌린지 2021. 5. 14. 15:34

 

정규분포 (normal distribution) : 종모양의 좌우대칭 분포

ex. 사람의 키 등 자연 발생적 현상

 

통계: 미지의 모집단을 소량의 표본 데이터를 통해 추론해 내는 것

정규분포도 통계 규칙 중 하나다.

1. 자연 발생적 데이터가 많다

2. 평균값을 중심으로 가장 많고, 평균에서 멀어질수록 적다.

3. 정규분포가 자연 발생적이지 않은 경우도 포함한다.

 

중심 극한 정리 (central limit theorem)

: 평균의 평균. 중심극한정리는 표본의 평균에 대한 정리로, 샘플의 수는 대수의 법칙과 관련이 있다. 원 데이터 자체가 정규분포가 아니어도 중심극한정리는 성립한다.

(대수의 법칙: 표본의 크기가 커질 수록 전체의 평균에 가까워진다. )

모집단 전체에 대한 정보가 없더라도 모집단에 대한 확률적 추론이 가능하다.

여러 번 표본을 구하고 각 표본의 평균을 산출하면 그 평균값들의 분포가 정규분포가 된다.

 

ex) 100개의 숫자 데이터 평균이 50일 때, 100개 숫자 중 일부표본 평균은 50과 일치할 수 있지만 대개 평균 50에서 벗어난 값이 나온다. 하지만 표본을 뽑아 평균추정하는 일을 반복해보면 표본의 평균값이 전체 데이터 평균값 50에 가까워진다. 그 값들이 정규분포 를 따른다.

 

 

R에서의 정규분포 확인

1. 히스토그램

x축은 해당 컬럼 값을 구간값으로 나누어 표시한다.

히스토그램의 y축은 나타나는 빈도 수이다. 막대 그래프는 x축이 범주형이고, 히스토그램은 연속형이다. 구간 값이 변하면 대체적인 모양은 비슷하더라도 모양도 변할 수 있다.

 

random_sample <- data.frame(Num = rnorm(1000, mean=10, sd=2))

랜덤으로 난수를 이용하여 데이터를 만들어냄

rnorm: 정규분포에 근사한 난수를 만들어주는 함수

난수 1000개를 평균 10, 표준편차 2가 되도록 샘플을 만들어준다.

mean: 평균 10

sd: 표준편차 2

 

ggplot(random_sample, aes(x=Num)) + geom_histogram(bins=100)

정규분포와 비슷하게 보이는 형태의 히스토그램

대략적인 분포 모양을 알 수 있음

 

 

 

세밀하게 정규분포를 보는 방법 Q-Q plot

2. Q-Q Plot

정규분포에 얼마나 잘 들어맞는 데이터인가를 알아낼 수 있다.

x축: 분포의 이론적인 값 표시

y축: 사용한 데이터 값 표시

산점도를 그리고 빨간색 선과 얼마나 유사한지 비교

이론적인 분포의 값이 크면 빨간색선 아래로 그래프가 그려진다.

 

rd_sample <- rnorm(1000, mean=10, sd=2)

rnorm: data.frame이 아닌 numeric 클래스가 유지되도록 함. 

 

qqnorm(rd_sample)

정규분포를 이론적 기준으로 하는 경우에 사용하는 그래프

다른 분포를 그릴 때 이름이 바뀜

 

qqline(rd_sample, col=2)

이론에 정확하게 일치하는 라인을 그려주는 함수

col 라인의 color 지정해주는 인자를 뜻한다. 

 

 

 

 

 

for(i in 1:10)

 

avg_value = c()
for(i in 1:10) {
  random_sample = sample(1:1000, 100)
  x = mean(random_sample)
  avg_value <- c(avg_value, x)
}
avg_value <- data.frame(Num = avg_value)
ggplot(avg_value, aes(x=Num)) + geom_histogram(bins = 100)

 

random함수인 sample() -> 무작위로 생성된 그래프이므로 그래프가 일치하지 않을 수 있다.

 

random_sample = sample(1:1000, 100): 1~1000 사이의 숫자 100개를 무작위로 뽑음

그 다음 뽑은 숫자들로 평균 계산

계산한 평균값을 avg_value 라는 벡터에 계속 추가해서 넣음

 

for루프를 이용하여 10번 반복한다.

 

 

히스토그램

Random sample 로부터 평균값을 구하는 횟수를 늘려가면 평균값이 정규분포에 훨씬 가까워지는 것을 그래프로 보여줌

 

for(i in 1:100) / for(i in 1:1000) / for(i in 1/10000)