Data Analysis/Statistics
Python_Statistics_Chi-square
mansoorrr
2023. 12. 15. 11:32
카이제곱 검정
- t-test와 Anova는 종속변수가 연속형 변수
- 카이제곱 검정은 종속변수가 범주형 변수
- 적합성 검정, 독립성 검정, 동질성 검정 목적으로 사용됨
검정 방법 | 내용 |
적합성 검정 | 각 범주에 따른 데이터의 빈도분포가 이론적으로 기대하는 분포를 따르는지 검정 |
독립성 검정 | 모집단이 두 개의 변수 A, B에 의해 범주화 되었을 때, 이 두 변수들 사이의 관계가 독립인지 검정 |
동질성 검정 | 서로 다른 표본 집단의 변수의 동질성 확인 |
- 교차분석의 관측빈도와 기대빈도의 차이를 비교하는것이 기본적인 아이디어
교차분석
- 교차표를 통해 각 셀의 관찰빈도와 기대빈도 간의 차이를 검정하는 방법
- 관찰빈도: 자료로 부터 얻은 빈도분포
- 기대빈도: 두 변수가 독립일때 이론적으로 기대할 수 있는 빈도분포
적합성검정
- 각 범주에 따른 데이터의 빈도분포가 이론적으로 기대하는 분포를 따르는지 검정하는 법
- 예) 주사위를 굴렸을때 각 주사위의 값이 1/6의 확률이 맞는지를 검정
- scipy.stats.chisquare(관찰빈도, 기대빈도, 자유도)
예시 1) titanic 데이터에서 가설에 대한 적합도 검정을 수행
- 가설
- H0: 타이타닉호 생존자중 남자와 여자의 비율은 차이가 없다(50%: 50%)
- H1: 타이타닉 호 생존자중 남자와 여자의 비율은 차이가 있다.
- 카이제곱검정 결과 통계량은 44.95, p-value < .05 이므로 귀무가설을 기각한다.
- 따라서 남자와 여자의 비율은 차이가 있다.
#---------- 데이터 로드
import pandas as pd
import seaborn as sns
#seaborn에 있는 데이터로 진행
titanic = sns.load_dataset("titanic")
print(titanic.shape)
titanic.info()
#----------- 생존자중 남녀 분포
table = titanic.loc[titanic["survived"] == 1, "sex"]
table.value_counts()
#---------- 카이제곱 검정
import scipy.stats as stats
stats.chisquare(table.value_counts(), f_exp=[171, 171]) #기대도수(f_exp)는 남녀 전체 342명 / 2(남,여)
#Power_divergenceResult(statistic=44.95906432748538, pvalue=2.0119672574477235e-11)
독립성 검정
- 모집단이 두개의 변수 A, B에 의해 범주화 되었을때, 두 변수들 사이의 관계가 독립인지 아닌지를 검정
- scipy.stats.chi2_contingency("pd.crosstab의 결괏값", correction=True, lambda_=None)
- return 값 설명
- ch2: 카이제곱 통계량
- p: p-value
- dof: 자유도
- expected: 테이블의 합계를 기반으로한 기대빈도
예시 1) titanic 데이터에서 좌석등급에 따른생존여부가 서로 독립인지 확인
- 가설
- H0: 좌석등급에 따른 생존여부는 독립이다.
- H1: 좌석등급과 생존여부는 독립이 아니다.
- pd.crosstab을 활용해 도수분포표 생성
- 도수분포표를 통한 카이제곱 검정결과
- 통계량 102.89, p-value <.05 이므로 귀무가설 기각
- 좌석등급과 생존여부는 독립이 아님
#---------- titanic 데이터로 진행
#도수분포표 생성
cross_table = pd.crosstab(titanic["class"], titanic["survived"])
#total 포함한 도수분포표
pd.crosstab(titanic["class"], titanic["survived"], margins=True, margins_name="total")
#비율확인을 위한 도수분포표
pd.crosstab(titanic["class"], titanic["survived"], margins=True, margins_name="total", normalize=True)*100
#---------- 카이제곱(독립성확인)검정
stats.chi2_contingency(cross_table)
# Chi2ContingencyResult(
# statistic=102.88898875696056,
# pvalue=4.549251711298793e-23,
# dof=2,
# expected_freq=array(
# [[133.09090909, 82.90909091],
# [113.37373737, 70.62626263],
# [302.53535354, 188.46464646]]
# )
# )
동질성검정
- 모집단이 임의의 변수에 따라 R개의 속성으로 범주화 되었을때
- R개의 부분 모집단에서 추출한 표본이 C개의 범주화된 집단의 분포가 서로 동일한지 검정
- 가설
- H0: class의 분포는 survived에 관계없이 동일하다
- H1: class의 분포는 survived에 관계가 있다.