데이터과학 기초/통계

파이썬으로 대응표본 t-test 돌리기

eigenvector 2022. 8. 4. 20:04
반응형

t-test 시리즈(?)의 마지막 파트인 대응표본 t-test입니다.

 

2022.08.02 - [데이터과학 기초/Python배우기] - 파이썬으로 단일표본 t-test 돌리기

2022.07.29 - [데이터과학 기초/Python배우기] - 파이썬으로 독립표본 t-test 돌리기

 

(굳이 따진다면 추가로 비모수 검정이 남았습니다만, 일단은 넘어가도록 하죠)

 


대응표본 t 검정(Paired t-test)

대응표본 t검정은 Paired라는 표현에서 알 수 있듯이, "짝을 이룬 두 집단(표본)"을 비교하는 검정 방식입니다.

 

그렇다면, "짝을 이룬다"라는 표현은 어떤 뜻을 가질까요?

 

"전/후"의 관계를 가장 흔한 예시로 들 수 있습니다.

 

"커피를 마시기 전후로 집단의 서류 처리 능력에 차이가 존재하는가?"

 

와 같은 문제가 대응 표본 t검정의 대표적인 예시입니다.

 

가설은 다음과 같이 구성할 수 있습니다(정교하지 않지만 대략 이런 느낌입니다).

 

귀무가설 : 커피 섭취 전후 업무 능력의 차이가 없을 것이다

대립가설 : 커피 섭취 전후 업무 능력의 차이가 존재한다

 

다만, 전/후 대신 다른 관계에서도 대응표본 t검정을 수행할 수 있다는 점만 기억해 주세요

 

추가로, 독립표본과 비교한다면 "동일한 집단"을 분석한다는 점을 차이로 볼 수도 있겠습니다.

 


패키지 설치

분석 과정에는 이전부터 계속 사용하던 Pandas, Seaborn, Pingouin 를 사용합니다.

 

각각 Pandas(데이터 정리와 탐색), Seaborn(시각화), Pingouin(통계 분석)을 담당합니다.

 

conda 설치를 추천하며(특히 애플 실리콘 환경일 경우), conda의 사용에 대해서는 다음 포스팅을 참고해 주세요.

 

2022.07.31 - [데이터과학 기초/Python배우기] - conda로 손쉽게 파이썬 환경 관리하자 (Intel부터 M1까지) - 기초

 

(추가로 코딩 환경은 Jupyter 실행 환경을 추천합니다)

 


데이터 로드

이번에 사용할 샘플 데이터는, 앞서 말한 예시대로 커피를 마시기 전 후로 업무 수행 능력을 테스트한 내용입니다.

 

work.csv
0.00MB

 

샘플 데이터셋을 받아 Python 폴더에 로드한 후 분석을 수행합니다.

 

import pandas as pd

work = pd.read_csv("coffee.csv")

work.head()

 

 

컬럼을 구분하여 섭취 전(before), 섭취 후(after)에 대해 업무능력을 측정한 데이터가 확인됩니다.

 

이렇게 컬럼 별로 그룹을 나눈 데이터셋을 Wide-Form이라고 부릅니다.

 

(참고로 이전 독립표본 검정에서는 그룹 컬럼을 따로 구성했는데, 이는 Long-Form이라고 부릅니다)

 

Wide-Form 데이터셋에 대한 대한 기술 분석은 다음과 같이 수행하시면 되겠습니다.

 

(만약 가지고 계신 데이터셋이 Long-Form이라면 앞선 독립표본 검정 포스팅을 참조하시면 됩니다)

 

print(work.describe())

 

 

이제, 간단한 시각화를 통해 분포를 확인해 보도록 하죠.

 

Wide-Form과 Long-Form의 시각화는 문법이 조금 다른데요.

 

Long-Form은 하나의 그림 안에 두 개의 분포를 그릴 때, Wide-Form은 두 개를 따로 그릴 때 코드 구성이 쉽습니다.

 

개인적으로는 Long-Form을 추천하지만, 오늘은 Wide Form에 맞춰 두 개의 시각화를 따로 구성해 보겠습니다.

 

(기본적인 개념이 잡혀 있지 않으면 Long에서 Wide로, Wide에서 Long으로의 변환이 이해하기 어렵기 때문입니다)

 

import seaborn as sns

sns.displot(work, x="Before", kde=True)
sns.displot(work, x="After", kde=True)

 

어느 정도 평균 차이는 있지만, 전체 분포 형태에 큰 차이는 없어 보입니다.

 

이제, 이런 평균 차이가 통계적으로 유의한지 검정해 보도록 하죠.

 


Paired t-test(대응표본 t-검정)

정규성 검정

이전시간의 단일 표본 검정과 유사하게, 정규성 검정을 수행합니다.

 

Paired t-test의 정규성 검정은 두 변수 사이의 차를 이용해서 수행합니다.

 

새로운 컬럼 Gap을 구성해서 확인해 보도록 하죠.

 

work['Gap'] = work['Before'] - work['After']
work

 

이제 새로운 변수에 정규성 검정을 수행합니다.

 

import pingouin as pg

pg.normality(work.Gap)

정규성 조건을 만족하기에, 비모수 검정과 같은 대안 대신 일반적인 t-test를 수행할 수 있습니다.

 


대응표본 t-test

대응표본 t-test은 독립표본 t-test와 같은 명령어를 사용합니다.

 

다만, Paired 옵션을 True로 설정하는 과정만 다를 뿐입니다.

 

import pingouin as pg

pg.ttest(work.Before, work.After, paired=True)

 

 

좀 더 보기 편하게 만드려면 소수점 반올림을 해도 좋겠군요.

 

import pingouin as pg

pg.ttest(work.Before, work.After, paired=True).round(3)

 

 

p값이 0.05 보다 작기 때문에 , 커피 섭취 전후의 업무 수행 능력의 유의한 차이가 존재한다고 볼 수 있겠습니다.

 


보고하기

마지막으로, 통계 보고는 다음과 같은 내용을 넣어 마무리합니다.

 

1. 어떤 통계 기법을 사용했는가?

대응표본 t 검정

 

2. 통계 결과는?

t(99) = -8.265, p <.001, 신뢰구간 95%에서 [-10.83, -6.63] 으로 유의하기 때문에 전후의 차이가 유의하다(=대립가설을 채택한다)

 

3. 해석?

커피를 마신 후 업무 능력이 (~만큼) 유의하게 상승한다.

 

이 세 요소를 잘 조합하여 정리하면 되겠습니다.

반응형