본문 바로가기
Data Analysis/Scipy

4. [Python] Chi-Square test

by 베짱이28호 2022. 10. 8.

4. [Python] Chi-Square test

 


1. 카이제곱 검정

  • 적합도 검정 : 특정 범주형 데이터가 예상한 분포에 맞는지 확인하는 데 사용.
  • 독립성 검정 : 두 범주형 변수 간에 독립적인 관계가 있는지 확인하는 데 사용됩니다.
  • 가정
    • 독립성 : 각 관찰값은 서로 독립적이어야 함
    • 기대빈도 : 각 셀의 기대빈도는 5 이상이어야 함
    • 무작위 표본 : 표본은 모집단에서 무작위로 추출되어야 함

2. 독립성 검정

  1. 카이제곱 독립성 검정은 두 범주형 변수가 서로 독립적인지 아니면 관련이 있는지 확인하는 통계적 검정
  2. 카이제곱 독립성 검정의 핵심은 관찰된 빈도와 기대 빈도의 차이를 계산
  3. chi square = sigma (O-E)^2/E (관찰빈도 observed, 기대빈도 expected)
    • 카이제곱 값이 클수록 빈도 차이가 크다 -> 대립 가설 채택 가능성 증가
    • 관찰 빈도는 관찰한 값으로 표를 그린다.
    • 기대 빈도는 행 합계 / 열 합계를 그려놓고, 셀 위치마다 (Rsum*Csum/전체)
  4. 가설 설정
    • 귀무가설(H₀): 두 변수는 독립적이다. 즉, 한 변수가 다른 변수에 영향을 미치지 않는다.
    • 대립가설(H₁): 두 변수는 독립적이지 않다. 즉, 한 변수가 다른 변수에 영향을 미친다.
관찰 (기대) 이온음료 탄산음료 행 합계
요가 50 (100*100/300) 30 (120*100/300) 20 (80*100/300) 100
조깅 30 (100*100/300) 50 (120*100/300) 20 (80*100/300) 100
웨이트 20 (100*100/300) 40 (120*100/300) 40 (80*100/300) 100
열 합계 100 120 80 300

 

1. Scipy 코드

import numpy as np
import scipy.stats as stats

# 데이터 배열: 운동 유형과 음료 선호도 관계
data = np.array([[50, 30, 20],  # 요가
                 [30, 50, 20],  # 조깅
                 [20, 40, 40]]) # 웨이트 트레이닝

# 카이제곱 독립성 검정 수행
chi2, p, dof, expected = stats.chi2_contingency(data)

# 결과 출력
print(f"Chi2 Statistic: {chi2:.2f}")
print(f"p-value: {p:.4f}")
print(f"Degrees of Freedom: {dof}")
print(f"Expected Frequencies: \n{expected}")

# p-value 해석
if p < 0.05:
    print("귀무가설을 기각합니다. 운동 유형과 음료 선호도는 독립적이지 않습니다.")
else:
    print("귀무가설을 기각할 수 없습니다. 운동 유형과 음료 선호도는 독립적입니다.")

Chi2 Statistic: 29.00
p-value: 0.0000
Degrees of Freedom: 4
Expected Frequencies: 
[[33.33333333 40.         26.66666667]
 [33.33333333 40.         26.66666667]
 [33.33333333 40.         26.66666667]]
귀무가설을 기각합니다. 운동 유형과 음료 선호도는 독립적이지 않습니다.
  • 인과 관계는 없는거라, 두 범주간 독립성만 체크한다.

3. 적합도 검정

  1. 적합도 검정은 관찰된 데이터 분포가 특정 이론적 분포(기대값)에 얼마나 잘 맞는지를 확인하는 통계적 방법.
  2. 분포가 주어지는 경우에 사용한다. (정규, 균등분포 등..)
  3. 관찰된 데이터가 특정 분포(예: 균등 분포, 정규 분포 등)와 얼마나 유사한지를 확인.
  4. 가설 설정
    • 귀무가설(H₀): 관찰된 데이터가 기대되는 분포와 일치한다.
    • 대립가설(H₁): 관찰된 데이터가 기대되는 분포와 다르다.

1. Scipy 코드

from scipy.stats import chisquare

# 관찰된 값 (Observed)
observed = [8, 12, 10, 15, 9, 6]

# 기대 값 (Expected)
expected = [10, 10, 10, 10, 10, 10]

# 카이제곱 검정 수행
chi2, p = chisquare(f_obs=observed, f_exp=expected)

print(f"Chi-square value: {chi2}")
print(f"P-value: {p}")

Chi-square value: 5.0
P-value: 0.41588018699550794
  • p val이 0.05보다 크거나 같으므로 각 주사위가 나올 확률이 동일하다고 주장할 수 있다.

'Data Analysis > Scipy' 카테고리의 다른 글

3. [Python] Time Series Decomposition  (0) 2022.10.02
2. [Python] ANOVA  (0) 2022.09.25
1. [Python] T-test  (0) 2022.08.29

댓글