이 글은 python
을 활용하여
t-test(Student's t-test)를 진행
하고자 할 때
따라야할 절차 및 관련 패키지 사용법 에 대하여
(제가 이해하기 쉽게)
나름대로 정리한 글입니다.
크기가 같은 두 표본의
모평균이 같은지 체크하기 위하여
t-test를 사용하기로 결심했다면
참고하셔도 됩니다.
반박 시 여러분이 무조건 맞습니다 ^^
- 전처리
- 정규성 검정 (Shapiro-Wilk test)
- 등분산성 검정 (KS test or Levene test)
- 앞의 결과에 따라 적절한 t-test 기법 시행
전처리를 안할 경우 2~3번 과정에서 오류가 발생하는 경우가 많았습니다.
자료 살펴보시고 이상한 값 있으면 빨리 빨리 제거 해주세요 ^^
# Shapiro-Wilk test 파이썬 코드
from scipy import stats
stats.shapiro(sample1)
stats.shapiro(sample2)
<결과해석>
Shapiro-Wilk test의 귀무가설
: 표본이 정규성을 만족하는 모집단에서 나왔다
p < 0.05
이면 귀무가설 기각 => 표본이 정규성을 만족하는 모집단에서 나왔다고 볼 수 없다.
p >= 0.05
이면 귀무가설 채택 => 표본이 정규성을 만족하는 모집단에서 나왔다고 볼 수 있다.
# 시각화 파이썬 코드
from scipy import stats
import seaborn as sns
sns.displot(sample1)
<결과해석>
그래프의 개형을 보고 정규성을 대략적으로 판단할 수 있다.
그래프가 가운데가 볼록한 종모양 이면 정규성을 띠는 것
# 시각화 파이썬 코드
from scipy import stats
import matplotlib.pyplot as plt
stats.probplot(sample1, plot=plt)
<결과해석>
그래프의 개형을 보고 정규성을 대략적으로 판단할 수 있다.
그래프가 빨간색 직선과 비슷하면 정규성을 띠는 것
표본 크기가 충분히 크면
(n>30)
정규성 검증을 생략할 수 있습니다.
# KS test 파이썬 코드
from scipy import stats
stats.ks_2samp(sample1, sample2)
<결과해석>
KS test의 귀무가설
: 두 그룹은 같은 분산을 가진 모집단에서 추출한 것이다.
p < 0.05
이면 귀무가설 기각 => 두 그룹이 같은 분산을 가진 모집단에서 추출한 것이라는 근거가 없다.
p >= 0.05
이면 귀무가설 채택 => 두 그룹은 같은 분산을 가진 모집단에서 추출한 것으로 볼 수 있다.
# KS test 파이썬 코드
from scipy import stats
stats.levene(sample1, sample2)
<결과해석>
Levene test의 귀무가설
: 두 그룹은 같은 분산을 가진 모집단에서 추출한 것이다.
p < 0.05
이면 귀무가설 기각 => 두 그룹이 같은 분산을 가진 모집단에서 추출한 것이라는 근거가 없다.
p >= 0.05
이면 귀무가설 채택 => 두 그룹은 같은 분산을 가진 모집단에서 추출한 것으로 볼 수 있다.
당연한 이야기 이지만
sample을 같은 모집단에서 추출하는 경우
등분산성 체크 하는 과정을 생략할 수 있습니다.
Mann-Whitney U test 진행
# Mann-Whitney U test 파이썬 코드
from scipy import stats
stats.mannwhitneyu(sample1, sample2)
<결과해석>
Mann-Whitney U test의 귀무가설
: 두 그룹은 같은 모평균을 가진다.
p < 0.05
이면 귀무가설 기각 => 두 그룹이 같은 모평균을 가지는 것으로 볼 수 없다.
p >= 0.05
이면 귀무가설 채택 => 두 그룹이 같은 모평균을 가지는 것으로 볼 수 있다.
Whelch's T-test 진행
# Whelch's T-test 파이썬 코드
from scipy import stats
stats.ttest_ind(sample1, sample2, equal_var=False)
<결과해석>
Whelch's t-test의 귀무가설
: 두 그룹은 같은 모평균을 가진다.
p < 0.05
이면 귀무가설 기각 => 두 그룹이 같은 모평균을 가지는 것으로 볼 수 없다.
p >= 0.05
이면 귀무가설 채택 => 두 그룹이 같은 모평균을 가지는 것으로 볼 수 있다.
Student's t-test 진행
# Student's t-test 파이썬 코드
from scipy import stats
stats.ttest_ind(sample1, sample2)
<결과해석>
t-test의 귀무가설
: 두 그룹은 같은 모평균을 가진다.
p < 0.05
이면 귀무가설 기각 => 두 그룹이 같은 모평균을 가지는 것으로 볼 수 없다.
p >= 0.05
이면 귀무가설 채택 => 두 그룹이 같은 모평균을 가지는 것으로 볼 수 있다.
# 패키지 import 하는 거 잊어버릴 수도 있으므로 불러올 때 한번에 불러오자!!
import pandas as pd # 판다스 패키지
from scipy import stats # 통계 관련 패키지
import matplotlib.pyplot as plt # 시각화 관련 패키지
import seaborn as sns # 시각화 관련 패키지
testArr = [i for i in range(1,101)] # 모집단
df = pd.DataFrame(testArr)
sample1 = df.sample(30)[0] # 포본1
sample2 = df.sample(30)[0] # 표본2
# 1. 정규성 검증
# Shapiro-Wilk test의 귀무가설: 표본이 정규성을 만족하는 모집단에서 나왔다
# p < 0.05 이므로 귀무가설 기각 => 표본이 정규성을 만족하는 모집단에서 나왔다고 볼 수 없다.
# p >= 0.05 이므로 귀무가설 채택 => 표본이 정규성을 만족하는 모집단에서 나왔다고 볼 수 있다.
stats.shapiro(sample1)
stats.shapiro(sample2)
# 1-2. 그래프를 통해 정규성 확인
import matplotlib.pyplot as plt # 시각화 관련 패키지
import seaborn as sns # 시각화 관련 패키지
# 그래프1
sns.displot(sample1)
# 그래프2
stats.probplot(sample1, plot=plt)
# 2. 등분산성 확인
# KS test의 귀무가설: 두 그룹은 같은 분산을 가진 모집단에서 추출한 것이다.
# p < 0.05 이므로 귀무가설 기각 => 두 그룹이 같은 분산을 가진 모집단에서 추출한 것이라는 근거가 없다.
# p >= 0.05 이므로 귀무가설 채택 => 두 그룹은 같은 분산을 가진 모집단에서 추출한 것으로 볼 수 있다.
stats.ks_2samp(sample1, sample2)
# 3-1 : 정규성 만족 안함
# Mann-Whitney U test의 귀무가설: 두 그룹은 같은 모평균을 가진다.
# p < 0.05 이므로 귀무가설 기각 => 두 그룹이 같은 모평균을 가지는 것으로 볼 수 없다.
# p >= 0.05 이므로 귀무가설 채택 => 두 그룹이 같은 모평균을 가지는 것으로 볼 수 있다.
stats.mannwhitneyu(sample1, sample2)
# 3-2 : 정규성 O , 등분산성 X
# Whelch's t-test의 귀무가설: 두 그룹은 같은 모평균을 가진다.
# p < 0.05 이므로 귀무가설 기각 => 두 그룹이 같은 모평균을 가지는 것으로 볼 수 없다.
# p >= 0.05 이므로 귀무가설 채택 => 두 그룹이 같은 모평균을 가지는 것으로 볼 수 있다.
stats.ttest_ind(sample1, sample2, equal_var=False)
# 3-3 : 정규성 O , 등분산성 O
# t-test의 귀무가설: 두 그룹은 같은 모평균을 가진다.
# p < 0.05 이므로 귀무가설 기각 => 두 그룹이 같은 모평균을 가지는 것으로 볼 수 없다.
# p >= 0.05 이므로 귀무가설 채택 => 두 그룹이 같은 모평균을 가지는 것으로 볼 수 있다.
stats.ttest_ind(sample1, sample2)