그래요, 왔습니다. 카이스퀘어예요. 우리말로는 카이제곱, 일본어로는 카이2승, 영어로는 카이스퀘어. 제곱이 영어로 스퀘어임다.
카이스퀘어는 범주형 데이터(명목 척도)의 관찰 빈도가 기대 빈도와 유의미한 차이가 있는지, 또는 두 변수가 독립적인지 분석하는 통계적 가설 검정이다. 뭐 예를 들자면 공대와 자연대의 성비가 비슷한가? 특정 주류의 선호도가 성별과 상관이 있나? 그런걸 말하는겁니다.
여기서는 세 가지를 할 건데
1. 동질성 검정: 얘랑 쟤랑 같은가? (예: 공대와 자연대의 성비가 같은가? 그건 과바과임)
2. 독립성 검정: 얘랑 쟤랑 뭔 관계가 있나?
3. 적합성 검정: 얘 분포가 특정 분포와 일치하나?
이거다.
적합성 검정
- 귀무가설: 관측된 분포가 특정 분포와 유의미한 차이가 없다.
- 대립가설: 관측된 분포가 특정 분포와 유의미한 차이가 있다.
# 관찰 빈도 (실제 데이터)
observed = [12, 8, 11, 9, 10, 10]
# 기대 빈도 (이론적 데이터: 60번 던졌으니 각각 10번)
expected = [10, 10, 10, 10, 10, 10]
# 검정
chi_stat, p_val = chisquare(f_obs=observed, f_exp=expected)
if p_val < 0.05:
print("귀무가설 기각")
else:
print("귀무가설 수립")
이게 먼 소리고? 주사위(평범한 6면 주사위)를 던져서 각 눈이 나올 확률이 1/6이잖아요? 그럼 60번 던지면 이론상 1, 2, 3, 4, 5, 6이 이븐하게 10번씩 나올 거 아니예요. 그리고 위에 observed는 실제로 주사위를 던졌던 이렇더라...다. 그리고 이게 이론적인 기대값과 일치하는지를 보는거다.
# 관찰 빈도 (실제 데이터)
observed = [12, 8, 11, 19, 10, 0]
# 기대 빈도 (이론적 데이터: 60번 던졌으니 각각 10번)
expected = [10, 10, 10, 10, 10, 10]
# 검정
chi_stat, p_val = chisquare(f_obs=observed, f_exp=expected)
if p_val < 0.05:
print("귀무가설 기각")
else:
print("귀무가설 수립")
만약 저 주사위가 주작된 주사위라 6이 안나온다면 확률분포가 시망이겠죠? 이론이랑 다르잖아요? 그러면 귀무가설이 기각된다. 가챠게임 확률 주작에 써먹어도 됨. 통계분석했더니 확률표랑 다르잖아! 공정위 맛 좀 볼래?
독립성 검정
- 귀무가설: 두 범주형 변수가 서로 독립적이다.
- 대립가설: 두 범주형 변수가 서로 독립적인 관계가 아니다.
# 교차표(Contingency Table) 생성
# 행: 성별, 열: 선호 브랜드
data = pd.DataFrame({
'Brand_A': [20, 30], # 남성 중 A선호, 여성 중 A선호
'Brand_B': [15, 10] # 남성 중 B선호, 여성 중 B선호
}, index=['Male', 'Female'])
# 검정 (correction=False는 연속성 보정 미적용)
chi_stat, p_val, dof, expected = chi2_contingency(data)
if p_val < 0.05:
print("귀무가설 기각: 이 두 변수가 독립적이지 않다.")
else:
print("귀무가설 수립: 이 두 변수가 독립적이다.")
일단 이거 하려면 교차표를 만들어야 해서 저 데이터프레임 만든겁니다. dof는 자유도인데 행-1 * 열-1 하면 됩니다. 3행 2열이면 자유도는 2*1 = 2나와요. 저기서 그러면 귀무가설이 기각되면 어떻게 해야 되느냐... 특정 브랜드의 선호도가 성별과 연관이 있다, 이렇게 해석하시면 되겠습니다.
동질성 검정
- 귀무가설: 두 집단의 분포가 동일하다.
- 대립가설: 두 집단의 분포가 동일하지 않다.
# 계산 방식은 독립성 검정과 동일하게 chi2_contingency를 사용합니다.
# 데이터: 서울(흡연 40, 비흡연 60) vs 부산(흡연 30, 비흡연 70)
city_data = [[40, 60], [30, 70]]
chi_stat, p_val, _, _ = chi2_contingency(city_data)
if p_val < 0.05:
print("귀무가설 기각: 두 집단의 분포가 동일하지 않다. ")
else:
print("귀무가설 수립: 두 집단의 분포가 동일하다. ")
항상 귀무가설은 이놈이나 저놈이나 또이또이여라고 보시면 됩니다.
# 계산 방식은 독립성 검정과 동일하게 chi2_contingency를 사용합니다.
# 집단 1과 집단 2의 성비
gender_ratio = [[93, 7], [70, 30]]
chi_stat, p_val, _, _ = chi2_contingency(gender_ratio)
if p_val < 0.05:
print("귀무가설 기각: 두 집단의 분포가 동일하지 않다. ")
else:
print("귀무가설 수립: 두 집단의 분포가 동일하다. ")
두 집단의 성비를 상정하고 만든 예. 이 예시에서는 두 집단의 성비가 다름을 통계적으로 증명했다.
'Statics' 카테고리의 다른 글
| 통계는 실전이야: 상관분석 (0) | 2026.02.04 |
|---|---|
| 통계는 실전이야: ANOVA(feat. Tukey HSD) (0) | 2026.02.03 |
| 정규성, 그리고 비모수검정 (0) | 2026.02.01 |
| 통계는 실전이야: t-test (0) | 2026.01.30 |
| PCA, MCA, FAMD (0) | 2026.01.29 |