'정규분포'에 해당되는 글 1건

  1. 2015.09.16 R 정규분포(Normal distribution) : norm()

연속형 확률분포 (Continuous probability distribution)에는

 

 - 정규분포 (normal distribution)

   : norm()

 

 - 균등분포 (uniform distribution)

   : unif()

 

  - 지수분포 (exponential distribution)

   : exp()

 

 - t-분포 (t-distribution)

   : t()

 

 - F-분포 (F-distribution)

   : f()

 

  - 카이제곱분포(chisq-distribution)

   : chisq()

 

등이 있습니다.  

 

 

정규분포(normal distribution)는 추정과 검정을 하는 추정통계학, 회귀분석과 같은 모형 적합 시 근간이 되는 확률 분포입니다.  우리의 일상 주변에서 흔히 접할 수 있는 확률분포이며, 중심 극한의 정리(Central Limit Theorem)에 따라 샘플의 갯수 n이 증가하면 이항분포, 초기하분포, 포아송분포 등의 이산형 확률분포와 t-분포, F-분포 등의 연속형 확률분포가 정규분포로 근사하게 됩니다.  따라서 정규분포는 통계에 있어서 정말 중요하고 많이 사용되는 확률분포라고 할 수 있겠습니다.

 

R을 가지고 정규분포 그래프 그리기, 확률밀도함수, 누적분포함수, 분위수함수, 난수 발생 등을 예제를 들어 해보겠습니다.

 

 

함수 구분 

R 함수/ 파라미더 

 norm()

  밀도 함수

  (Density function)

 d

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

  누적 분포 함수

 (Cumulative distribution function)

 p

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

  분위수 함수

 (Quantile function)

 q

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

  난수 발생

 (Random number generation)

 r

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

 

 

 

(1) 정규분포 그래프 (normal distribution plot) : plot(x, dnorm(x))

 

 

> # (1) 정규분포 그래프 (Normal distribution plot, X~N(0,1)) > > x <- seq(-3, 3, length=200) > plot(x, dnorm(x, mean=0, sd=1), type='l', main="Normal distribution, X~N(0,1)")

 

 

 

 

 

위의 그래프가 (표준)정규분포 곡선이라면, 아래는 누적 정규분포 곡선(cumulative normal distribution plot)이 되겠습니다.  

 

 

> # Cumulative normal distribution plot, X~N(0,1) > x <- seq(-3, 3, length=200) > plot(x, pnorm(x, mean=0, sd=1), type='l', main="Cumulative normal distribution, X~N(0,1)")

 

 

 

 

 

 

 

(2) 정규분포의 누적분포함수(cumulative function of normal distribution) 값 계산 : pnorm()

 

 

> # (2) 정규분포의 누적분포함수(cumulative function of normal distribution) 값 계산 : pnorm()

> # P(-1 <= X <= +1)
> pnorm(q=c(1), mean=0, sd=1) # 0.8413447
[1] 0.8413447
> pnorm(q=c(-1), mean=0, sd=1) # 0.1586553
[1] 0.1586553
> 
> pnorm(q=c(1), mean=0, sd=1) - pnorm(q=c(-1), mean=0, sd=1) # 0.6826895
[1] 0.6826895
> 
> # P(-2 <= X <= +2)
> pnorm(q=c(2), mean=0, sd=1) # 0.9772499
[1] 0.9772499
> pnorm(q=c(-2), mean=0, sd=1) # 0.02275013
[1] 0.02275013
> 
> pnorm(q=c(2), mean=0, sd=1) - pnorm(q=c(-2), mean=0, sd=1) # 0.9544997
[1] 0.9544997
> 
> # P(-3 <= X <= +3)
> pnorm(q=c(3), mean=0, sd=1) # 0.9986501
[1] 0.9986501
> pnorm(q=c(-3), mean=0, sd=1) # 0.001349898
[1] 0.001349898
> 
> pnorm(q=c(3), mean=0, sd=1) - pnorm(q=c(-3), mean=0, sd=1) # 0.9973002
[1] 0.9973002
 
 
> # lower.tail=FALSE

> pnorm(q=c(1), mean=0, sd=1, lower.tail = TRUE)
[1] 0.8413447
> pnorm(q=c(1), mean=0, sd=1, lower.tail = FALSE)
[1] 0.1586553

 

 

pnorm(q, mean, sd, lower.tail = TRUE) 이면 분위수 q를 기준으로 왼쪽의 -inf 부터 q까지의 면적에 대한 합계 값을 보여주며, pnorm(q, mean, sd, lower.tail = FALSE) 이면 분위수 q를 기준으로 q부터 +inf 까지의 오른쪽으로의 면적 합계 값을 보여주게 됩니다.

 

 

 

(3) 분위수 함수 : qnorm(p, mean=0, sd=1, lower.tail=TRUE/FALSE)

 

정규분포를 따르는 모집단에서 특정 누적분포함수 값 p에 해당하는 분위수 q 를 알고 싶을 때 사용하는 R 함수가 분위수 함수 qnorm()이 되겠습니다.  분위수 함수는 누적분포함수의 역함수이고, 반대로 누적분포함수는 분위수 함수의 역함수라고 말할 수 있습니다.  아래에 누적분포함수와 분위수 함수가 서로 왜 역함수 관계인지 예를 들어보았습니다.

 

 

> # (3) 분위수 함수 : qnorm(p, mean=0, sd=1, lower.tail=TRUE/FALSE) > pnorm(q=c(1), mean=0, sd=1) # 누적분포함수 [1] 0.8413447 > > qnorm(p=0.8413447, mean=0, sd=1, lower.tail = TRUE) # 분위수함수 [1] 0.9999998

> 
> qnorm(pnorm(1))
[1] 1
 

 

 

 

(4) 정규분포 난수 발생 : rnorm()

 

> # 100s random sampling from normal distribution X~N(0,1)

> random_norm_100 <- rnorm(100, mean=0, sd=1)
> random_norm_100
  [1] -0.49990947  1.30162824 -0.55303626 -0.67823807  1.09867201  0.10112825  1.60729584
  [8] -0.49131533 -0.23875557 -0.10318560  0.37495367  2.37449966  0.17832867 -1.13884498
 [15] -0.04055883 -0.64884566 -0.77738880 -1.07587347 -0.64434199 -1.38282292  0.16584547
 [22]  0.44776193 -0.78980486  1.73319388 -0.57968848  1.25727796 -0.05320889  2.61784767
 [29]  0.78992548  0.42473023 -1.45674849  1.45782133  2.58232132 -1.85544752 -0.46611618
 [36]  0.54686807 -0.72847864  0.12996224  0.19426881  0.01652534 -0.03819245 -0.60196303
 [43] -1.33088212  0.33449997  0.08826498 -0.12122490  0.45268734 -0.27621040  0.65957252
 [50]  0.73278278  1.23812581  0.09450144  1.44667268 -0.71373007 -0.04135331  1.07079267
 [57]  0.85465336  0.10066264  0.07047791 -0.19465235  1.83187324 -0.06047522 -0.89295237
 [64] -1.35422679 -0.26235751  1.06455750  0.83675769 -0.16588313 -0.77936548  0.16614752
 [71]  0.18333754  0.25274271  1.24194101 -0.36543022 -1.25669837  0.16981720 -0.83342688
 [78]  2.58352657 -2.00730559  0.03383145  0.44008506  0.60350848  1.12223002  0.38470856
 [85] -1.06631289 -0.08023159  0.28374720  1.68415043 -0.06373142  0.25866477  0.04997717
 [92]  0.47737531 -1.07703969  0.25487228 -1.00018975 -0.81282824 -0.77747525 -0.44254534
 [99] -0.56190014  0.67733634
> hist(random_norm_100)

 

 

 

 

난수 발생은 매번 할 때마다 바뀌게 되므로 위의 예제를 따라한다면 아마 위에 나열된 숫자, 위에 제시된 히스토그램과는 다른 숫자, 그래프가 나타날 것입니다만, 평균 0을 중심으로 좌우 대칭형태의 정규분포를 띠는 것은 유사할 것입니다.

 

많은 도움 되었기를 바랍니다.

 

이번 포스팅이 도움이 되었다면 아래의 '공감 ~♡'를 꾸욱 눌러주세요. ^^

 

Posted by R Friend R_Friend