본문 바로가기
AI SCHOOL/TIL

[DAY 36] 효과 크기, 대응표본 t-검정, 분산 분석, 카이제곱 검정, 맥니마 검정

2023. 2. 15.

신뢰구간, 귀무가설, 유의수준, p-value 등 통계적 가설 검정에 대한 문제를 풀었다.

이후 집단 비교에 대해 학습하며 효과 크기, 여러 검정 방법을 익혔다.

검정력(power)

유의수준(α) : 귀무가설이 참일 때 기각하는 1종 오류의 확률
β : 귀무가설이 거짓일 때, 기각하지 못하는 2종 오류의 확률
검정력(1-β) : 귀무가설이 거짓일 때, 이를 올바르게 기각할 확률
- 보통 검정력은 0.8 이상을 요구
- 표본의 크기가 크면 증가
- 분석 결과에 나오는 검정력은 모수가 통계량과 같다는 가정 아래 계산된다.

맨-휘트니 U 검정(Mann-Whitney U test)

독립표본 t 검정에 대응하는 비모수 검정 방법
귀무가설 : 두 집단의 모집단은 같다.
윌콕슨 순위합 검정(Wilcoxon rank-sum test)이라는 방법과 동일하다.

Python을 이용한 실습

import pingouin as pg
import pandas as pd

 

# 자동차 데이터
df = pd.read_excel('car.xlsx')

# Avante 가격, K3 가격
avante = df.loc[df.model == 'Avante', 'price'] 
k3 = df.loc[df.model == 'K3', 'price']

# Mann-Whitney U test
pg.mwu(avante, k3)

Mann-Whitney U test 결과를 보자.

mwu

p 값이 0.05보다 작으므로 귀무가설을 기각한다 => 두 집단의 모집단은 다르다

효과 크기(effect size)

관찰된 현상의 크기를 나타내는 방법
1. 분산을 이용하는 방법
2. 평균의 차이를 이용하는 방법

에타 제곱 η2 (eta squared)
분산을 이용한 효과 크기 표현 방법

eta

- 전체 SS = (X - 전체평균)**2의 합계
- 처치 SS = (집단평균 - 전체평균)**2의 합계
- SS : 편차제곱합(Sum of Squares)
- 전체 분산 제곱 대비 집단간 분산 제곱

에타 제곱 = 1
- 집단 간 차이만 있고 집단 내 차이는 없다.
- 실험 조건에 따라 모든 것이 달라진다.
- 실험 조건이 같으면 결과도 같다.
예시 : 대조군 데이터는 1, 1, 1이고, 실험군 데이터는 3, 3, 3인 경우

에타 제곱 = 0
- 집단 간 차이는 없고 집단 내 차이만 있다.
- 실험 조건에 따라 아무 것도 달라지지 않는다.
- 같은 실험 조건에도 서로 다르다
예시 : 대조군 데이터는 1, 2, 3이고, 실험군 데이터도 1, 2, 3인 경우

코헨의 d(Cohen's d)
두 집단의 평균 차이를 데이터의 표준편차로 나눈 것

평균 차이의 크기를 알기 쉽게 나타낸 것

대응표본 t-검정

대응표본(paired samples)
대응표본 : 두 집단의 자료를 쌍으로 묶을 수 있는 경우
- 예시 : 남편과 아내, 쌍둥이, before & after
- 두 집단의 자료를 쌍으로 묶어야 하기 때문에, 독립 표본과는 달리 두 집단의 자료 개수가 같아야한다.
- 독립표본 t-검정 : 평균의 차이를 비교
- 대응표본 t-검정 : 차이의 평균을 비교

윌콕슨 부호순위 검정(Wilcoxon signed rank test)
- 대응표본 t 검정에 대응하는 비모수 검정
- 귀무가설 : 두 집단의 차이의 중앙값은 0이다
- 일표본 윌콕슨 부호순위 검정과 같음(순위합 검정과는 다르다)

분산 분석

분산 분석(Analysis of Variance)
- 집단 간 차이가 크다면 집단 내 분산에 비해 집단 간 분산이 커질 것
- 모집단이 정규분포를 따르거나, 각 집단의 표본 크기가 충분히 크면 집단간 분산/집단 내 분산의 비율은 F 분포를 따른다.
- 이를 통해 "모든 집단들의 평균이 같다"는 귀무가설을 검정할 수 있다.
- 귀무가설을 기각할 경우 "적어도 한 집단의 평균은 다르다"라는 대립가설을 채택한다.

등분산성(homoscedasticity)
- 분산분석은 집단간 분산이 같아야한다.
- 등분산성은 Levene 검정으로 확인할 수 있다.
  - 귀무가설 : 집단간 분산이 같다.
  - p 값이 유의수준보다 작다면 귀무가설을 기각한다 => 집단간 분산이 다르다
- 집단간 분산이 다를 경우(이분산일 경우) 별도의 보정이 필요하다

집단이 2개일 때는 t-검정의 p-value와 분산분석의 p-value가 같다
=> 분산분석을 해도 무방하지만 할 필요가 없다.

다중 비교(multiple comparison)
- 분산 분석은 한 번에 여러 집단을 비교할 수 있다.
- 독립표본 t-검정은 한 번에 두 집단만 비교 가능
- 집단이 여러 개 있을 경우 독립표본 t-검정은 집단 간의 모든 짝을 비교해야한다.
- 집단이 k개일 경우 필요한 비교 횟수 : k(k-1)/2

FWER(Familywise Error Rate)
- 다중 비교를 할 경우 적어도 한 번 1종 오류가 발생할 확률
- 세 집단이 모집단에서 평균이 모두 같은 경우 유의수준 5%인 비교를 3번해서, 3번 모두 1종 오류를 피할 확률(독립적이라고 가정할 경우): 95% * 95% * 95% ≈ 86%
- 바꿔 말하면 적어도 한 번 1종 오류가 발생할 확률(FWER)은 14%
- 비교를 많이 할 수록 FWER은 증가한다. 10번한다면 약 40%

사후 검정(post hoc test)
- FWER을 통제하기 위해 분산 분석을 먼저 실시
- 분산 분석 결과가 통계적으로 유의하면(p < α) 사후 검정을 실시
- 여러 집단 중 통계적으로 유의한 차이가 나는 집단을 식별
- 사후 검정에서도 유의수준(α)을 조절하여 FWER이 커지지 않도록 제어
- 각 집단의 분산이 같은 경우: Tukey HSD
- 각 집단의 분산이 다른 경우: Games-Howell 검정

Python을 이용한 분산분석 실습
census.xlsx에서 race에 따라 education_num에 차이가 있는지 분석

df_cs = pd.read_excel('census.xlsx')
# race의 개수
df_cs['race'].nunique()

# 실행 결과
5

개수가 5개 => 분산분석을 사용해야한다.

pg.homoscedasticity(dv='education_num', group='race', data=df_cs)

 

hoscedas

equal_var이 False : 이분산성을 의미

이분산일 경우 분산분석 : welch_anova test
웰치의 분산분석을 통해 이분산성을 보정한다.

pg.welch_anova(dv='education_num', between='race', data=df_cs)

welch

분산분석의 p-value = 5.587944e-71
따라서 귀무가설을 기각하고 어떤 집단의 평균이 다르다는 결론을 낼 수 있다.

각 집단의 분산이 다른 경우 사후 검정 : Games-Howell

pg.pairwise_gameshowell(dv='education_num', between='race', data=df_cs)

총 5개의 집단이므로 5 * 4 / 2 = 10회 비교가 이루어진다.

howell

각 집단별로 어떤 집단과 통계적으로 유의한 차이가 있는지 p-value를 통해 확인할 수 있다.
예시로 Amer-Indian-Eskimo와 통계적으로 유의한 차이가 있는 집단은 Asian-Pac-Islander와 White다.

카이제곱 검정

카이제곱 분포(chi-squared distribution)
χ2 분포(χ는 그리스 문자 카이)
값들을 더하면 정규분포로 근사하고, 제곱해서 더하면 카이제곱분포로 근사한다.

chisquared

O : 관찰빈도
E : 기대빈도

카이제곱 적합도 검증(chi-square test for goodness of fit)
- 표본에서 얻은 분포가 귀무가설에서 가정하는 모집단 분포와 잘 맞는지(goodness-of-fit)를 알아보기 위해 사용
- 귀무가설 : 모집단에서 비율은 기대빈도의 비율과 같다.
- 예시 : 브랜드 선호도
1. 50명을 대상으로 설문했을 때, A브랜드를 선호하는 고객은 31명(62%), B브랜드를 선호하는 고객은 19명(38%)라면 A브랜드에 대한 선호도가 통계적으로 유의하게 높은가?
2. 100명을 대상으로 설문했을 때, A브랜드를 선호하는 고객은 62명(62%), B브랜드를 선호하는 고객은 38명(38%)라면 A브랜드에 대한 선호도가 통계적으로 유의하게 높은가?

이 두 예시는 설문 대상의 수에 차이가 있으며 선호율은 동일하다.

Python을 통해 카이제곱 적합도 검증을 해보자.
먼저 50명 대상 선호도

from scipy.stats import chisquare
chisquare([31, 19], [25, 25])

귀무가설 : 모집단에서 두 브랜드의 선호도는 50%:50%으로 같다.
  - 관찰빈도[31, 19], 기대빈도[25, 25] 순으로 입력했다.
  - 결과는 카이제곱값, p-value
결과 : Power_divergenceResult(statistic=2.88, pvalue=0.08968602177036435)
p > 0.05 이므로 귀무가설을 기각할 수 없다. 결론을 유보한다.

100명 대상 선호도

# 귀무가설 : 두 브랜드 차이가 없을 것이다 (50:50일 것이다)
chisquare([62, 38], [50, 50])

결과 : Power_divergenceResult(statistic=5.76, pvalue=0.01639507184919225)
p < 0.05이므로 귀무가설을 기각한다 (브랜드 선호도에 차이가 있다)

=> 같은 비율임에도 표본 크기의 차이에 따라 결과가 달라졌다.

카이제곱 독립성 검증(chi-square test for independence)
- 카이제곱 독립성 검증은 두 범주 변수 간에 관계가 있는지 알아보기 위해 사용한다
- 귀무가설: 두 변수가 독립적이다(=관계가 없다)
- 예시:
  - 남녀 간의 브랜드 선호도 차이
  - 지역 별 정당 지지율 차이
  - 혈액형과 성격유형의 관계
- 데이터가 적으면 p-value가 부정확할 수 있다.
  - 모든 기대빈도가 5 혹은 그 이상이어야 한다.
- Cramér's V : 두 변수의 관계를 0~1로 표시
  - 0 : 전혀 관련이 없다
  - 1 : 완전히 일치한다

분할표(contingency table)
- 행과 열이 서로 다른 범주형 변수의 값을 나타내는 표.
- 표의 각 칸에는 사례 수를 표기
- 교차표, 피봇표라고도 한다.

맥니마 검정(McNemar test)

맥니마 검정
- 대응표본(paired sample)일 경우
  - 예시 : 동일한 사람들을 대상으로 처치를 한 후, 처치 전 vs. 처치 후를 비교
- 귀무가설: 전후 차이가 없다
  - 예시 : 총 100명의 고객을 대상으로 시승 행사를 하고, 행사 전후 브랜드에 대한 호불호 변화(50 vs. 50 → 60 vs. 40)으로 "호"가 많아졌다

hobulho

Python을 이용한 맥니마 검정
from statsmodels.stats.contingency_tables import mcnemar 
table = [[40,10],[20,30]]
m = mcnemar(table, exact=False, correction=False)
print(m)

# 실행 결과
pvalue      0.06788915486182893
statistic   3.3333333333333335​

p > 0.05 이므로 귀무가설을 기각하지 못한다 => 결론을 유보한다

반응형

댓글