Must Learning With Statistics

정규분포(Normal Distribution) 본문

통계 이론

정규분포(Normal Distribution)

Doublek Park 2020. 3. 22. 13:10
7. 정규분포(Normal Distribution)

정규분포는 주어진 데이터의 형태가 산봉우리일 때 가정되는 분포입니다. 흔히 '종모양'에 비유하기도 합니다. 종모양이라함은 중심에 많은 데이터들이 모여있고 중심에서 멀어질수록 적은 데이터를 포함합니다. 또한 중심을 기준으로 좌우가 대칭적인 형태를 가지고 있습니다. 이는 곧 데이터의 중심과 산술적인 평균이 동일함을 의미합니다. 과거의 학자들은 많은 분야의 연속형 데이터들이 이런 형태를 띈다는 것을 발견하였고 그에 착안하여 정규분포를 고안하였습니다. 위에서 언급했던 것처럼 연속형 자료는 수집 상황이 분포를 결정하는 것이 아니고 데이터의 형태를 보고 그에 알맞는 분포를 선택한다는 것을 생각하면 지극히 상식적인 관점에서 만들어진 분포라고 생각할 수 있습니다.

그렇다면 이 산봉우리 분포는 어떤 식으로 표현될 수 있을까요?

두 가지를 이용합니다.

  • 산봉우리 정상을 나타내는 '데이터의 중심' : 평균
  • 산의 경사를 나타내는 '데이터의 퍼짐 정도' : 분산

평균에 따라 산은 좌우로 이동이 가능하며 분산에 따라 산의 경사가 완만한지 가파른지를 가늠할 수 있습니다. 만약 완만하다고 하면 데이터는 비교적 중심에 덜 모여 있을 것입니다. 이 경우 분산은 높다고 할 수 있습니다. 반대로 경사가 가파르다면 데이터들은 중심에서 밀도가 높고 이 경우 분산은 낮습니다.

이해를 돕기 위해 간단한 그림 하나를 보겠습니다.

library(reshape)
library(dplyr)

k1 = c()
p1 = c()

for(k in seq(-15,15,by = 0.01)){

  p = dnorm(x = k,mean = 0,sd = 3)
  k1 = c(k1,k)
  p1 = c(p1,p)

}

k2 = c()
p2 = c()

for(k in seq(-15,15,by = 0.01)){

  p = dnorm(x = k,mean = 0,sd = 5)
  k2 = c(k2,k)
  p2 = c(p2,p)

}


DF = data.frame(
  k = k1,
  p1 = p1,
  p2 = p2
)


DF %>%
  melt(id.vars = c("k")) %>%
  ggplot() +
  geom_line(aes(x = k, y = value, col = as.factor(variable))) +
  geom_vline(xintercept = 0,linetype = 'dashed') +
  theme_bw() +
  theme(legend.position = 'none') +
  xlab("") + ylab("") +
  scale_y_continuous(expand = c(0,0))

위 그림을 보면 두 가지의 정규분포가 있습니다. 데이터의 중심이자 평균은 동일하고 분산은 파란색이 붉은색보다 높습니다. 그래서 산봉우리 형태의 경사가 파란색이 더 완만한 것을 볼 수 있습니다. 정규분포의 형태를 결정해주는 평균과 분산은 각각 $\mu$ 와 $\sigma^2$로 표현합니다.

$$
Y \sim N(\mu , \ \sigma^2) \ 이면,
$$

$$
f(y) = \frac {1 }{ \sqrt{2\pi}\cdot \sigma} \ e^{-\frac12 (\frac {y-\mu} {\sigma})^2}\ , \quad -\infty < y<\infty
$$

$$
E[Y]=\mu \qquad V[Y]=\sigma^2
$$

정규분포에서는 분산 $\sigma^2$ 의 양의 제곱근인 $\sigma$를 표준편차라고 부릅니다. 이 역시 데이터가 얼마나 퍼져있는지에 대한 척도로 볼 수 있습니다. 분산이 있는데도 불구하고 굳이 표준편차가 쓰이는 이유는 단위(스케일)의 문제입니다. 분산이라는 것은 실제 자료의 제곱을 이용해서 만들어집니다. 그렇기에 분산은 실제 자료에서 제곱된 단위(스케일)을 가지고 있고 양의 제곱근을 통해 구해진 $\sigma$는 실제 데이터들과 같은 단위를 가지고 있습니다.

정규분포의 중요한 특징 중 하나는 정규분포를 따라는 확률변수의 선형조합 역시 정규분포를 따른다는 사실입니다. 예를 들어 평균이 10인 정규확률변수가 가정된 데이터에 모두 -10씩 해주면 그들 역시 정규분포를 따르고 평균은 0이 될 것 입니다. 같은 식으로 분산이 100인 정규확률변수가 가정된 데이터에 모두 10씩 나누어 주면 그들 역시 정규분포를 따르고 분산은 1이 됩니다. 이는 곧 중심과 단위(scale)를 자유자재로 바꾸어 줄 수 있는 유연성을 가졌다는 의미입니다.

이 성질을 이용해 정규분포 데이터의 단위를 맞추어 줄 수 있습니다. 각 데이터에서 평균을 빼고 표준편차를 나누어 주면 어떤 정규확률 변수든 평균이 0, 분산이 1인 동일한 단위를 갖게 됩니다. 이를 정규화한다고 표현하며 정규화된 분포를 표준정규분포(standard normal distribution)라고 합니다.

$$
Y \sim N(\mu, \ \sigma^2 ) 일 \ 때, \quad
(\frac { Y-\mu } {\sigma}) \ \sim N(0,1)
$$

정규화의 실질적 의미는 각 데이터들의 단위를 제거하여 서로 다른 집단끼리도 비교할 수 있는 것입니다. 대부분의 비교 검정은 다 이런 컨셉을 근간에 두고 진행됩니다.

정규분포가 중요한 이유는 비단 많은 연속형 데이터가 정규분포를 따르기 때문만은 아닙니다. 표본들을 뽑아서 표본들의 평균을 구해보면 그것들이 따르는 분포가 정규분포이기 때문에 더욱 중요합니다. 이를 표본분포(통계량의 확률분포)라고 합니다.

예시

$Y\sim N(20,5)$인 확률변수에 대해 표준화를 진행해보도록 하겠습니다.

x1 = rnorm(n = 1000, mean = 20, sd = 5)
x2 = scale(x1)

DF = data.frame(
  x1 = x1,
  x2 = x2
)

DF %>%
  melt() %>%
  mutate(variable = ifelse(variable == "x1", "비표준화","표준화")) %>%
  ggplot() +
  geom_density(aes(x = value, fill = variable), alpha = 0.4) +
  theme_bw() +
  theme(legend.position = c(0.8,0.6)) +
  xlab("") + ylab("") + labs(fill = "")

다음으로는 수리영역 모의고사 문제를 R로 한번 풀어보도록 하겠습니다.

문제) 어느 실험실의 연구원이 어떤 식물로부터 하루 동안 추출하는 호르몬의 양은 평균이 $30.2mg$, 표준편차가 $0.6mg$인 정규분포를 따른다고 한다. 어느 날 이 연구원이 하루 동안 추출한 호르몬의 양이 $29.6mg$ 이상이고 $31.4mg$ 이하일 확률을 오른쪽 표준정규분포표를 이용하여 구한 것은?(2016년 9월 모의고사 가형 10번)

$$
Y\sim N(30.2,0.6)\ 일때, \
P[29.6 \leq Y \leq 31.4] =\ ?
$$

$$
Z_1= \frac{29.6-30.2}{0.6}\
Z_2= \frac{31.4-30.2}{0.6}
$$

Z1 = (29.6-30.2) / 0.6
Z2 = (31.4-30.2) / 0.6

print(paste("Z1 :",round(Z1),",","Z2 :",Z2))

$$
P[-1 \leq Z \leq 2] = P[Z \leq 2]-P[Z \leq -1]
$$

k1 = c()
p1 = c()

for(k in seq(-5,5,by = 0.01)){

  p = dnorm(x = k,mean = 0,sd = 1)
  k1 = c(k1,k)
  p1 = c(p1,p)

}


ggplot(NULL) +
  geom_line(aes(x = k1, y = p1)) +
  geom_area(aes(x = ifelse(k1 > -1 & k1 <  2, k1, 0), y = p1),fill = 'royalblue',
            alpha = 0.4) +
  theme_bw() +
  scale_x_continuous(breaks = seq(-5,5, by = 1)) +
  scale_y_continuous(expand = c(0,0),limits = c(0,0.45)) +
  xlab("") + ylab("")

# pnorm => 누적확률 구하기
Answer = pnorm(q = 2, mean = 0,sd = 1, lower.tail = TRUE) - 
  pnorm(q = -1, mean = 0,sd = 1, lower.tail = TRUE) 

print(paste("Answer : ", round(Answer,5)))
[1] "Answer :  0.81859"

다음 분포를 배우기 전에 이 모수와 통계량, 그리고 평균의 표본분포에 대해 다루도록 하겠습니다.

'통계 이론' 카테고리의 다른 글

t분포(student's t-distribution)  (0) 2020.03.22
모수(parameter)와 통계량(statistic)  (0) 2020.03.22
연속형 확률분포  (0) 2020.03.22
포아송분포 (Poisson Distribution)  (0) 2020.03.22
다항분포(Multinomial Distribution)  (0) 2020.03.22
Comments