Note: t-test는 기본적으로 두 집단 간의 평균을 비교하는 검정 방법입니다.

Types of t-test

t-test에는 크게 세 가지 종류가 있습니다. 어떤 연구 문제를 다루고 있냐에 따라 활용해야하는 t-test가 다릅니다.

  1. One sample t-test(단일표본 t-검정): 하나의 표본집단의 평균과 기준값(ex. 모집단의 평균, 특정값) 간의 차이에 대한 검정(mean of a single group against a known mean)
  2. Paired sample t-test(대응표본 t-검정): 하나의 표본집단 기준, 기존 평균과 어떠한 요소에 의해 변화된 평균 간의 차이에 대한 검정(means from the same group at different times)
  3. Independent sample t-test(Two sample t-test; 독립표본 t-검정): 독립적인 두 표본집단의 평균 간의 차이에 대한 검정(means for two groups)

One sample t-test

When to use

One sample t-test은 하나의 표본집단의 평균과 기준값 간 유의한 차이가 있는지 검정하는 통계적 방법입니다. 예를 들어, 한 공장에서 생산되는 랩탑의 무게는 2kg으로 알려져있는데, 공장의 A 생산라인에서 만들어지는 랩탑의 무게도 2kg이라 할 수 있는지 알고 싶을 때 one sample t-test을 사용합니다.

이 연구 문제에서 귀무가설과 대립가설은 아래와 같습니다.

H0(귀무가설): m=2   
H1(대립가설): m!=2   

Assumptions

One sample t-test는 parametric test(모수적 방법: 모집단 분포가 정규분포, 지수분포 등 특정 분포를 띈다는 가정 하에 접근하는 방법)입니다. 그러므로 t-test를 진행하기 전, 4 가지 확인해야하는 가정들이 있습니다.

  • The dependent variable must be continuous.
  • The observations are independent of one another.
  • The dependent variable should be approximately normally distributed. - Normality
  • The dependent variable should not contain any outliers.

특히 One sample t-test를 하기 위해서, 3 번째 가정처럼 표본집단의 데이터가 정규성을 지니는지 확인해야 합니다. 표본 집단의 데이터 수가 30 이상이면 중심극한정리에 의해 정규성을 만족한다고 가정할 수 있습니다. 실질적으로 정규성을 확인하는 방법은 아래와 같습니다.

(1) Q-Q scatterplot
Q-Q scatter plot은 데이터가 정규 분포를 따르는지 시각적으로 확인하는 방법입니다. 여기서 Q는 Quantile(분위수)를 의미하며, Q-Q scatter plot에서는 동일 분위수에 해당하는 정상 분포의 값과 분석하고자하는 분포의 값을 한 쌍으로 만들어 시각화합니다. 이를 통해 분석하고자 하는 샘플의 분포와 정규분포의 분포 형태를 비교할 수 있습니다. plot의 형태가 왼쪽 아래에서 오른쪽 위로 올라가는 직선의 형태에 가까울 수록 정규성을 지닌다고 할 수 있습니다.

(2) Shapiro-Wilk Test
Shapiro-Wilk Test는 정규성을 확인하는 검정 방법입니다. 이 검정에서 귀무가설은 표본 집단의 데이터가 정규분포를 지닌 모집단에서 비롯되었다는 것입니다. 검정 결과 p-value가 유의수준(주로 0.05)보다 낮다면, 귀무가설은 기각되고 데이터가 정규 분포를 지니지 않는다는 대립가설이 채택되기 때문에 p-value가 유의수준보다 높은 것이 좋습니다.

만약 위 방법을 통해 데이터가 정규성을 지니지 않음을 확인하게 되면, one sample t-test 대신 비모수적 방법인 one sample wilcoxon signed rank test를 사용해야 합니다.


How to use in Python

Python으로 one sample t-test를 하기 위해서 scipy.stats.ttest_1samp를 활용합니다.

현재 t-test로 알고 싶은 연구 문제는 위에서 언급한 예제 그대로를 활용하여 ‘한 공장에서 생산되는 랩탑의 평균 무게는 2kg으로 알려져있는데, 공장의 A 생산라인에서 만들어지는 랩탑의 평균 무게도 2kg이라 할 수 있는가’입니다.

데이터는 numpy.random을 활용하여 평균은 2, 표준편차 0.5를 지니는 정규분포로 부터 20개의 난수 샘플을 만들었습니다.

import numpy as np
from scipy import stats

# to get consistent result
np.random.seed(1)

# generate 20 random weight samples from a normal(Gaussian) distribution having mean as 2 and standard deviation as 0.5
weights = [np.random.normal(2, 0.5) for _ in range(20)]

# perform 1-sample t-test
tTestResult = stats.ttest_1samp(weights,2)

# print result
print("The T-statistic is %.3f and the p-value is %.3f" % tTestResult)

t-test 결과는 아래와 같이 나옵니다.

The T-statistic is -0.529 and the p-value is 0.603

p-value가 0.05보다 높으므로, H0(귀무가설): m=2을 그대로 채택합니다. 즉, A 생산라인에서 만들어지는 랩탑의 평균 무게는 2kg이라고 할 수 있습니다.