들어가며


이 글은 python을 활용하여

t-test(Student's t-test)를 진행하고자 할 때

따라야할 절차관련 패키지 사용법 에 대하여

(제가 이해하기 쉽게)

나름대로 정리한 글입니다.


크기가 같은 두 표본의

모평균이 같은지 체크하기 위하여

t-test를 사용하기로 결심했다면

참고하셔도 됩니다.


반박 시 여러분이 무조건 맞습니다 ^^





📒 t-test 절차?


  1. 전처리
  2. 정규성 검정 (Shapiro-Wilk test)
  3. 등분산성 검정 (KS test or Levene test)
  4. 앞의 결과에 따라 적절한 t-test 기법 시행

전처리를 안할 경우 2~3번 과정에서 오류가 발생하는 경우가 많았습니다.
자료 살펴보시고 이상한 값 있으면 빨리 빨리 제거 해주세요 ^^









📒 1. 정규성 확인


✏️ Shapiro-Wilk test 통한 정규성 확인

# Shapiro-Wilk test 파이썬 코드 

from scipy import stats

stats.shapiro(sample1)
stats.shapiro(sample2)

<결과해석>
Shapiro-Wilk test의 귀무가설: 표본이 정규성을 만족하는 모집단에서 나왔다
p < 0.05 이면 귀무가설 기각 => 표본이 정규성을 만족하는 모집단에서 나왔다고 볼 수 없다.
p >= 0.05 이면 귀무가설 채택 => 표본이 정규성을 만족하는 모집단에서 나왔다고 볼 수 있다.


✏️ 그래프를 통한 정규성 확인 1

# 시각화 파이썬 코드 
from scipy import stats
import seaborn as sns

sns.displot(sample1)

<결과해석>
그래프의 개형을 보고 정규성을 대략적으로 판단할 수 있다.
그래프가 가운데가 볼록한 종모양 이면 정규성을 띠는 것


✏️ 그래프를 통한 정규성 확인 2

# 시각화 파이썬 코드 
from scipy import stats
import matplotlib.pyplot as plt

stats.probplot(sample1, plot=plt)

<결과해석>
그래프의 개형을 보고 정규성을 대략적으로 판단할 수 있다.
그래프가 빨간색 직선과 비슷하면 정규성을 띠는 것


📌 정규성 확인 생략가능한 경우

표본 크기가 충분히 크면 (n>30) 정규성 검증을 생략할 수 있습니다.








📒 2. 등분산성 확인


✏️ KS test 통한 정규성 확인

# KS test 파이썬 코드 
from scipy import stats

stats.ks_2samp(sample1, sample2)

<결과해석>
KS test의 귀무가설: 두 그룹은 같은 분산을 가진 모집단에서 추출한 것이다.
p < 0.05 이면 귀무가설 기각 => 두 그룹이 같은 분산을 가진 모집단에서 추출한 것이라는 근거가 없다.
p >= 0.05 이면 귀무가설 채택 => 두 그룹은 같은 분산을 가진 모집단에서 추출한 것으로 볼 수 있다.


✏️ Levene test를 통한 정규성 확인

# KS test 파이썬 코드 
from scipy import stats

stats.levene(sample1, sample2)

<결과해석>
Levene test의 귀무가설: 두 그룹은 같은 분산을 가진 모집단에서 추출한 것이다.
p < 0.05 이면 귀무가설 기각 => 두 그룹이 같은 분산을 가진 모집단에서 추출한 것이라는 근거가 없다.
p >= 0.05 이면 귀무가설 채택 => 두 그룹은 같은 분산을 가진 모집단에서 추출한 것으로 볼 수 있다.


📌 등분산성 확인 생략가능한 경우

당연한 이야기 이지만
sample을 같은 모집단에서 추출하는 경우
등분산성 체크 하는 과정을 생략할 수 있습니다.









📒 3. 정규성, 등분산성에 따라 t-test 진행


✏️ 3-1. 정규성 X


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 이면 귀무가설 채택 => 두 그룹이 같은 모평균을 가지는 것으로 볼 수 있다.


✏️ 3-2. 정규성 O, 등분산성 X


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 이면 귀무가설 채택 => 두 그룹이 같은 모평균을 가지는 것으로 볼 수 있다.


✏️ 3-3. 정규성 O, 등분산성 O


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)
profile
1.01^365

0개의 댓글