카이제곱 검정은 범주형(명목형) 자료를 분석할 때 핵심적인 통계적 방법이므로, 실제 연구나 실무에서 매우 자주 활용됩니다.
카이제곱() 검정의 이해
1. 개요
1.1 기본 개념
•
*카이제곱 검정(Chi-square test)**은 범주형 자료 간의 관계나 분포 적합도를 검정하는 데 사용되는 통계 기법입니다.
•
주로 독립성 검정(두 범주형 변수 사이에 연관성이 있는지), 적합도 검정(하나의 범주형 변수 분포가 특정 이론이나 기대 분포와 일치하는지), 동질성 검정(서로 다른 모집단들의 범주형 분포가 동일한지) 등에 활용됩니다.
1.2 범주형 자료 예시
•
성별(남/여), 지역(서울/부산/대전/…), 제품 구분(A/B/C/…), 구매 여부(구매/미구매), 질병 유무(있음/없음) 등과 같이 명목척도(혹은 순서척도가 아닌 범주)로 구분되는 변수를 말합니다.
2. 카이제곱 검정의 주요 유형
2.1 적합도(goodness-of-fit) 검정
•
하나의 범주형 변수가 어떤 특정한 기대 분포(이론적 분포)에 적합한지 확인.
•
예: 유전자 분리에 관한 멘델의 법칙 비율(3:1 등)에 실제 데이터가 적합한가?
•
귀무가설(H0H_0): 관측된 분포 = 기대 분포(차이 없음)
2.2 독립성(independence) 검정
•
두 개의 범주형 변수가 서로 독립인지, 아니면 연관성이(독립이 아님) 있는지 확인.
•
예: “성별”과 “제품 선호도(A/B/C)”가 독립적인가?
•
귀무가설(H0H_0): 두 범주형 변수는 서로 독립
2.3 동질성(homogeneity) 검정
•
*여러 모집단(집단)**이 동일한 분포를 보이는지 검정.
•
예: 지역(서울/부산/대구/...)별로 제품 선호도(A/B/C)가 동일한 분포인지 확인.
◦
독립성 검정과 통계적으로는 유사한 방식으로 진행되지만, 해석상 "서로 다른 모집단들이 동일한 분포를 보이는지"를 묻는 점이 다릅니다.
•
귀무가설(H0H_0): 여러 집단 간 범주형 분포는 모두 동일
실제로는 독립성 검정과 동질성 검정이 동일한 수리적 접근(χ2\chi^2 계산 방식)을 공유하지만, 연구 설계 또는 표본 추출 방식 등 맥락에 따라 ‘독립성’ vs ‘동질성’ 개념으로 분류합니다.
3. 수학적 기초
3.1 관측도수 vs 기대도수
•
카이제곱 검정에서는 **분할표(contingency table)**를 구성해, 셀(cell)별로 “관측된 도수(observed frequency)”와 “기대 도수(expected frequency)”를 비교합니다.
•
기대도수란, 귀무가설이 참이라고 가정했을 때 이론적으로 해당 셀에 기대되는 관측값입니다.
3.2 검정 통계량()
카이제곱 검정 통계량은 다음처럼 계산됩니다.
•
O: 관측도수(Observed frequency)
•
E: 기대도수(Expected frequency)
•
각 셀마다 을 구해 더합니다.
3.3 자유도(df)
•
2×2 표의 경우 자유도 = (행의 개수-1) × (열의 개수-1).
•
일반적으로 분할표에서 자유도 =
3.4 분포
•
계산된 통계량은 카이제곱 분포( 분포)를 따르며, 자유도를 기준으로 해당 분포에서 p-값을 구합니다.
•
p-값 < 유의수준(보통 0.05) → 귀무가설 기각 → (독립성 검정 예시) “두 변수는 독립이 아니다(연관 있음).”
4. 카이제곱 검정 절차
1.
데이터 수집 & 분할표 작성
•
두 범주형 변수가 있다면, 교차표(crosstab)를 만든다(예: 행=성별, 열=제품 선호).
2.
기대도수 계산
•
독립성 검정의 경우, 각 셀의 기대도수 = .
(해당행의합)×(해당열의합)전체표본수\dfrac{(해당 행의 합) \times (해당 열의 합)}{전체 표본 수}
•
적합도 검정의 경우, 이론적으로 주어진 비율(또는 분포)에 전체 표본 수를 곱해 기대치 도출.
3.
χ2\chi^2 통계량 계산
•
∑(O−E)2E\sum \frac{(O - E)^2}{E}
•
각 셀의 를 모두 합산
(관측−기대)2/기대(관측-기대)^2 / 기대
4.
자유도, p-값 확인
•
자유도()를 사용해 분포표나 소프트웨어에서 p-값 구함
dfdf
χ2\chi^2
5.
결과 해석
•
p-값이 작으면 귀무가설(독립/동일/적합)을 기각 → 통계적으로 유의한 차이/연관성/부적합이 존재
5. 검정 가정 & 주의사항
1.
표본의 독립성
•
측정된 샘플들이 서로 독립적이어야 함(한 사람이 중복으로 여러 행에 걸쳐 포함되지 않도록).
2.
기대도수가 5 이상
•
각 셀의 기대도수가 5 미만인 셀이 여러 개 있으면, 분포 근사가 불안정해짐.
χ2\chi^2
•
이를 해결하기 위해, 일부 셀을 합치거나, 더 정확한 검정(Fisher의 정확검정 등)을 고려할 수 있음.
3.
표본 크기
•
극단적으로 적은 표본은 분할표 구성 자체가 무의미해질 수 있음.
4.
연속성 보정(continuity correction)
•
2×2 표에서 정확도를 높이기 위해 Yates의 연속성 보정(Yates’ correction)을 적용하기도 함.
6. 해석과 보고
6.1 독립성 검정 예시
•
귀무가설(H0H_0): “성별”과 “제품 선호”는 독립적이다.
•
결과: p-값 < 0.05 → 귀무가설 기각 → “성별에 따라 제품 선호가 유의미하게 달라진다(독립 아님).”
6.2 적합도 검정 예시
•
귀무가설(H0H_0): 실제 관측된 자료의 분포와 이론적(기댓값) 분포가 동일.
•
결과: p-값 < 0.05 → 기대 분포와 다른 결과가 나타났음을 의미.
6.3 동질성 검정 예시
•
귀무가설(H0H_0): 지역 A, B, C 간의 선호도 분포가 모두 동일.
•
결과: p-값 < 0.05 → 지역 간 선호 패턴이 다르다고 결론.
보고 시에는 교차표, χ2\chi^2 통계량, 자유도, p-값 등을 명시하고, 어떤 범주가 특히 많이/적게 차이를 보이는지 세부 분할표로 해석해주면 좋습니다.
7. 카이제곱 검정의 사후분석
카이제곱 검정이 “유의미한 차이(또는 연관성) 존재”라고 결론지었을 때, 구체적으로 어떤 범주가 주로 차이를 일으키는가를 살펴볼 수 있습니다.
1.
잔차(Residual) 분석:
•
셀별로 값을 비교하여, 기대보다 많이 관측된 범주가 어디인지, 적은 범주가 어디인지 판단.
(O−E)(O - E)
•
표준화 잔차(standardized residual)가 |1.96|보다 크면 통계적으로 유의하게 기대값과 다름을 의미(유의수준 0.05 기준).
2.
쌍별 비교:
•
동질성 검정 상황에서 “어떤 집단끼리 차이가 많이 나는지” 추가 비교가 가능하지만, 범주형 데이터의 쌍별 비교는 다중비교 문제로 인해 보정이 필요합니다.
8. 장단점
8.1 장점
1.
분석이 간단하고 직관적: O, E 도수만으로 계산 가능.
2.
범주형 자료 전용: 범주형 변수 사이 관계를 논리적으로 파악.
3.
이해하기 쉬운 결과: p-값을 통해 귀무가설 기각 여부 판단이 명확.
8.2 단점
1.
기대도수 5 이상 조건: 셀이 너무 많이 분할되거나 표본 크기가 작으면 사용 어려울 수 있음.
2.
원인-결과 분석 제한: 카이제곱 검정은 인과관계를 보장하지 않음(연관성만 파악).
3.
집단의 세부적 차이 파악 어려움: 유의미하다면, 추가 분석(잔차 분석 등)을 통해 구체적 차이를 확인해야 함.
9. 실무 적용 시 고려사항
1.
데이터 구조 파악
•
각 범주(행, 열)별 관측 빈도가 충분한지, 일부 셀에 데이터가 몰려 있지 않은지 확인.
2.
기대도수 5 미만 셀
•
셀이 여러 개면, 검정 결과 왜곡. 셀 병합 혹은 다른 검정(Fisher 정확검정 등) 활용 고려.
3.
결과 해석
•
p-값만 보지 말고, 잔차분석을 통한 세부 해석 또는 **효과크기(Cramer’s V, Phi 계수)**도 추가로 제시하면 좋다.
4.
표본추출 방식
•
동질성 검정 vs 독립성 검정 구분 시, 사전에 표본 추출 방식 및 연구 설계를 명확히 정의해야 한다(예: 사전에 할당된 집단 vs 무작위 표본 등).
마무리
•
*카이제곱 검정(Chi-square test)**은 범주형 변수 간의 연관성과 분포 적합성을 확인하는 핵심 통계 기법입니다.
•
독립성 검정: 두 범주형 변수가 독립인지, 연관성이 있는지 확인.
•
적합도 검정: 관측된 범주형 자료가 예상(이론) 분포와 일치하는지 확인.
•
동질성 검정: 여러 집단이 동일한 범주 분포를 갖는지 여부 확인.
결과가 유의미하다고 나왔다면, 잔차 분석을 통해 어느 범주에서 차이가 두드러지는지 파악해야 합니다. 또한 카이제곱 검정은 연관성만 보여줄 뿐 인과관계를 직접적으로 증명할 수 없으므로, 연구 목적과 자료 특성에 맞는 **추가 분석(로지스틱 회귀, 공변량 통제 등)**을 고려할 수도 있습니다.
이처럼 카이제곱 검정은 사회과학·자연과학·의학·마케팅 등 다양한 분야에서 범주형 데이터를 다룰 때 최우선적으로 떠올리는 기법이므로, 위 가정과 절차를 잘 숙지해두면 실제 데이터 분석에서 강력한 도구가 됩니다.
예시 시나리오
•
2개의 집단(행)과 3가지 범주(열)가 있을 때, 집단과 범주 간의 독립 여부를 카이제곱 검정으로 파악
◦
예: 두 지역(도시 A, 도시 B)과 제품 선호도(선호1, 선호2, 선호3) 분할표
import numpy as np
import pandas as pd
from scipy.stats import chi2_contingency
from math import sqrt
# ------------------------------------------------
# 1) 예시 데이터 (관측도수 표: 2행 x 3열)
# ------------------------------------------------
# 예) 도시 A (행1), 도시 B (행2)
# 카테고리 3개 (열1, 열2, 열3)
obs = np.array([[10, 15, 25], # 도시 A의 분포
[20, 25, 5]]) # 도시 B의 분포
# 행/열 이름을 붙여보고 싶다면 DataFrame으로 관리:
df_obs = pd.DataFrame(obs,
index=['City_A','City_B'],
columns=['Prefer_1','Prefer_2','Prefer_3'])
print("== 관측도수(Observed Frequencies) ==")
print(df_obs, "\n")
# ------------------------------------------------
# 2) 카이제곱 독립성 검정
# ------------------------------------------------
chi2, p, dof, expected = chi2_contingency(obs)
print("== 카이제곱 검정 결과 ==")
print(f"Chi2 통계량: {chi2:.4f}")
print(f"p-value: {p:.4f}")
print(f"자유도(df): {dof}")
df_expected = pd.DataFrame(expected,
index=['City_A','City_B'],
columns=['Prefer_1','Prefer_2','Prefer_3'])
print("\n[기대도수(Expected Frequencies)]")
print(df_expected)
# 유의수준 설정 (예: 0.05)
alpha = 0.05
if p < alpha:
print("\n=> 귀무가설 기각: 통계적으로 유의한 연관성이 있다고 판단합니다.")
else:
print("\n=> 귀무가설 채택: 유의한 연관성을 찾지 못했습니다.")
# ------------------------------------------------
# 3) 잔차(Residual) 분석
# ------------------------------------------------
# 표준화 잔차: (관측값 - 기대값) / sqrt(기대값)
std_res = (obs - expected) / np.sqrt(expected)
df_std_res = pd.DataFrame(std_res,
index=['City_A','City_B'],
columns=['Prefer_1','Prefer_2','Prefer_3'])
print("\n== 표준화 잔차(standardized residuals) ==")
print(df_std_res)
# 특정 기준(예: ±1.96) 이상이면 통계적으로 유의하게 기대보다 많거나 적다는 해석 가능
sig_mask = np.abs(std_res) > 1.96
df_sig_mask = pd.DataFrame(sig_mask,
index=['City_A','City_B'],
columns=['Prefer_1','Prefer_2','Prefer_3'])
print("\n[잔차 > ±1.96 여부]")
print(df_sig_mask)
# ------------------------------------------------
# 4) 효과크기: Cramer's V
# ------------------------------------------------
# Cramer's V = sqrt( (chi2 / n) / (k-1) )
# - n: 전체 표본 크기
# - k: min(행-1, 열-1)
n = obs.sum()
phi2 = chi2 / n
r, c = obs.shape
k = min(r-1, c-1) # 독립성 검정에서는 (행-1, 열-1) 중 작은 값
cramers_v = sqrt(phi2 / k)
print(f"\n== Cramer's V (효과크기) ==")
print(f"Cramer's V: {cramers_v:.4f}")
Python
복사
코드 실행 예시 해석
1.
교차표(분할표) 생성
•
obs 배열이 실제 관측된 빈도수를 나타냅니다.
•
예시에서는 2행×3열 구조로, “도시 A/B”와 “선호1/선호2/선호3”의 빈도 수.
2.
카이제곱 검정
•
chi2_contingency(obs)를 통해 , p-값, 자유도, 그리고 기대도수(Expected)를 반환합니다.
χ2\chi^2
•
결과 해석:
◦
p < 0.05 → “두 변수(도시와 선호)는 독립이 아니다(연관 있음).”
◦
p ≥ 0.05 → “두 변수는 독립적이라고 볼 수 있다(연관 없음).”
3.
잔차(Residual) 분석
•
셀별로 (Observed - Expected)/sqrt(Expected)를 계산한 뒤, 그 절댓값이 **1.96(약 ±2)**보다 크면, 해당 셀에서 유의하게 기대보다 많거나 적다고 해석할 수 있습니다(95% 신뢰수준 기준).
•
이를 통해 특정 범주의 기여도(어디서 주로 차이가 났는지)를 살펴볼 수 있습니다.
4.
Cramer's V (효과크기)
•
카이제곱 검정이 유의하더라도, 실제로 얼마나 강한 연관성을 보이는지는 Cramer's V를 통해 확인합니다.
•
0에 가까울수록 연관성이 약하고, 1에 가까울수록 강한 연관성을 의미합니다(범위: 0~1).
주의사항
1.
기대도수 5 이상:
•
카이제곱 검정에서는 기대도수가 5 미만인 셀이 너무 많으면 결과 해석이 왜곡될 수 있습니다.
•
예시 데이터가 작으면, 실제 연구에서는 더 큰 표본을 확보하거나, 셀을 합치는 방식을 고려해야 합니다.
2.
표본 추출 방법:
•
동질성 검정 vs 독립성 검정은 표본 추출·할당 방식이 다릅니다. 코드 구현은 유사하지만, 연구 설계에 맞춰 해석해야 합니다.
3.
인과관계 주장 불가:
•
카이제곱 검정은 범주형 변수 간의 연관성을 파악하는 것이므로, 원인과 결과를 구분하여 단정짓기는 어렵습니다.
4.
정확 검정:
•
2×2 표의 경우 기대도수가 작은 셀이 있을 때, **Fisher의 정확검정(Fisher’s exact test)**을 고려할 수 있습니다.
정리
•
카이제곱(χ2\chi^2) 검정은 범주형 자료(명목형 변수)에서 두 변수 간 독립성을 테스트하거나, 하나의 범주형 변수 분포가 기대분포와 적합한지(적합도 검정), **여러 모집단 분포가 동일한지(동질성 검정)**를 판단할 때 사용합니다.
•
Python에서 scipy.stats.chi2_contingency 함수를 이용해 손쉽게 검정을 수행할 수 있으며, 잔차 분석을 통해 어떤 범주에서 차이가 의미 있게 나타나는지 구체적으로 파악할 수 있습니다.
•
결과 보고 시에는 교차표, 카이제곱 통계량(χ2\chi^2), p-값, 자유도 등 기본 지표와 함께, 필요에 따라 잔차 분석, Cramer's V 등의 효과크기 정보를 같이 제시해주면 더욱 충실한 해석이 가능합니다.