카이제곱 검정
- 범주형 데이터의 표본 분포가 모집단 분포와 일치하는지 검정 → 적합도 검정
- 두 범주형 데이터 간의 독립성 검정 → 독립성 검정
적합도 검정
- 관찰된 분포와 기대된 분포가 일치하는지 검정
- p값이 높으면 데이터가 귀무 가설에 적합
- p값이 낮으면 데이터가 귀무가설에 부적합
독립성 검정
- 두 범주형 변수 간의 독립성 검정
- p값이 높으면 두 변수 간의 연관성 없음 → 독립성 있음
- p값이 낮으면 두 변수 간의 연관성 있음 → 독립성 없음
실습
scipy.stats.chisquare(observed_data, f_exp = expeted_data) - 적합도 검정
- data1과 data2 사이의 적합도 검정 수행.
- 관찰된 빈도 분포가 기대된 빈도 분포와 일치하는지 평가.
- 주로 단일 표본에 대해 관찰된 빈도가 특정 이론적 분포와 일치하는지 확인
- 반환하는 값
- chi2: 카이제곱 통계량
- p: p-value
scipy.stats.chi2_contingency(data) - 독립성 검정
- 입력: 각 데이터 튜플(ex. [나이, 성별, 흡연여부])을 array로 묶어서 input
- 예) np.array([[10, 10, 20], [20, 20, 40]])
- 두 개 이상의 범주형 변수 간의 독립성 검정.
- 관측 빈도를 담고 있는 교차표(contingency table)를 입력받음.
- 반환하는 값
- chi2: 카이제곱 통계량
- p: p-value
- dof: 자유도. (행의 수 - 1) * (열의 수 - 1)
- expected: 기대 빈도. 행 합계와 열 합계를 사용하여 계산된 이론적 빈도
적합도 검정
observed = [20, 30, 25, 25]
expected = [25, 25, 25, 25]
chi2_stat, p_value = stats.chisquare(observed, f_exp=expected)
print(f"적합도 검정 카이제곱 통계량: {chi2_stat}, p-값: {p_value}")
적합도 검정 카이제곱 통계량: 2.0, p-값: 0.5724067044708798
- p-value가 0.05보다 크기 때문에 두 데이터의 분포는 일치하지 않는다 (부적합)
독립성 검정
# 독립성 검정
observed = np.array([[10, 10, 20], [20, 20, 40]])
chi2_stat, p_value, dof, expected = stats.chi2_contingency(observed)
print(f"독립성 검정 카이제곱 통계량: {chi2_stat}, p-값: {p_value}")
독립성 검정 카이제곱 통계량: 0.0, p-값: 1.0
- p-value가 0.05보다 크기 때문에 두 데이터 사이의 연관성은 없다 (독립적)
성별과 흡연 여부 독립성 검정
# 나이과 흡연 여부 독립성 검정
observed = np.array([[30, 10], [20, 40]]) # [나이, 흡연]
chi2_stat, p_value, dof, expected = stats.chi2_contingency(observed)
print(f"독립성 검정 카이제곱 통계량: {chi2_stat}, p-값: {p_value}")
독립성 검정 카이제곱 통계량: 15.041666666666666, p-값: 0.00010516355403363098
- p-value가 0.05보다 작기 때문에 두 데이터 사이의 연관성이 있음