[Python] 등분산 검정
1. 등분산이란?
등분산을 알기 위해서는 분산이란 무엇인지 알아야 합니다.
분산이란 간단하게 Data들이 퍼져있는 정도를 나타냅니다.
그렇다면 등분산이란 2개의 모집단에서 추출된 각 표본 간의 분산이 같음을 뜻합니다.
2. 등분산 검정의 목적
- 비교하는 집단과 동일한 집단인지 아닌지를 판단하기 위함
- 통계분석의 전제조건 확인
- 독립표본 t-검정(Independent Samples t-test)
- 분산분석(ANOVA)
- 일원 분산 분석
- 이원 분산 분석
- 공분산분석
3. 등분산검정 기법
가. F-검정(F-test)
두개의 표본에서 분산의 비율을 계산하여 F 분포에 따라 검정을 진행합니다.
F-검정은 두 표본만을 비교할때 사용하며, 두 표본 모두 정규 분포를 따르며 이상치가 없는 경우에 적합합니다.
해당 조건을 따르지 않는 경우 F-검정의 결과를 신뢰하기 어렵습니다.
나. Levene검정
각 표본에서의 절대 편차의 분산을 비교하여 등분산성을 검정합니다.
두 개이상의 표본을 비교할때 사용하며, 표본이 정규분포를 따르지 않거나 이상치가 있을때도 사용할 수 있고
F-검정보다 데이터 형태에 덜 민감합니다.
다. Bartlett 검정
두 개이상의 표본을 비교할때 사용하며, 정규성 가정을 필요로 하며 이 가정을 충족하지 못하면 결과를 신뢰하기 어렵습니다.
라. Brown-Forsythe 검정
두개 이상의 표본을 비교하며, 표본이 정규 분포를 따르지 않거나 이상치가 있을때 사용하는것이 적합한 검정입니다.
이 검정은 비정규 데이터에 대해서도 적용할 수 있습니다.
4. Python에서 등분산 검정
우선 등분산 검정의 가설을 다음과 같습니다.
귀무가설(H0) : "두 표본의 분산은 동일하다."
대립가설(H1) : "두 표본의 분산은 동일하지않다."
데이터를 불러옵니다.
import pandas as pd
df = pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/scipy/scipy3.csv')
df.head()

A class집단과 B class 집단의 등분산을 비교하기 위해 A집단과 B집단으로 분리하여줍니다.
a = df[df['class'] =='A'].score
b = df[df['class'] =='B'].score
그리고 이 두집단의 Data에 대해 등분산 검정을 시행해줍니다.
from scipy.stats import bartlett
from scipy.stats import levene
print(bartlett(a,b))
print(levene(a,b,center='mean'))
# BartlettResult(statistic=1.5116783794562305, pvalue=0.2188831590902503)
# LeveneResult(statistic=4.342327020297874, pvalue=0.03770665288742481)
결과는 Levene 검정결과 pvalue의 값이 0.03으로 0.05보다 낮기 때문에 분산이 동일하다고 볼 수 있습니다.
하지만 Bartlett 검정 결과 pvalue의 값이 0.21로 0.05보다 높게 나타난것을 확인할 수 있습니다.
이는 Bartlett 검정이 위에서 알려드린 대로 정규성을 만족해야 신뢰할수 있는 결과를 얻을수 있기 때문입니다.
A,B 두 집단의 정규성 검정을 시행한 결과는 아래와 같습니다.
from scipy.stats import shapiro
print(shapiro(a))
print(shapiro(b))
# ShapiroResult(statistic=0.9444763660430908, pvalue=3.3300091573096324e-09)
# ShapiroResult(statistic=0.9614471197128296, pvalue=7.400245522148907e-05)
정규성 검정결과 두집단 모두 0.05보다 매우 작은 값이 나타났기 때문에 귀무가설을 기각하고
대립가설을 채택해 정규성을 만족 할수 없다는 것을 알수 있습니다.
따라서 Bartlett검정의 전제조건을 만족하지 못하였고 검정결과를 신뢰할 수 없어 Bartlett 검정의 pvalue의 값은
정확하지 않다는 것을알 수 있습니다.