728x90
반응형
등분산검정(Equal-variance test)은 두 정규성을 만족하는 데이터에서 생성된 두 개의 데이터 집합으로부터 두 정규분포의 모분산이 같은지 확인하기 위한 검정이다. 바틀렛(bartlett), 플리그너(fligner), 레빈(levene) 검정을 주로 사용한다.
이는 scipy의 stats에서 이를 위한 bartlett, fligner, levene 명령을 제공한다.
참고)
등분산성을 검정하는 대표적인 이유로는 T-test 가정이 있다. (등분산성, 정규성, 독립성을 충족하는 데이터에 대한 평균 차이 유의성 검정)
# 라이브러리 호출
import numpy as np
import scipy as sp
import matplotlib.pyplot as plt
# Mac OS에서 한글 폰트 출력을 위한 코드
from matplotlib import rc
rc('font', family='AppleGothic')
plt.rcParams['axes.unicode_minus'] = False
# 이분산을 가지는 두 데이터 조건 형성
# 데이터 개수 100개, 분산 1, 2으로 분리함
N1 = 100
N2 = 100
sigma_1 = 1
sigma_2 = 2
mu = 0
# 데이터 형성
np.random.seed(0)
x1 = sp.stats.norm(mu, sigma_1).rvs(N1)
x2 = sp.stats.norm(mu, sigma_2).rvs(N2)
# 시각화
ax = sns.distplot(x1, kde=False, fit=sp.stats.norm, label=f"1번 데이터 집합 (분산 :{np.round(x1.std(),2)})")
ax = sns.distplot(x2, kde=False, fit=sp.stats.norm, label=f"2번 데이터 집합 (분산 :{np.round(x2.std(),2)})")
ax.lines[0].set_linestyle(":")
plt.legend(bbox_to_anchor=(1.0, .2))
plt.show()
출력 결과
Bartlett - Test
- 귀무가설
데이터의 모분산이 일치한다고 통계적으로 유의하게 말 할 수 있다. (등분산 충족한다)
- 특징
정규성을 충족하는 데이터에 대해서 시행하게 되는 등분산 검정으로 2개 이상의 집단에서도 활용가능하다. (데이터 수가 달라도 가능)
정규성을 충족하지 않는 비모수 데이터에 대해서는 levene 검정이 더 강건한 결과를 도출할 수 있다.
from scipy.stats import bartlett
bartlett(x1, x2)
출력 결과
BartlettResult(statistic=47.10357729557938, pvalue=6.733268261181105e-12)
Bartlett 검정 결과, P 값이 매우 낮으므로 두 데이터의 등분산성을 유의하게 기각하고 이분산성이라는 대립가설을 체택한다.
Levene - Test
- 귀무가설
등분산성을 충족한다.
- 특징
정규성을 충족하지 않는 비모수 데이터에 대해 유용하게 사용할 수 있다. (편차 정의시 중앙을 median으로 설정 가능)
2개 이상의 집단에서 활용가능하다.
# 라이브러리 호출
import numpy as np
import scipy as sp
from matplotlib import rc
import matplotlib.pyplot as plt
rc('font', family='AppleGothic')
plt.rcParams['axes.unicode_minus'] = False
# 데이터 불러오기 및 더미화
import seaborn as sns
iris = sns.load_dataset("iris")
data = pd.get_dummies(iris)
x1 = data.loc[data['species_setosa']==1]
x2 = data.loc[data['species_versicolor']==1]
x3 = data.loc[data['species_virginica']==1]
# 시각화
ax = sns.distplot(x1['sepal_length'], kde=False, fit=sp.stats.norm, label=f"setosa 데이터 집합 (분산 :{np.round(x1['sepal_length'].std(),2)})")
ax = sns.distplot(x2['sepal_length'], kde=False, fit=sp.stats.norm, label=f"versicolor 데이터 집합 (분산 :{np.round(x2['sepal_length'].std(),2)})")
ax = sns.distplot(x3['sepal_length'], kde=False, fit=sp.stats.norm, label=f"virginica 데이터 집합 (분산 :{np.round(x3['sepal_length'].std(),2)})")
ax.lines[0].set_linestyle(":")
ax.lines[1].set_linestyle('--')
plt.legend(bbox_to_anchor=(1.0, .2))
plt.show()
출력 결과
from scipy.stats import levene
# 데이터의 중앙을 median, mean, trimmed로 설정할 수 있음 (비모수에서는 median이 더 강건)
# 기본 값은 median으로 설정되어 있음
levene(x1['sepal_length'],
x2['sepal_length'],
x3['sepal_length'], center = 'median')
출력 결과
LeveneResult(statistic=6.35272002048269, pvalue=0.0022585277836218586)
Levene 검정 결과 1%의 유의수준으로도 위 3개의 데이터가 등분산성이라는 귀무가설을 기각할 수 있고 이분산성을 따른다는 대립가설을 채택할 수 있다.
물론, iris data의 각 값이 정규성을 충족하지 않는 비모수데이터는 아님.
(그저 다양한 데이터를 보여주기 위한 것으로 해당 데이터를 사용하였음)
참고)
from scipy.stats import levene
print(levene(x1['sepal_length'],
x2['sepal_length'],
x3['sepal_length'], center = 'mean'))
print(levene(x1['sepal_length'],
x2['sepal_length'],
x3['sepal_length'], center = 'trimmed', proportiontocut=0.05))
>>>
LeveneResult(statistic=7.381091747801267, pvalue=0.0008817887814641548)
LeveneResult(statistic=7.772924491977088, pvalue=0.0006380965177610735)
Fligner - Test
- 귀무가설
등분산성을 충족한다.
- 특징
정규성을 충족하지 않는 비모수 데이터에 대해 유용하게 사용할 수 있다. (편차 정의시 중앙을 median으로 설정 가능)
2개 이상의 집단에서 활용가능하다.
Levene와 동일하나, 비모수 데이터에 더 강건하게 검정할 수 있는 방법이다.
from scipy.stats import fligner
print(fligner(x1['sepal_length'],
x2['sepal_length'],
x3['sepal_length'], center = 'median'))
print(fligner(x1['sepal_length'],
x2['sepal_length'],
x3['sepal_length'], center = 'mean'))
print(fligner(x1['sepal_length'],
x2['sepal_length'],
x3['sepal_length'], center = 'trimmed', proportiontocut=0.05))
출력 결과
FlignerResult(statistic=11.617980621101292, pvalue=0.0030004580742585885)
FlignerResult(statistic=13.256130318912954, pvalue=0.001322719863764386)
FlignerResult(statistic=13.193438547424174, pvalue=0.0013648383616752843)
Fligner 검정 결과, P 값이 모두 1%의 유의수준을 충분히 충족하기에 등분산을 따른다는 귀무가설을 기각할 수 있다
728x90
'공부 > 통계학' 카테고리의 다른 글
비모수 검정 : Mann-Witney U-test (만 - 위트니 U 검정, python) (0) | 2022.01.11 |
---|---|
웰치의 t 검정 : welch's t test (파이썬) (2) | 2022.01.11 |
정규성 검정 (Python) (0) | 2022.01.11 |
Chi-square-test (카이제곱검정) (0) | 2021.11.18 |
T-test (T 검정) (0) | 2021.11.17 |
댓글