쌍체 표본 t검정 기초개념
.
Data_Preprocessing_TIL(20210626)
[학습자료]
패스트캠퍼스 온라인 강의 “파이썬을 활용한 데이터 전처리 Level UP 올인원 패키지 Online.” 를 공부하고 정리한 내용입니다.
URL : https://fastcampus.co.kr/data_online_preprocess
[학습내용]
- 쌍체 표본 t검정의 목적 : 특정 실험 및 조치 등이 효과가 있는지에 대한 유의성을 검정
일반적으로 어떤 실험을 하기 전과 한 후를 비교했을때 그 차이가 유의한지를 보는 것이다.
예를 들어서 실험전에 n개의 샘플이 있고, 값을 x1 ~ xn까지 있다고 하자. 그리고 실험 후의 결과를 y1 ~ yn까지라고 해보자. 주의해야할 점은 샘플데이터는 실험전과 후의 차이가 있을뿐 데이터는 동일한 것이다. 실험 전후의 차이를 d1 ~ dn까지로 나타낸 것이다. 그래서 이 실험전후의 차이가 0인것을 영가설로 두고, 0이 아닌것을 대립가설로 두고 검정하는 것을 말한다.
- 쌍체 표본 t검정을 수행하기 위한 선행조건
실험전값과 실험후의 측정값은 정규분포를 따르지 않아도 무방하나 실험전후 측정값의 차이인 d는 정규성을 띄고 있어야 한다.
- 쌍체 표본 t검정의 통계량
분자는 d의 평균이 들어가고, 분모에는 이 d에 대한 표준편차가 들어간다. d가 크면 클수록 통계량이 커지는 것을 알 수 있다. 표준편차가 작으면 작을수록 또 통계량이 커진다.
- 파이썬을 이용한 쌍체 표본 t검정
1) 정규성 검정(Kolmogorov-Smornov 검정)
코드
scipy.stats.kstest(x,'norn')
결과해석
pvalue가 특정수치(0.05) 미만이면 정규성을 따른다고 판단
2) 쌍체표본 t검정
코드
# a,b : 실험전후 결과(주의사항 : 반드시 길이가 같아야 함)
scipy.stats.ttest_rel(a,b)
결과해석
pvalue가 특정수치 미만이면 그룹 a와 그룹 b간 차이가 존재한다고 판단(즉, 특정실험의 효과가 있음)
statistics가 양수이면 양의 효과(d>0)가 있다고 판단하며, 음수면 음의효과(d<0)가 있다고 판단
- python을 이용한 실제 실습
다이어트 약이 효과가 있었는지를 검정하는 예시
step 1) 데이터 load
# data 불러오기
import os
import pandas as pd
# pwd 시 경로 : /c/Users/user/Desktop/aa/2. 탐색적 데이터 분석/데이터
os.chdir(r"C:/Users/user/Desktop/aa/2. 탐색적 데이터 분석/데이터/")
df = pd.read_csv("다이어트약_효과검증.csv")
df
다이어트전(kg) | 다이어트후(kg) | |
---|---|---|
0 | 87.41 | 88.30 |
1 | 81.05 | 76.21 |
2 | 60.72 | 53.34 |
3 | 81.02 | 78.21 |
4 | 75.75 | 76.74 |
5 | 85.48 | 74.74 |
6 | 62.11 | 59.00 |
7 | 56.56 | 49.85 |
8 | 85.11 | 79.79 |
9 | 80.67 | 79.38 |
10 | 66.65 | 65.53 |
11 | 59.29 | 53.80 |
12 | 77.08 | 68.51 |
13 | 80.08 | 78.30 |
14 | 82.89 | 82.26 |
15 | 84.45 | 83.48 |
16 | 88.72 | 86.44 |
17 | 67.97 | 62.91 |
18 | 73.23 | 74.53 |
19 | 75.32 | 71.58 |
20 | 58.96 | 51.54 |
21 | 55.89 | 52.07 |
22 | 89.54 | 84.32 |
23 | 73.34 | 64.47 |
24 | 69.92 | 67.26 |
25 | 76.70 | 69.76 |
26 | 72.76 | 68.79 |
27 | 84.80 | 83.77 |
28 | 81.31 | 78.05 |
29 | 77.63 | 74.82 |
30 | 57.19 | 52.65 |
31 | 89.08 | 88.31 |
32 | 68.69 | 65.70 |
33 | 66.58 | 64.10 |
34 | 61.49 | 60.53 |
35 | 67.12 | 62.10 |
36 | 69.87 | 60.27 |
37 | 82.98 | 82.20 |
38 | 72.75 | 61.21 |
39 | 79.50 | 77.63 |
40 | 57.93 | 54.11 |
41 | 65.19 | 56.46 |
42 | 70.02 | 67.07 |
43 | 83.36 | 76.00 |
44 | 78.59 | 74.65 |
45 | 88.18 | 84.15 |
46 | 59.97 | 51.40 |
47 | 82.43 | 75.39 |
48 | 58.08 | 49.02 |
49 | 58.60 | 52.48 |
df.columns
Index(['다이어트전(kg)', '다이어트후(kg)'], dtype='object')
before = df['다이어트전(kg)']
after = df['다이어트후(kg)']
step 2) 정규성 검정
# 차이 d(after-before)에 대한 정규성 검정
from scipy.stats import *
kstest(after - before, 'norm')
KstestResult(statistic=0.7424620196514834, pvalue=7.04108433205159e-29)
step 3) 쌍체표본 t검정
ttest_rel(before, after) # 확실한 양의 효과가 있음을 확인
Ttest_relResult(statistic=9.70596986565785, pvalue=5.370404098342324e-13)