데이터분석/데이터분석

카이제곱 검정

이규승 2022. 4. 30. 16:13
728x90

데이터에 따른 분석도구

추론 및 검정을 위한 데이터 분석 시에 분석 모델 선택에 영향을 주는 주요 구분 잣대는 사용되는 데이터 분석시 종속변수와 독립변수의 척도에 따라 분석 도구가 달라진다.

독립변수 종속변수 분석방법
범주형 범주형 카이제곱 검정
범주형 연속형 T검정(범주형값 2개 이하)
ANOVA검정 (범주형값 3개 이상)
연속형 범주형 로지스틱 회귀
연속형 연속형 선형회귀, 구조 방정식

카이제곱 분포는 데이터들의 중심위치를 파악하는 대표적인 척도가 평균이다. 그리고 평균에서 데이터들이 흩어져 있는 정도, 즉 치우침을 표현하는 척도가 분산이다. 분산이 퍼져있는 모습을 분포로 만든 것이 카이제곱 분포이다.

* 카이제곱 분포의 그래프

- 항상 양의 값, 오른쪽 꼬리를 갖는 비대칭 분포, 자유도에 자유도가 클수록 좌우 대칭인 정규분포에 가까워진다.

카이제곱분포 그래프

1. 일원카이제곱검정 : 적합성 검정

2. 이원카이제곱검정 : 독립성 검정, 동질성 검정

*일원 카이제곱 검정 Test

# 카이제곱검정 중 일원카이제곱 : 변인 단수
# 관찰도수가 기대도수와 일치하는 지를 검정하는 방법
# 종류 : 적합도/선호도 검정
# - 범주형 변수가 한 가지로, 관찰도수가 기대도수에 일치하는지 검정한다.
# 적합도 검정
# 자연현상이나 각종 실험을 통해 관찰되는 도수들이 귀무가설 하의 분포(범주형 자료의 각 수준별 비율)에 얼마나 일치하는가에 대한
# 분석을 적합도 검정이라 한다.
# 관측값들이 어떤 이론적 분포를 따르고 있는지를 검정으로 한 개의 요인을 대상으로 함.

# <적합도 검정실습>
# 주사위를 60 회 던져서 나온 관측도수 / 기대도수가 아래와 같이 나온 경우에 이 주사위는 적합한 주사위가 맞는가를 일원카이제곱 검정
# 으로 분석하자.
# 관측도수    4 6 17 16 8 9    : 60회
# 기대도수   10 10 10 10 10 10 : 60회
# 귀무가설 : 기대치와 관찰치는 차이가 없다. 이 주사위는 게임에 적합하다.
# 대립가설 : 기대치와 관찰치는 차이가 있다. 이 주사위는 게임에 적합하지 않다.

import pandas as pd
import scipy.stats as stats
data = [4, 6, 17, 16, 8, 9] #관측값
exp = [10, 10, 10, 10, 10, 10]
print(stats.chisquare(data, exp))
#Power_divergenceResult(statistic=14.200000000000001, pvalue=0.014387678176921308)
#유의확률(p-value) 0.01439 < 유의수준 0.05 이므로 귀무가설을 기각하고 대립가설을 채택한다.

*이원카이제곱 검정 Test

import pandas as pd

data = pd.read_csv("pass_cross.csv", encoding='euc-kr') #euc-kr <- encoding해주기위함
print(data.head())  # data의 정보를 5개만 보기위함
print(data.shape) # data의 크기 확인
# 귀무가설과 대립가설 설정해주기
# 귀무가설 : 벼락치기 공부는 합격 여부와 관계가 없다.
# 대립가설 : 벼락치기 공부는 합격 여부와 관계가 있다.
# 귀무가설은 보수적으로 선언하며 대립가설은 귀무가설의 반대가설이어야 한다.
   공부함  공부안함  합격  불합격
0    1     0   1    0
1    1     0   1    0
2    0     1   0    1
3    0     1   0    1
4    1     0   1    0

(50, 4)

crosstab을 이용하여 빈도표를 활용한다.

ctab = pd.crosstab(index=data['공부함'], columns = data['합격'], margins=True)
#ctab = pd.crosstab(index=data['공부안함'], columns=data['불합격'], margins=True)#둘 중 상관없다.
ctab.columns = ['합격', '불합격', '행합']
ctab.index = ['공부함', '공부안함', '열합']
print(ctab)
빈도표 ----
      합격  불합격  행합
공부함   13   12  25
공부안함   7   18  25
열합    20   30  50

교차분석 연습 : 모듈이 제공하는 p-value를 사용한다.

import scipy.stats as stats

chi2, p, _, _, = stats.chi2_contingency(ctab)
print('chi2:{}, p-value:{}'.format(chi2, p))

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
chi2:3.0, p-value:0.5578254003710748

결론 : p-value 가 0.05보다 크므로 귀무가설을 채택하고 대립가설 기각한다.
즉 벼락치기 공부는 합격 여부와 관계가 없다.

 

728x90

'데이터분석 > 데이터분석' 카테고리의 다른 글

비율분석  (0) 2022.04.30
ANOVA  (0) 2022.04.30
T-test  (0) 2022.04.30
글 스크래핑 후 형태소를 분석  (0) 2022.04.30
konlpy 한국어 처리 패키지  (0) 2022.04.30