4. [Python] Chi-Square test
1. 카이제곱 검정
- 적합도 검정 : 특정 범주형 데이터가 예상한 분포에 맞는지 확인하는 데 사용.
- 독립성 검정 : 두 범주형 변수 간에 독립적인 관계가 있는지 확인하는 데 사용됩니다.
- 가정
- 독립성 : 각 관찰값은 서로 독립적이어야 함
- 기대빈도 : 각 셀의 기대빈도는 5 이상이어야 함
- 무작위 표본 : 표본은 모집단에서 무작위로 추출되어야 함
2. 독립성 검정
- 카이제곱 독립성 검정은 두 범주형 변수가 서로 독립적인지 아니면 관련이 있는지 확인하는 통계적 검정
- 카이제곱 독립성 검정의 핵심은 관찰된 빈도와 기대 빈도의 차이를 계산
- chi square = sigma (O-E)^2/E (관찰빈도 observed, 기대빈도 expected)
- 카이제곱 값이 클수록 빈도 차이가 크다 -> 대립 가설 채택 가능성 증가
- 관찰 빈도는 관찰한 값으로 표를 그린다.
- 기대 빈도는 행 합계 / 열 합계를 그려놓고, 셀 위치마다 (Rsum*Csum/전체)
- 가설 설정
- 귀무가설(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. 적합도 검정
- 적합도 검정은 관찰된 데이터 분포가 특정 이론적 분포(기대값)에 얼마나 잘 맞는지를 확인하는 통계적 방법.
- 분포가 주어지는 경우에 사용한다. (정규, 균등분포 등..)
- 관찰된 데이터가 특정 분포(예: 균등 분포, 정규 분포 등)와 얼마나 유사한지를 확인.
- 가설 설정
- 귀무가설(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 |
댓글