빅데이터 전문가 되기

두 집단의 평균 비교 t-test(대응표본) 본문

통계

두 집단의 평균 비교 t-test(대응표본)

지야소이 2023. 6. 15. 17:08

😸 두 평균의 비교 (대응표본 vs 독립표본)

  • 대응표본 t-검정(Paired Samples t-Test)

- 동일한 개체 또는 그룹에서 얻은 두 관찰 값의 차이를 비교하는데 사용

- 개체 또는 그룹 간의 차이에 대한 통계적 유의성을 검정하기 위해 각 쌍의 차이에 대한 평균과 분산을 계산 합니다.

  이 차이값들의 평균이 0과 유의하게 다른지를 검정합니다.

- 예시: 동일한 사람들의 전 후 체중 변화 비교

 

  • 독립표본 t-검정(Two Independent Sample t-Test)

- 두 개의 별도된 그룹 간의 평균 차이를 비교하는데 사용

- 두 그룹의 평균과 분산을 계산하여, 두 그룹 간의 평균 차이가 통계적으로 유의미한지를 검정합니다.

- 예시: 남성과 여성의 평균 소득 차이

 

 

 

대응 표본을 이용하여 첫번째 예시를 설명하겠습니다.

- 데이터에는 여러 지역에서 스프레이를 뿌리기 전에 측정한 곤충의 수(before_spr)와 스프레이를 부린 다음의 곤충의 수가 저장되어 있다. 

- 스프레이를 뿌린 뒤 곤충의 수(after_spr)가 감소했는지 대응표본(Paired t-test)을 통해 구하라.

- 가설 설정

  • 귀무가설 : μd은 0이다.
  • 대립가설 : μd은 0이 아니다.

- 여기서 μd는 ('살충제 뿌린 후의 곤충 수 - 살충제 뿌리기 전의 곤충 수'의 평균)이다.

- μd는 정규분포를 만족한다.

- 문제 1: μd의 표본 평균을 구하시오. (반올림하여 소숫점 둘째 자리까지 계산)

- 문제 2: 위의 가설을 검정하기 위한 검정통계량을 구하시오. (반올림하여 소숫점 둘째 자리까지 계산)

- 문제 3: 위의 통계량에 대한 p값을 구하고, (반올림하여 소숫점 넷째 자리까지 계산) 유의수준 0.05하에서 가설검정을 선택하시오.

 

# 데이터 불러오기
import pandas as pd
df = pd.read_csv("./data/insectsprays.csv")
df.head()

 

👉 문제 1: μd의 표본 평균을 구하시오.

diff = df['after_spr'] - df['before_spr']
print(round(diff.mean(), 2))

> -12.0

 

 

👉 문제 2: 위의 가설을 검정하기 위한 검정통계량을 구하시오.

from scipy.stats import stats
from math import sqrt

t_score, p_value = stats.ttest_rel(df['before_spr'], df['after_spr'])
print('t_score:', round(t_score, 4), 'p_value:',p_value)

> t_score: 14.8933 p_value: 1.02279e-16

 

 

👉 문제 3: 위의 통계량에 대한 p값을 구하고, 가설검정의 결과를 선택하시오.

print(p_value)

> 1.02279e-16

- p_value값이 유의수준 0.05 이하이므로 귀무가설을 기각, 대립가설을 채택합니다.

- 따라서 μd은 0이 아니라고 판단할 수 있습니다.

 

 

 

 

두번째 예시를 설명하겠습니다.

- 학생들이 체중 감량을 시도하고 있다고 가정한다. 이 때 새로운 식단과 운동 프로그램의 효능여부를 확인하려고 한다.

- 새로운 식단과 운동 프로그램을 시작하기 전의 체중을 측정하고 일정 기간동안 식단과 운동 프로그램을 따른 후의 체중을 측정하여 서로를 비교하였다. 이때, 대응표본(Paired t-test) t-검정을 사용하여 도움이 되는지를 구하라.

- 가설 설정

  • 귀무가설: 식단과 운동프로그램이 체중 감량에 도움이 되지 않는다.
  • 대립가설: 식단과 운동프로그램이 체중 감량에 도움이 된다.

 

# 데이터 불러오기
import pandas as pd
df = pd.read_csv("https://raw.githubusercontent.com/ethanweed/pythonbook/main/Data/chico.csv")
df.head()

 

df.describe()

- great_test1과 great_test2는 20명의 데이터가 확보되어있습니다.

- great_test1은 식단과 운동프로그램을 하기 전 데이터로 평균은 56.98입니다.

- great_test2는 식단과 운동프로그램을 한 후 데이터로 평균은 58.3입니다.

- 두 그룹이 통계적으로 유의미한지 확인해보겠습니다.

 

 

👉 데이터 시각화 

import matplotlib.pyplot as plt
import seaborn as sns

fig, (ax1, ax2, ax3) = plt.subplots(1, 3, figsize=(15,5))

sns.pointplot(data=df, ax =ax1)
sns.scatterplot(data=df, x='grade_test1', y='grade_test2', ax=ax2)

ax2.plot(ax2.get_xlim(), ax2.get_ylim(), ls='--', c='.3')

df2 =df
df2['improvement'] =df2['grade_test2']-df2['grade_test1']

sns.histplot(data =df2, x='improvement')

ax1.title.set_text('A')
ax2.title.set_text('B')
ax3.title.set_text('C')

plt.show()

- A : grade_test1과 grade_test2의 평균값으로 grade_test2가 조금 더 높다는 것을 확인할 수 있습니다.

- B : 선을 따라 점들이 위에 있으면 개선이 된 것으로 볼 수 있고, 선 아래에 점이 있다면 개선이 되었다고 볼 수 없습니다.

- C : improvement는 grade_test2와 grade_test1의 차이값으로 향상된 데이터의 수를 알 수 있습니다.

 

- improvement의 값을 수치로 확인해보겠습니다.

df2

- 전반적으로 improvement의 값이 0 이상으로 개선된 것으로 보입니다.

 

 

👉 통계 검정하기

import numpy as np
from scipy import stats

data = df2['improvement']

stat.t.interval(alpha=0.95, df=len(data)-1, loc=np.mean(data), scale=stats.sem(data))

> (0.9508686092602991, 1.8591313907397005)

- 평균 향상은 0.95%에서 1.86% 사이가 신뢰도 95%로 확실하다는 것을 알 수 있습니다.

- 실제로 약 1%의 향상을 보이지만, 서로간의 점수는 약 20% 정도로 상당히 차이가 크다는 점에서 비교했을 때

  향상도는 작다고 판단할 수 있습니다.

 

 

from pingouin import ttest
ttest(df2['improvement'], 0)

- p_value값은 0.05 이하로 귀무가설을 기각하고 대립가설을 채택할 수 있습니다.

- 따라서, 식단과 운동프로그램이 체중 감량에 도움이 된다고 판단할 수 있습니다.

 ( t(19) = 6.48, p < 0.001, p_value : 3.32e-06  ) 

 

 

'통계' 카테고리의 다른 글

분산 분석(The Analysis of Variance)  (0) 2023.06.15
두 집단의 평균 비교 t-test(독립표본)  (0) 2023.06.13
One Sample t-test  (0) 2023.06.12
z-test(z-통계량)  (0) 2023.06.09
통계 관련 자료 모음  (0) 2023.04.18
Comments