Statistics

[STAT 101] 자유도와 카이제곱 분포, 검정

thebuck104 2024. 8. 14. 20:04

카이제곱에 대한 설명에 들어가기 앞서,

자유도에 대해 먼저 간략히 설명해 보겠다.

자유도 Degree of Freedom

자유도는 주어진 통계 모델에서 독립적으로 변동할 수 있는 변수의 개수다.

이는 역설적으로 통계 모델에서 오는 제약조건이 있기 때문에 사용하는 개념이다.

다시 말해, 자유도란 모델 내에서 제약 조건에서 자유롭게 변화할 수 있는 정보의 양을 나타낸다.

 

예를 들어, 확률 변수 , 에 대해서, 

 

보통 자유도는 관찰 (혹은 정보)의 수에서 추정된 매개변수의 수를 뺀 것과 같다.

 

일표본 T 검정

일표본 T 검정의 경우 평균 추정이라는 제약조건이 있다.

이 때, n개의 데이터의 총합은 " n * 데이터의 평균 " 이 된다는 제약이 그것이다.

예를들어, 총 10개의 데이터가 3.5의 평균을 가진다면, 데이터의 총합은 3.5 * 10, 즉 35가 된다.

 

10개의 데이터의 총합이 35가 되는 가지의 수는 무한하지만,

9번 째 데이터가 정해지는 순간, 10번 째 데이터도 정해진다.

그러므로, 일표본 T 검정은 10 - 1 = 9 가지의 자유로운 데이터 변환이 가능하고,

이를 n-1의 자유도를 가진다고 한다.

 

카이제곱 독립성 검정

카이제곱 독립성 검정의 경우, 두 가지 범주형 변수가 종속적인지 파악하는 데 상용된다.

이 때의 자유도는 각 범주의 수준 (행과 열로 표현되는)의 수에 영향을 받는다.

 

예를들어 2가지 범주의 2X2 수준 표를 보면 다음과 같다.

 

이 때, 행과 열의 총합이 정해져 있으니, 달라질 수 있는 셀 값은 단 하나다.

그러므로 이 때의 자유도는 1이다.

 

또한, 위처럼 3X2의 표를 보면 위와 같이 2개의 셀 값만 달라질 수 있기에, 자유도는 2다.

 

카이제곱 독립성 검정의 자유도는 이렇듯 하나의 공식을 따르는데,

자유도는 행이 r개, 열이 c개 있을 때 ( r - 1 )( c - 1 )이 된다.

 

회귀 분석

보통 자유도는 관찰 (혹은 정보)의 수에서 추정된 매개변수의 수를 뺀 것과 같다.

회귀를 수행할 때 모든 항에 대해 모수가 추정 되며, 이 때 각 항 마다 자유도를 소비한다.

 

 

카이제곱 분포

카이제곱 분포는 주로 분산 추정, 독립성 검정, 적합도 검정 등에서 활용된다. 

 

정규분포를 따르는 독립적인 확률 변수 X들에 대해,

X를 몇개 씩 추출해, 이를 제곱해 합산한 값을 카이제곱 통계량이라 한다.

 

 

이 때, 확률 변수 X를 몇개씩 뽑아 제곱합을 구하는지를 k (자유도)로 나타낼 수 있다.

 

k = 1인 상황은 정규분포에서 확률 변수를 1개씩만 뽑아 제곱하는 상황이고,

 

 

 

 

 

이를 무한히 반복해 히스토그램을 그리면 다음과 같아진다.

 

k = 3인 상황은 정규분포에서 확률 변수를 3개씩 뽑아 제곱해 서로 더하는 상황이된다.

 

이 또한, 무한히 반복하면 아래와 같아진다.

 

이 때, 카이제곱 통계량은 아래와 같은 수식으로 구할 수 있다.

 

 

해당 식은 피어슨 카이제곱 통계량 (Pearson's chi-squared statistics) 라고도 불린다.

이 때, Oi는 i번 째 데이터에 대한 관찰값 (관측빈도), Ei는 i번째 데이터에 대한 기댓값 (기대빈도)이다.

 

이 때, 각 변수의 범주의 개수가 각각 k1, k2 라면, 

통계량은 자유도가 (k1 - 1)(k2 - 2)인 카이제곱 분포를 따르게 된다.

 

예를 들어, 당뇨와 비만의 상관관계를 볼 때, 아래와 같은 2X2 테이블이 그려질 수 있다.

  당뇨 정상 합계
비만 체중 ?   20
정상 체중     80
합계 25 75 100

 

당뇨 컬럼수 - 1 = 1, 비만 로우수 - 1 = 1 이므로 1 x 1로 자유도는 1이 된다.

 

카이제곱 검정

카이제곱 검정은 관찰되는 값과 기대값 간의 차이를 비교해 두 변수의 독립성 또는 적합도를 평가하는 데 사용된다.

기본적으로 위에서 설명한 교차분석표의 형태로 분석이 진행된다.

 

파이썬으로는 pandas.crosstab을 통해 교차분석표를 쉽게 만들 수 있다.

import pandas as pd

# 데이터 예시
data = {
    'Gender': ['Male', 'Female', 'Female', 'Male', 'Female', 'Male', 'Female', 'Female'],
    'Preference': ['Yes', 'No', 'Yes', 'Yes', 'No', 'Yes', 'No', 'Yes']
}

df = pd.DataFrame(data)

# 교차분석표 (contingency table) 생성
contingency_table = pd.crosstab(df['Gender'], df['Preference'])

print(contingency_table)

[output]
Preference  No  Yes
Gender             
Female       3    2
Male         0    3

 

1) 독립성 검정 Test of Independence

내가 설정한 독립변수 (원인)가 종속변수(결과)에 정말 영향을 미치는지 아니면 독립적인지를 확인하기 위한 검정이다.

즉, 인과관계를 파악하는 검정이라 할 수 있다.

 

이 때의 귀무가설 H0는

"독립변수는 종속변수와 상호 독립적이다." 이고,

대립가설 H1은

"독립변수는 종속변수와 독립적이지 않다, 즉 독립변수는 종속변수의 원인이 된다."가 된다.

 

이 때, 검정 변수의 척도는 명목 척도여야 한다.

명목 척도란 숫자의 크기에 의미가 없이 종류가 다름을 구분하는 척도로, 범주형 자료에 해당한다.

하지만 얼마나 관계가 있는지, 그 정도는 알 수 없다.

 

이를 파이썬을 활용하면 아래와 같이 할 수 있다.

import pandas as pd
from scipy.stats import chi2_contingency

# 데이터 예시
data = {
    'Gender': ['Male', 'Female', 'Female', 'Male', 'Female', 'Male', 'Female', 'Female'],
    'Preference': ['Yes', 'No', 'Yes', 'Yes', 'No', 'Yes', 'No', 'Yes']
}

df = pd.DataFrame(data)

# 교차분석표 생성
contingency_table = pd.crosstab(df['Gender'], df['Preference'])

# 카이제곱 독립성 검정 수행
chi2, p, dof, expected = chi2_contingency(contingency_table)

print(f"Chi2 Statistic: {chi2}")
print(f"P-value: {p}")
print(f"Degrees of Freedom: {dof}")
print("Expected Frequencies:")
print(expected)

[output]
Chi2 Statistic: 0.888888888888889
P-value: 0.34577858615116
Degrees of Freedom: 1
Expected Frequencies:
[[1.875 3.125] [1.125 1.875]]

 

위는 성별과 선호도가 독립적인지 확인하는 독립성 검정으로,

p값이 0.05보다 높으므로 "두 범주는 독립적이다."라고 할 수 있다.

 

2) 적합성 검정 Goodness of Fit Test

범주형 변수의 관찰 빈도가 기대빈도와 얼마나 잘 일치하는지를 검정하는 것.

기대빈도는 일반적으로 이론적 분포, 즉 정규분포 혹은 균등분포 등에 기반한다.

 

예를들어 주사위를 100번 던졌을 때, 각 숫자가 진짜 동일한 빈도로 나오는지를 보는것으로,

실제 1이 나온 관측빈도와 1이 나올 기대빈도인 1/6 을 비교한다.

 

혹은, 공을 뽑는 빈도를 통해 주머니 속에 5가지의 공이 3개씩, 총 15개가 있는지를 확인해 볼 수도 있다.

즉, 빨간 공을 뽑은 관측빈도 4개와 기대빈도 5/15 를 비교하는 것.

 

이 때, 귀무가설 H0인 

"관찰 빈도가 기대 빈도와 일치한다." 를 기각할지를 검정하면 된다.

 

이를 파이썬을 활용하면 아래와 같이 사용할 수 있다.

from scipy.stats import chisquare

# 관찰된 데이터 (예: 주사위의 각 면이 나온 횟수)
observed = [18, 17, 16, 15, 17, 17]  # 총 100번 던짐

# 기대되는 빈도 (균등한 분포, 즉 각 면이 동일한 확률로 나오는 경우)
expected = [100/6] * 6  # 각 면이 1/6 확률로 나오는 경우

# 카이제곱 적합성 검정 수행
chi2_statistic, p_value = chisquare(f_obs=observed, f_exp=expected)

print(f"Chi2 Statistic: {chi2_statistic}")
print(f"P-value: {p_value}")

[output]
Chi2 Statistic: 0.31999999999999995
P-value: 0.9972499265728652

 

위는 총 100번 관측된 각 주사위의 면수가 실제로 서로 1/6을 따르는지에 대한 적합성 검정으로,

p값이 0.05보다 높으므로 "기대빈도와 관측빈도가 일치한다." 라는 H0을 체택한다.

즉, 관측된 값을 바탕으로 주사위를 던져 각 면이 나올 확률은 1/6을 따른다.

3) 동질성 검정 Test for Homogeneity

동질성 검정은 동일한 모집단에서 나온건지 확인하는 것.

사실상 가설을 어떻게 세우느냐가 다른 것이지, 독립성 검정과 같다고 할 수 있다.

 

동립성은 무작위로 추출해서 둘의 응답을 보는 것.

독질성 검정은 조금 더 실험적인 상황이고, 그래서 그룹 당 몇 씩 샘플을 추출 한다.