본문 바로가기
통계 분석

[Python] 카이제곱 독립성 검정

by DongGoo 2023. 11. 25.

1. 카이제곱 독립성 검정이란?

카이제곱 독립성 검정은 두 범주형 변수가 독립적으로 분포하는지 테스트하는 검정입니다.

여기서 독립이란 A집단의 값이 B집단의 값에 아무런 영향을 미치치 않는것을 말합니다.

쉽게 말해 두 변수 A,B를 독립이라고 정한뒤 독립이 맞는지 확인해보는것입니다.

2. 카이제곱 검정 가설

귀무가설(H0) : "두집단은 독립적이다."

대립가설(H1) : "두집단은 독립적이지않다."

3. Python에서 독립성 검정

 파이썬에서는 scipy라이브러리의 stats모듈에서 카이제곱 독립성을 검정할수 있는 chi2_contingency함수를 제공합니다.

3-1 함수 설명

scipy.stats.chi2_contingency(observed, correction=True, lambda_=None)

    • observed : 교차표(Contingency Table)는 각 범주에서 관찰된 빈도(발생 횟수)를 포함하는 테이블입니다.
      이차원 경우에는 이 테이블을 "R x C 표"로 설명하기도 합니다.
      두집단의 독립성을 검정할때에는 2x2표의 형태로 데이터를 넣습니다.
    • Lambda_ : 기본적으로 이 테스트에서 계산된 통계는 Pearson의 카이제곱 통계량입니다 . Lambda_를 사용 하면 Cressie-Read 전력 발산 계열의 통계를 대신 사용할 수 있습니다.

3-2 구현

국민 기초체력을 조사한 데이터에서 성별과 등급이 독립적인지 검정해보겠습니다.

해당 문제에 대한 가설은 다음과 같습니다.

귀무가설(H0) : "성별과 등급은 독립이다."

대립가설(H1) : "성별과 등급은 독립이아니다."

import pandas as pd 
import matplotlib.pyplot as plt
df = pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/body/body.csv')
df.head()

# 2X2형태의 표로 만들어줍니다.
cross_df = pd.crosstab(df['측정회원성별'],df['등급'])
display(cross_df)

from scipy.stats import chi2_contingency

chi2_contingency(cross_df)

# 결과
Chi2ContingencyResult(
statistic=120.06233631119409, 
pvalue=7.481892813401677e-26, 
dof=3, 
expected_freq=array([[1220.25, 1220.25, 1220.25, 1220.25],
       [2128.75, 2128.75, 2128.75, 2128.75]]))

 

결과를 보았을때 pvalue값이 0에 근접한 값을 가지므로 귀무가설을 기각합니다.

즉, 대립가설인 성별과 등급간에는 관련이 없다고 볼수있습니다.