생각 작업실 The atelier of thinking

69. R을 이용한 카이제곱분포 및 모분산 추정 본문

통계학 이야기

69. R을 이용한 카이제곱분포 및 모분산 추정

knowledge-seeker 2024. 6. 10. 11:57

Chapter 69. R을 이용한 카이제곱분포 및 모분산 추정

 

1. R 에서의 확률분포

 

R에서는 이산확률분포와 연속확률분포 모두 다 제공합니다. 분포별 확률질량(밀도)함수와 누적함수, 분위수  및 랜덤 작업 등을 실행할 수 있습니다.

 

각 분포의 코드는 아래와 같습니다.

 

이산확률분포 연속확률분포
이항분포 binom 정규분포 norm
초기하분포 hyper T분포 t
포아송분포 pois F분포 f
기하분포 geom 카이제곱분포 chisq
음이항분포 nbionom 균등분포 unif
다항분포 multinom 지수분포 exp

 

구하고자 하는 함수에 따라 아래의 접두사를 붙여 사용하면 됩니다.

  • d : probability mass/density function - 확률 질량/밀도 함수
  • p : cumulative distribution function - 누적함수
  • q : quantile function - 분위수
  • r : random number generator - 램덤 생성 작업

2. 카이제곱분포 (Chi-squared distribution)

 

카이제곱분포(Chi-squared distribution)는 표준정규분포(Standard normal distribution)의 제곱합(sum of squares)으로 구성되는 확률분포입니다.
자유도(degree of freedom)가 k인 카이제곱분포는 k개의 독립적인 표준정규분포를 제곱하여 합한 것이며, 분포의 형태는 자유도에 따라 달라집니다.

카이제곱분포는 보통 분산분석(ANOVA), 카이제곱검정, 회귀분석 등의 통계적 추정 및 가설 검정에서 사용됩니다.

 

(1) 확률밀도함수

 

카이제곱분포의 확률밀도함 수는 아래와 같습니다.

 

$$f(x;k)=\frac{1}{2^{k/2}\varGamma(k/2)}x^{k/2 - 1}e^{-x/2}$$

 

2023.12.20 - [통계학 이야기] - 59. 카이제곱분포(Chi-square Distribution) - 연속확률분포

 

59. 카이제곱분포(Chi-square Distribution) - 연속확률분포

Chapter 59. 카이제곱분포(Chi-square Distribution) - 연속확률분포 1. 카이제곱분포란? k개의 서로 독립적인 표준정규확률변수를 각각 제곱한 다음 합해서 얻어지는 분포입니다. k를 자유도라고 하며

thinking-atelier.tistory.com

 

R에서의 코드는 dchisq( ) 입니다.

 

dchisq(x, df)

x: 확률밀도함수 값을 구할 구간 벡터
df: 자유도 값

 

확률밀도함수 그래프를 그리는 R 코드는 아래와 같습니다.

 

x <- seq(0, 20, by = 0.1)  # x축 범위 설정
y1 <- dchisq(x, df = 5)   # 자유도가 5인 카이제곱분포의 확률밀도함수 계산
y2 <- dchisq(x, df = 10)  # 자유도가 10인 카이제곱분포의 확률밀도함수 계산
plot(x, y1, type = "l", xlab = "X", ylab = "Density", main = "자유도 5 와 10 일때")
lines(x, y2, col = "blue")  # 자유도가 10인 카이제곱분포곡선 추가
legend("topright", legend = c("자유도 = 5", "자유도 = 10"), lty = 1, 
        col = c("black", "blue"))

(2) 누적분포함수

 

 누적분포함수는 pchisq( ) 함수를 사용합니다.

 

pchisq(q, df, ncp, lower.tail = TRUE)

q : 카이제곱분포에서의 확률값 또는 확률값이 저장된 벡터
df: 자유도(degree of freedom)
ncp: 비중심 파라미터(non-centrality parameter) 값(기본값은 0)
lower.tail: 누적분포 함수의 꼬리 선택, 
            TRUE이면 왼쪽 꼬리 확률 계산, 
            FALSE이면 오른쪽 꼬리 확률 계산 (기본값은 TRUE)

 

(3) 분위수

 

분위수는 qchisq( ) 함수를 사용합니다.

 

qchisq(p, df, ncp, lower.tail = TRUE)

p: 확률값 또는 확률값이 저장된 벡터
df: 자유도(degree of freedom)
ncp: 비중심 파라미터(non-centrality parameter) 값(기본값은 0)
lower.tail: 누적분포 함수의 꼬리 선택, 
            TRUE이면 왼쪽 꼬리 확률 계산, 
            FALSE이면 오른쪽 꼬리 확률 계산 (기본값은 TRUE)

 

(4) 카이제곱분포표

 

자유도 1~10까지의 카이제곱분포표는 아래와 같이 구해볼 수 있습니다.

 

alpha <- c(0.01, 0.025, 0.05,0.95,0.975,0.99)  # 유의수준 설정
df <- 1:10     # 자유도 범위
Chis <- matrix(nrow = length(df), ncol = length(alpha),byrow=F) 
for (i in seq_along(alpha)) {
  Chis[, i] <- qchisq(alpha[i], df = df)  # 카이제곱값 계산 및 matrix에 저장
}
colnames(Chis) <- paste(alpha)  # 컬럼 이름 설정
rownames(Chis) <- paste(df)  # 로우 이름 설정
round(Chis, 3)
    0.01 0.025  0.05   0.95  0.975   0.99
1  0.000 0.001 0.004  3.841  5.024  6.635
2  0.020 0.051 0.103  5.991  7.378  9.210
3  0.115 0.216 0.352  7.815  9.348 11.345
4  0.297 0.484 0.711  9.488 11.143 13.277
5  0.554 0.831 1.145 11.070 12.833 15.086
6  0.872 1.237 1.635 12.592 14.449 16.812
7  1.239 1.690 2.167 14.067 16.013 18.475
8  1.646 2.180 2.733 15.507 17.535 20.090
9  2.088 2.700 3.325 16.919 19.023 21.666
10 2.558 3.247 3.940 18.307 20.483 23.209

 

3. 모분산에 대한 구간 추정

 

◈ 예제 : 제품강도

 

생산된 제품의 강도가 어느 수준에서 안정적으로 생산되는지 알아보기 위해 임의로 8개를 선택하여 제품강도를 측정합니다. 일반적으로 안정성은 분산으로 평가합니다.

제품 강도 결과 : 24.3 , 28.6, 30.2, 26.5, 25.7, 27.8, 26.9, 29.0

 

모분산과 모표준편차의 95% 신뢰구간은 ?

 

$$ \left( \frac{(n-1)S^2}{\chi^2_{\alpha/2,n-1}}  ,  \frac{(n-1)S^2}{\chi^2_{1-\alpha/2,n-1}} \right) $$

 

위 예제를 R을 통하여 신뢰구간을 구해보겠습니다.

 

(1) 제품강도 결과를 변수로 설정

x <- scan()
24.3 28.6 30.2 26.5 25.7 27.8 26.9 29.0

 

 

(2) 수정 제곱합 $ (n-1)S^2) $

css <- sum((x-mean(x))^2)
css
# css <- (length(x)-1)*var(x)

 

[1] 25.555

 

(3) 자유도(df)

df <- length(x)-1
df

 

[1] 7

 

(4) 카이제곱분위수

 

분위수는 qchisq( ) 함수를 사용합니다.

qchisq(0.975,df)
qchisq(0.025,df)

 

[1] 16.01276

[1] 1.689869

 

(5) 모분산 구간추정

 

구간추정 식을 R로 만들어보면,

Sigma2CI <- c(css/qchisq(0.975,df),css/qchisq(0.025,df))
round(Sigma2CI,4)

 

[1]  1.5959 15.1225

 

(6) 모표준편차 구간추정

 

제곱근 함수는 sqrt( ) 입니다.

 

round(sqrt(Sigma2CI),4)
[1] 1.2633 3.8888