λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Machine Learning/Statistics

[기초 톡계] λŒ€μ‘ν‘œλ³Έ T-κ²€μ •

by ISLA! 2023. 8. 14.
πŸ‘€ 톡계 κ²€μ • μ ‘κ·Ό 단계
1. κ°€μ„€ μ„€μ •
2. νŠΉμ • 검정을 ν•˜κΈ° μ „, ν•„μš”ν•œ 가정이 뭔지 νŒŒμ•…ν•΄μ•Όν•¨(예: μ •κ·œμ„±, λ“±λΆ„μ‚°μ„± λ“±)

λŒ€μ‘ν‘œλ³Έ T-κ²€μ •μ΄λž€?

  • μ‹€ν—˜λ‹¨μœ„λ₯Ό λ™μ§ˆμ μΈ μŒμœΌλ‘œ λ¬Άμ€ λ‹€μŒ, κ° μŒμ—μ„œ κ΄€μΈ‘κ°’μ˜ μ°¨λ₯Ό μ΄μš©ν•˜μ—¬ λ‘ λͺ¨ν‰κ· μ˜ μ°¨μ΄μ— κ΄€ν•œ μΆ”λ‘ 
  • μ‹€ν—˜ μ΄μ „μ˜ μ§‘단과 μ‹€ν—˜ μ΄ν›„μ˜ μ§‘단이 λ™μΌν•œ κ²½μš° μ‚¬μš©ν•˜λŠ” κ²€μ •(μŒμ²΄λΉ„κ΅)

 

κ°€μ„€

  • 귀무가섀 : μ‹€ν—˜μ „ν›„ ν‰κ· μ˜ μ°¨μ΄λŠ” 0이닀
  • λŒ€λ¦½κ°€μ„€ : μ‹€ν—˜μ „ν›„ ν‰κ· μ˜ μ°¨μ΄λŠ” 0이 μ•„λ‹ˆλ‹€

 

κ°€μ •

  • 독립성
  • μ •κ·œμ„±

 

데이터 확인

  • μš΄λ™&식단 ν”„λ‘œκ·Έλž¨ 진행 μ „, ν›„μ˜ κ·Όμœ‘λŸ‰μ— λŒ€ν•œ 데이터
import pandas as pd
df = pd.read_csv("https://raw.githubusercontent.com/ethanweed/pythonbook/main/Data/chico.csv")
df.head()

  • count 값이 두 경우 λͺ¨λ‘, 20μ΄ν•˜μ΄λ―€λ‘œ μ •κ·œμ„± 검증이 ν•„μš”
df.describe()

데이터 μ‹œκ°ν™”

import seaborn as sns
import matplotlib.pyplot as plt

fig, ax = plt.subplots(1, 2, figsize = (15, 5))

sns.pointplot(data = df, ax = ax[0])
sns.scatterplot(x = df['grade_test1'], y = df['grade_test2'], ax = ax[1])
ax[1].plot(ax[1].get_xlim(), ax[1].get_ylim(), ls='--')

ax[0].set_title("A")
ax[1].set_title("B")
plt.show()

πŸ‘‰ Aκ·Έλž˜ν”„ : 두 라인(신뒰ꡬ간)이 많이 κ²ΉμΉ  수둝, 평균 차이가 크지 μ•ŠμŒ

πŸ‘‰ Bκ·Έλž˜ν”„ : 점선을 κΈ°μ€€μœΌλ‘œ 상단이, 효과(즉, κ²°κ³Όκ°’μ˜ λ³€ν™”)κ°€ μžˆμŒμ„ λ‚˜νƒ€λƒ„

 

μ‹€ν—˜ μ „/ν›„μ˜ 차이λ₯Ό 보기 μœ„ν•œ 데이터 가곡

df2 = df.copy()
df2['improved'] = df['grade_test2'] - df['grade_test1']

sns.histplot(data=df2, x = 'improved')
plt.show()

πŸ‘‰ μ–΄λŠμ •λ„μ˜ λ³€ν™”κ°€ μžˆμŒμ„ 확인 κ°€λŠ₯

 

μ •κ·œμ„± κ²€μ •

  • μ‹€ν—˜ μ „ ν›„, 두 λ³€μˆ˜μ˜ 차이가 μ •κ·œλΆ„ν¬λ₯Ό λ”°λ₯΄λŠ”지 확인 (단, n <= 30 일 λ•Œ ν•˜λŠ” 것, 30 μ΄ˆκ³ΌλŠ” ν•  ν•„μš” μ—†μŒ ; μ€‘μ‹¬κ·Ήν•œ 정리 μ°Έκ³ )
  • 각 κ·Έλ£Ή λ³€μˆ˜κ°€ μ •κ·œλΆ„ν¬λ₯Ό λ”°λ₯΄λŠ”μ§€λŠ” κ²€μ •ν•  ν•„μš” μ—†μŒ
  • 확인 방법 : Shapiro-Wilk tests
  • κ°€μ • μœ„λ°˜ μ‹œ, Wilcoxon Signed-Ranks Testλ₯Ό 진행
import pingouin as pg

pg.normality(df2['improved'])

μ •κ·œμ„± 검증 톡과!

 

 

t-test

  • 두 μ§‘λ‹¨μ˜ 뢄산이 λ™μΌν•˜λ‹€κ³  κ°€μ •
  • 두 독립 μƒ˜ν”Œμ˜ 평균 값이 λ™μΌν•˜λ‹€λŠ” 귀무가섀에 λŒ€ν•œ κ²€μ •
λ©”μ„œλ“œ λ§€κ°œλ³€μˆ˜ μ„€λͺ…
ttest_rel(a, b) a, b : array_like λ°μ΄ν„°μ˜ ν¬κΈ°κ°€ λ™μΌν•΄μ•Ό ν•¨.
alternative option : two-sided(default), less, greather
[μ˜ˆμ‹œ, μ‹€μŠ΅ μ½”λ“œμ™€ 무관]
from scipy import stats
t_score, p_value = stats.ttest_rel(df['before_spr'], df['after_spr'])
print(round(t_score, 4), round(p_value, 2))

>> 14.8933 0.0
from pingouin import ttest

ttest(df2['grade_test2'], df2['grade_test1'], paired=True) #paired=True;λŒ€μ‘ν‘œλ³Έκ²€μ¦ν•˜κ² λ‹€

p-value < 0.05 : 평균 차이가 μœ μ˜λ―Έν•˜κ²Œ 있음

 

κ²°λ‘ 

πŸ’ͺ μš΄λ™&식단 ν”„λ‘œκ·Έλž¨μ˜ νš¨κ³Όκ°€ μœ μ˜λ―Έν•˜κ²Œ μžˆλ‹€(평균 차이 있음!)

728x90