Summary

본 내용은 STAT-110 강의 30번의 일부 내용 정리입니다. 자세한 내용은 해당 강의를 참고하세요.

카이제곱분포는 평균이 0, 분산이 1(즉 표준편차도 1)의 정규 분포를 따르는 x라는 변수를 생각했을 때 이 변수의 제곱을 전부 더한 것의 분포다.

\(\chi^2(1), \chi^2(3)\) 그림을 그려서 확인해보자.

먼저, 자유도 1일 카이제곱분포를 그려보자.

set.seed(2021)
z <- rnorm(1000, mean = 0, sd = 1)
zz <- z^2
hist(zz, breaks=100)

자유도 3인 카이제곱분포를 그려보자.

z1 <- rnorm(1000, mean = 0, sd = 1)
z2 <- rnorm(1000, mean = 0, sd = 1)
z3 <- rnorm(1000, mean = 0, sd = 1)
zz <- z1^2 + z2^2 + z3^2
hist(zz, breaks=100)

카이제곱분포에서 Z의 개수를 자유도라고 부르는데, n이 무한대로 갈수록 정규분포에 가깝게 된다.

qchisq(p=0.5, df=3) 의 값과 quantile(x = zz, probs = 0.5)를 비교해보자.

qchisq(p = 0.5, df = 3)
## [1] 2.365974
quantile(x = zz, probs = 0.5)
##     50% 
## 2.39666

2개의 값이 거의 비슷하다. 즉, 카이제곱분포를 임의로 구해서 50% 확률의 위치값을 구하는 것이나 qchisq()를 이용해서 구하는 것이나 비슷하다.

# 정규분포를 따르는 변수를 1000개 생성한다.
z <- rnorm(1000, mean = 0, sd = 1)

s_data <- c() # 제곱합이 담길 변수
  
for (i in 1:1000)
{
  z1 <- sample(z, 3) # 비복원 추출로 1, 2, 3개를 뽑는다.
  z1 <- z1^2 # 각각 제곱을 하고
  z1_sum <- sum(z1) # 합을 구한다.
  s_data <- c(s_data, z1_sum)
}

hist(s_data, breaks = 100) # 분포를 그린다.

다른 분포와의 관계

카이제곱분포는…

\(V = Z_1^2 + Z_2^2 + ... + Z_n^2 = \sum_{j=1}^n Z_j^2\) 라고 할때, \(V \sim \chi^2(n)\) 이 된다.

breaks_n <- 100
n <- 1000

x <- seq(0.01, 10, by=0.01)

# 표준 정규 확률변수의 제곱의 분포: Z^2 의 분포
# 𝛸^2(1) = Z^1
z <- rnorm(n, mean = 0, sd = 1)
zz <- z^2
hist(zz, breaks=breaks_n, main = 'z^2 dist.', plot = T)

\(\chi^2(1)\)\(Gamma(1/2, 1/2)\) 의 분포는 동일하다. 즉, \(\chi^2(1)\)\(Gamma(1/2, 1/2)\) 의 특별한 한 형태가 된다.

각각의 히스토그램과 밀도함수를 그려서 비교한다.

# 또한 카이제곱(1) 에 대한 그래프는...
# Gamma(1/2, 1/2) 의 특별한 형태가 된다.
# 𝛸^2(1) = Gamma(1/2, 1/2)
hist(rchisq(n, df=1), breaks = breaks_n, main = 'chi-sqaure(1) dist.')

plot(x, dchisq(x, df = 1), type='l')

# Gamma(1/2, 1/2)를 그려보면...
# 카이제곱(n) 은 Gamma(n/2, 1/2) 와 같은 분포가 된다.
# 𝛸^2(n) = Gamma(n/2, 1/2)
hist(rgamma(n, shape=1/2, rate = 1/2), breaks = breaks_n, main = 'gamma(1/2, 1/2) dist.')

plot(x, dgamma(x, shape=1/2, rate=1/2), type='l')

# 지수분포 
# 지수분포는 Gamma(a, λ) 에서 a = 1 인 특별한 형태와 같다.
# Gamma(1, λ) = Expo(λ)
#hist(rexp(n, rate=1), breaks = breaks_n, main = 'expo(1) dist.')
#plot(x, dexp(x, rate=1), type='l')