/*******************************************************************************************************************
-- Title : [Stats] 정규분포 및 분위수, 난수 생성
-- Reference : http://rfriend.tistory.com/102
-- Key word : 정규분포 균등분포 지수분포 t분포 F분포 카이제곱분포 plot norm unif exp t() f() chisq dnorm
pnorm lower.tail qnorm rnorm hist 누적 분포 함수 분위수 함수
*******************************************************************************************************************/
-- Chart
-- 연속형 확률 분포
* 정규 분포 (nomal distribution) : norm()
* 균등 분포 (uniform distribution) : unif()
* 지수 분포 (exponential distribution) : exp()
* t-분포 (t-distribution) : t()
* F-분포 (F-distribution) : F()
* 카이제곱 분포 (chisq-distribution) : chisq()
-- R Script
# ------------------------------
# -- 정규분포 그래프
# ------------------------------
par(mfrow=c(1,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, 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)")
# ------------------------------
# -- 정규분포의 누적분포함수 계산 : pnorm()
# ------------------------------
# lower.tail = TRUE 면 분위수 q를 기준으로 왼쪽 -inf부터 q까지 면적 합계 계산
# lower.tail = FALSE면 분위수 q를 기준으로 q부터 오른쪽 +inf까지 면적 합계 계산
# -- P(-1 <= X <= +1)
pnorm(q=c(1), mean=0, sd=1) # 0.8413447
pnorm(q=c(-1), mean=0, sd=1) # 0.1586553
pnorm(q=c(1), mean=0, sd=1) - pnorm(q=c(-1), mean=0, sd=1) # 0.6826895
pnorm(q=c(2), mean=0, sd=1) # 0.9772499
pnorm(q=c(-2), mean=0, sd=1) # 0.02275013
pnorm(q=c(2), mean=0, sd=1) - pnorm(q=c(-2), mean=0, sd=1) # 0.9544997
# -- P(-3 <= X <= +3)
pnorm(q=c(3), mean=0, sd=1) # 0.9986501
pnorm(q=c(-3), mean=0, sd=1) # 0.001349898
pnorm(q=c(3), mean=0, sd=1) - pnorm(q=c(-3), mean=0, sd=1) # 0.9973002
# -- lower.tail=FALSE
pnorm(q=c(1), mean=0, sd=1, lower.tail = TRUE) # 0.8413447
pnorm(q=c(1), mean=0, sd=1, lower.tail = FALSE) # 0.1586553
# ------------------------------
# -- 분위수 함수 : qnorm(p, mean=0, sd=1, lower.tail=TRUE/FALSE)
# ------------------------------
# 정규분포를 따르는 모집단에서 특정 누적분포함수 값 p에 해당하는 분위수 q 를 알고 싶을 때 사용
pnorm(q=c(1), mean=0, sd=1) # 누적분포함수
qnorm(p=0.8413447, mean=0, sd=1, lower.tail = TRUE) # 분위수함수
qnorm(pnorm(1))
# ------------------------------
# -- 정규분포 난수 발생 : rnorm()
# ------------------------------
random_norm_100 <- rnorm(100, mean=0, sd=1)
random_norm_100
hist(random_norm_100)