이전글에서 일표본 t-검정에 해당하는 파이썬 구현방법과 대응하는 비모수 검정 방법을 알아보았습니다.
이번 글에서는 독립표본 T-검정( independent t-test )과 이에 대응하는 만-휘트니U검정인 비모수 검정에 대해서 알아보도록 하겠습니다.
1. 독립표본 T-검정( independent t-test )
독립표본 T-검정은 2표본 T-검정이라고도 불립니다.
독립표본 T-검정이란 두 집단 간 평균치의 차이를 비교하는 통계 검정 방법입니다.
이 검정의 가설 설정은 아래와 같습니다.
귀무가설(H0) : "집단A와 집단B의 평균이 동일하다."
대립가설(H1) : "집단A와 집단B의 평균이 동일하지않다."
독립표본 T-검정( independent t-test )을 수행하기 위해서는 3가지 조건이 충족 되어야 합니다.
전제 조건
- 두 집단의 데이터는 정규분포를 따라야한다.(정규성을 만족해야 한다.)
- 두 집단의 분산이 동일해야한다. (등분산성을 만족해야한다.)
- 두 집단의 데이터가 독립이어야 한다.(독립성을 만족해야한다.)
- 연속형 데이터여야 한다.
- 연속형 데이터에 대해서만 수행할 수 있습니다.
위의 조건이 충족 되지 않은 경우 다른 검정 방법을 사용해야합니다.
Python 독립표본 T-검정
Python에서 독립표본 T-검정을 시행하기 위해서는 scipy 라이브러리 stats 모듈의 ttest_ind함수를 사용할 수 있습니다.
ttest_ind함수의 매개변수는 아래와 같습니다.
scipy.stats.ttest_ind(a, b, axis=0, equal_var=True, nan_policy='propagate', permutations=None, random_state=None, alternative='two-sided', trim=0, *, keepdims=False)
- a,b : 두개의 독립적인 표본집단을 의미합니다.(집단의 데이터는 연속형이어야 합니다.)
- equal_var : 분산이 동일한지에 대한 가정, 분산이 동일하다면 True 아니면 False
- nan_policy : 입력 NaN을 처리하는 방법을 정의합니다.
- propagate: 통계가 계산되는 축 슬라이스(예: 행)에 NaN이 있는 경우 출력의 해당 항목은 NaN이 됩니다.
- omit: 계산을 수행할 때 NaN은 생략됩니다. 통계가 계산되는 축 조각에 데이터가 충분하지 않은 경우 출력의 해당 항목은 NaN이 됩니다.
- raise: NaN이 있으면 a가 ValueError발생합니다.
- alternative : 대립 가설을 정의합니다. 다음 옵션을 사용할 수 있습니다(기본값은 'two-sided'):
- two-sided : 표본의 기본 분포 평균이 동일하지 않습니다.
- less : 첫 번째 표본의 기본 분포 평균이 두 번째 표본의 기본 분포 평균보다 작습니다.
- greater : 첫 번째 표본의 기본 분포 평균이 두 번째 표본의 기본 분포 평균보다 큽니다.
구현
우선 데이터를 불러옵니다.
import pandas as pd
import matplotlib.pyplot as plt
df1 = pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/scipy/ind1.csv')
df2 = pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/scipy/ind2.csv')
정규성 검정과 등분산 검정을 실시한다.
from scipy.stats import shapiro
from scipy.stats import bartlett
# 정규성 검정
print(shapiro(df1))
print(shapiro(df2))
# ShapiroResult(statistic=0.9860946536064148, pvalue=0.379673033952713)
# ShapiroResult(statistic=0.990182638168335, pvalue=0.6793646216392517)
# 등분산성 검정
print(bartlett(df1['data'],df2['data']))
# BartlettResult(statistic=4.170597307474754, pvalue=0.04113129672708929)
정규성을 만족하기 때문에 bartlett을 통해 등분산 검정을 실행합니다.
결과 정규성과 등분산성을 모두 만족하기 때문에 독립표본 t검정(=이표본 t검정)을 실행합니다.
from scipy.stats import ttest_ind
print(ttest_ind(df1,df2,equal_var=True))
# TtestResult(statistic=array([2.76719074]), pvalue=array([0.00619015]), df=array([198.]))
분산이 동일하기 때문에 equal_var의 값을 True로 설정해줍니다.
결과 해석
pvalue의 결과 0.006으로 0.01보다 작은 값이므로 유의수준 1%하에서도 두집의단의 평균은 동일하지 않다는 대립가설을 채택 할수 있습니다.
즉, "두집단의 평균은 유의한 차이를 보이지 않는다"
2. 대응하는 비모수 검정
독립표본 t-검정의 전제조건이 충족 되지 않을때 비모수 검정을 통해 두 집단간의 중앙값을 비교합니다.
만-휘트니U검정
두 독립표본 간의 중앙값 차이를 검증하는 비모수 검정입니다.
특징
- 두 집단은 독립성을 가져야한다.
- 정규성을 만족하지 않아도 된다.
- 연속형 변수 혹은 순서형변수.(범주형 변수에는 적용하지 못합니다.)
- 중앙값의 차이를 비교한다.
- 결측값이 존재해선 안된다.
가설
만-휘트니U검정의 가설은 아래와 같습니다.
귀무가설(H0) : "집단A와 집단B의 중앙값이 동일하다."
대립가설(H1) : "집단A와 집단B의 중앙값이 동일하지않다."
Python
파이썬에서 만-휘트니U검정을 시행하기 위해서 scipy 라이브러리 stats묘듈의 mannwhitneyu함수를 통해 구현할 수 있습니다.
데이터를 불러옵니다.
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/scipy/scipy5.csv')
해당 데이터에는 결측값이 존재하기 때문에 결측값을 제거한 후 진행해야 합니다.
from scipy.stats import shapiro
print(shapiro(df['B'].dropna()))
print(shapiro(df['A']))
# ShapiroResult(statistic=0.9639433026313782, pvalue=0.00013568344002123922)
# ShapiroResult(statistic=0.93753981590271, pvalue=6.175894240456614e-10)
결측값을 제거한 후 정규성 검정을 한 결과 두 그룹 모두 정규성을 가지지 않기 때문에 만-휘트니U검정을 실행합니다.
* 두 집단중 한 집단이라도 정규성을 만족하지 못하는 경우 독립 표본 t검정을실행 할 수 없습니다.
from scipy.stats import mannwhitneyu
print(mannwhitneyu(df['A'],df['B'].dropna()))
# MannwhitneyuResult(statistic=27036.0, pvalue=0.9807458376150018)
결과해석
만-휘트니 U검정을 실행한 결과 pvalue값이 0.98로 귀무 가설을 채택하는 결과가 나왔습니다.
즉, "두집단 간의 중앙값에는 유의한 차이가 없다" 입니다.
'통계 분석' 카테고리의 다른 글
[Python] 카이제곱 독립성 검정 (3) | 2023.11.25 |
---|---|
[Python] T-검정의 종류와 구현3(대응하는 비모수 검정) (0) | 2023.11.18 |
[Python] 등분산 검정 (0) | 2023.11.09 |
[Python] 일표본 t-검정(대응하는 비모수 검정) (6) | 2023.11.08 |
[기초 통계] 신뢰수준, 신뢰구간, 유의확률(P-value), 유의수준 (1) | 2023.10.31 |