Chi-squared test

Seohyeon Park·2025년 5월 8일
0

Intro.

Chi-squared test는 관측된 빈도와 기대되는 빈도 간의 차이를 측정하여 두 변수 간의 독립성이나 분포의 적합성을 평가하는 통계적 방법이다. 이 검정은 주로 범주형 데이터에 적용되며, 관측된 데이터가 기대되는 분포와 얼마나 일치 하는지를 평가하는 방법이다.

Chi-squared test 가정.

  • 관측값은 독립적이어야 한다.
  • 관측 빈도는 실제 카운트 데이터여야 한다. → 비율이나 연속형 X
  • 기대 빈도는 각 셀마다 5 이상이어야 한다.
  • 표본은 무작위로 추출되어야 한다.

Chi-squared test 종류.

1. 적합도 검정 (Goodness-of-fit)

관측된 범주형 데이터 분포가 특정한 이론 분포를 따르는지 검정한다.

χ2=i=1k(OiEi)2Ei\chi^2=\sum^k_{i=1}\frac{(O_i-E_i)^2}{E_i}
  • OiO_i : 관측 빈도 (Observed frequency)
  • EiE_i : 기대 빈도 (Expected frequency)
  • kk : 범주 수
  • dfdf (자유도) = k1k-1
import scipy.stats as stats

# 예: 주사위를 60번 굴려 나온 숫자 빈도
observed = [10, 9, 11, 8, 12, 10]
expected = [10] * 6  # 균등하게 기대 (60/6)

chi2, p = stats.chisquare(f_obs=observed, f_exp=expected)
print(f"Chi2 Statistic: {chi2:.2f}, p-value: {p:.3f}")

# 해당 결과 p - value < 0.05 이면, 균등 분포라고 보기 어렵다.

2. 독립성 검정 (Test of Independence)

두 범주형 변수 간의 상관성과 독립성을 검정한다.

χ2=i=1rj=1c(OijEij)2Eij\chi^2=\sum^r_{i=1}\sum^c_{j=1}\frac{(O_{ij}-E_{ij})^2}{E_{ij}}
  • OijO_{ij} : 관측 빈도 (ii = row, jj = col)
  • Eij=(rowi  total  ×  colj  total)grand  totalE_{ij} = \frac{(row_i\;total \;\times \;col_j\;total)}{grand\;total}
  • dfdf (자유도) = (r1)×(c1)(r-1) \times(c-1)
import pandas as pd
import scipy.stats as stats

# 예: 성별과 구매여부 간 관계
data = pd.DataFrame({
    '구매': [30, 20],
    '비구매': [70, 80]
}, index=['남성', '여성'])

chi2, p, dof, expected = stats.chi2_contingency(data)
print(f"Chi2 Statistic: {chi2:.2f}, p-value: {p:.3f}")
print("Expected frequencies:\n", expected)

# 해당 결과 p - value < 0.05 이면, 성별과 구매 여부는 독립이 아니다. (상관관계 없음)
profile
카페에서 한줄 한줄

0개의 댓글