철기시대 석공 벗어나기/코딩 조각

[코드 블록] t 검정 (t-test)

94년생 스피노자 2021. 5. 14. 22:47
728x90

t 검정은 샘플 값들의 평균을 기준으로 집단을 평가한다.

종류로는 일원 t 검정(one sample t-test)와 이원 t 검정(two samples t-test)가 있다.

 

일원 t 검정은 하나의 샘플 집단이 특정 평균값을 갖고있는지 판별한다.

이원 t 검정은 두개의 샘플 집단의 평균값을 서로 비교한다.

 

 

0. t-test를 활용하기 위한 조건

 

t-test는 분명 강력한 도구다.

하지만 아래 3가지 조건을 만족해야 사용가능하다.

 

* 독립성

t-test에서 비교하는 자료는 서로 독립적이어야 한다.

특정 약을 복용하기 전의 환자와 복용한 후의 환자는 독립적이지 않다.

이러한 자료는 서로 종속적이기 때문에 t-test가 불가능하다.

 

* 정규성

t-test에 쓰일 샘플 값들은 정규분포의 형태여야 한다.

다른 분포의 형태일 경우 t-test가 불가능하다.

파이썬에서 다음 코드를 활용하면 정규성을 검증할 수 있다.

from scipy.stats import normaltest
import numpy as np

normaltest(sample)

<결과 해석>

결과값으로 pvalue가 0.05보다 작게 나오면 sample은 normal 분포가 아니다.

반대로 pvalue가 0.05보다 크게 나오면 sample은 정규성을 지닌 것으로 볼 수 있다.

 

 

* 등분산성

등분산성은 이원 t 검정을 할 때 필요하다.

t-test에 쓰일 샘플 값들의 분산은 서로 같아야 한다.

서로 다른 샘플의 분산이 다를 경우 t-test가 불가능하다.

파이썬에서 다음 코드를 활용하면 등분산성을 검증할 수 있다.

from scipy import stats

lresult = stats.levene(sample1, sample2)
print('F-value : %.3f \np-value : %.3f' % (lresult))

<결과 해석>

결과값으로 pvalue가 0.05보다 작게 나오면 샘플들은 분포가 다르다는 의미다.

다행히도 등분산성은 보장되지 않더라도 t-test가 가능하다.

분산이 서로 다를 경우 자유도를 수정한 독립표본 t-test를 수행하면 된다.

 

 

1. t-test를 위한 코드

 

앞서 말한 것처럼 t-test는 일원 t 검정과 이원 t 검정이 있다.

 

i) 일원 t 검정 (One sample t-test)

 

일원 t 검정은 샘플 값들의 평균이 특정값과 유사한지 판별해준다.

주로 검증하려는 특정한 수치가 있을 때 사용한다.

 

예를 들어 대한민국 남성들의 평균 키가 175cm라는 것을 검증할 수 있다.

이를 위한 코드는 아래와 같다.

from scipy import stats

male_height = height.Male 
result = stats.ttest_1samp(male_height, 175) 

print('t statistic : %.3f \np-value : %.3f' % (result))

<결과 해석>

결과를 저장한 값에는 첫째로 t 값이, 그리고 둘째로 p 값이 저장돼있다.

p 값이 0.05라면 신뢰수준 95%하에 대한민국 남성들의 평균 키가 175cm라는 가설을 기각할 수 있다.

 

ii) 이원 t 검정 (Two samples t-test)

 

이원 t 검정은 두 샘플 값들의 평균이 서로 비슷한지 보기 위해 쓴다.

예를 들어 한국 남성들의 평균 키가 일본 남성들의 평균 키와 차이가 없는지 알 수 있다.

이를 위한 코드는 아래와 같다.

from scipy import stats

# 등분산성을 충족하는 경우
result = stats.ttest_ind(korea_male.Height, japan_male.Height) 

# 등분산성을 충족하지 못하는 경우
result = stats.ttest_ind(korea_male.Height, japan_male.Height, equal_var=False) 

샘플 값들의 등분산성에 따라 쓰는 코드가 달라진다.

앞서 소개했던 등분산성 검정을 먼저 수행하는 것을 잊지말자.

 

<결과 해석>

p 값이 0.05라면 신뢰수준 95%하에 한국 남성과 일본 남성의 평균 키가 같다는 가설을 기각할 수 있다.

 

iii) 쌍체표본 t 검정 (Paired t-test)

 

실은 t 검정이 한 종류 더 있다.

쌍체표본 t 검정은 t-test를 위한 조건 중 독립성에 어긋나는 자료를 다룬다.

아까 예를 들은 것처럼 특정 약을 복용하기 전의 환자와 복용 후의 환자를 다룰 수 있다.

이를 위한 코드는 아래와 같다.

from scipy import stats

result = stats.ttest_rel(after_med, before_med)

print('t statistic : %.3f \np-value : %.3f' % (result))

<결과 해석>

p 값이 0.05라면 신뢰수준 95%하에 약 복용 전과 복용 후에 차이가 없다는 가설을 기각할 수 있다.

 

 

모두 행복하길

 

-끝-

728x90