project:eve
23.02.14 ํต๊ณ ๋ถ์ ํ๋ก์ธ์ค์ t-test ๋ณธ๋ฌธ
Studying here๐ ๋๋ฒํฌ ํฉ์
๊ธธ๊ณ ๊ธธ์๋ ๋จธ์ ๋ฌ๋์ ๋๋ด๊ณ ์ด์ ํต๊ณ๋ถ์์ ์์ํ๋ค. ์ด๊ฒ๋ ๋ง์ฐฌ๊ฐ์ง๋ก ํ์ฌ ๊ณต๋ถํ๋ ์ฑ ๊ธฐ์ค์ผ๋ก ๋น์ทํ ํ์ด์ง๋์ด๋ค. ํ์ง๋ง ๋จธ์ ๋ฌ๋๊ณผ ๊ฒน์น๋ ๋ถ๋ถ๋ ์๊ณ (์ ํํ๊ท) ์๋ก์ด ๊ฐ๋ ์ ๋จธ์ ๋ฌ๋๋ณด๋ค๋ ์ ์ด์ ์ต๋ํ ๋นจ๋ฆฌ ๋๋ด๋ ๊ฒ์ ๋ชฉํ๋ก ํ๊ณ ์๋ค. ์ผ๋ฅธ ๋๋ด๊ณ ์ฌํ ์ฑ ์ผ๋ก ๋์ด๊ฐ์!!
ํต๊ณ ๋ถ์๊ณผ t-test
1. ํต๊ณ๋ [์ด๋ค ์ง๋จ, ์กฐ์ฌ๋ ์คํ, ๊ฒฐ๊ณผ ์์ฝ]์ผ๋ก ๋งํ ์ ์๊ฒ ๋ค.
ํต๊ณ ๋ถ์์ ์ด ์์ฝ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ถ์ํด ์๋ก์ด ์ฌ์ค์ ๋์ถํด๋ด๋ ๊ฑฐ๋ผ๊ณ ์๊ฐํ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.
2. ํต๊ณ์ ๊ธฐ๋ณธ์ ์ธ ๊ฐ๋ ์ ๊ฐ์ด ์์๋ดค๋ค.
1) ๊ฐ์ค
๊ท๋ฌด๊ฐ์ค : ๊ธฐ์กด์ ์ฃผ์ฅ
๋๋ฆฝ๊ฐ์ค : ์คํ์ผ๋ก ํ๊ณ ์ ํ๋ ์๋ก์ด ์ฃผ์ฅ
2) ๊ฒ์ : ์ด๋ ๊ฐ์ค์ด ์ณ์์ง ํ๋จํ๋ ํ์
์์ธก๊ฒ์ - ๊ท๋ฌด๊ฐ์ค : a์ด๋ค/ ๋๋ฆฝ๊ฐ์ค : a๊ฐ ์๋๋ค
๋จ์ธก๊ฒ์ - ๊ท๋ฌด๊ฐ์ค : a์ ๊ฐ๊ฑฐ๋ ์๋ค, ํฌ๋ค/ a๋ณด๋ค ์๋ค, ํฌ๋ค ex) ์ฌ๊ณผ์ ๋ฌด๊ฒ๋ 100g๋ณด๋ค ์๊ฑฐ๋ ๊ฐ๋ค/ ์ฌ๊ณผ์ ๋ฌด๊ฒ๋ 100g๋ณด๋ค ํฌ๋ค
๊ฐ์ค ๊ฒ์ ์ ๊ณผ์ : ์ด๋ ๋ถํฌ๋ฅผ ์ฌ์ฉํ ์ง ์ ํ(t, x-square, ...)ํ๊ณ ๊ทธ ๋ถํฌ์ ํต๊ณ๋์ ๊ตฌํด์ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ๊ฐ์ค์ ํ๋จํ๋ค.
3. ๊ฒ์
๊ฒ์ ์ ๋ํด ๋ฐฉ๋ฒ๋ก ์ ์ผ๋ก ์กฐ๊ธ ๋ ๊น์ด ์์๋ณธ๋ค.

1) t-test : t๋ถํฌ๋ฅผ ์ฌ์ฉํด ๊ฒ์
๋ชจ์ง๋จ์ ํ๊ท ๊ฐ์ด๋ ํ ์ง๋จ ๋ด ํด๋์ค ๊ฐ ์ฐจ์ด๋ฅผ ์๊ธฐ ์ํด ์ฌ์ฉ. ๋ถ์ฐ๊ฐ์ ์ด์ฉํ๋ค.
์์ : a์ง๋จ๊ณผ b์ง๋จ์ด ์๋๋ฐ ํ๋ณธ์ ์ถ์ถํด ๋์ด์ ํ๊ท ๊ฐ์ ๊ตฌํด๋ณด๋ 10์ด ์ฐจ์ด๊ฐ ๋ฌ๋ค. ๊ทธ๋ฌ๋ฉด ๋ชจ์ง๋จ์ ๋น๊ตํด๋ 10์ด ์ฐจ์ด๊ฐ ๋ ๊น?
1-์ผํ๋ณธ t-test : ๋จ์ผ ์ง๋จ์ ๋ฐ์ดํฐ๋ฅผ ํน์ ๊ฐ๊ณผ ๋น๊ต
ex - ์ฌํด ์ํํ ์ฌ๊ณผ์ ๋ฌด๊ฒ ๋ชฉ๋ก์ด ์๋๋ฐ 2.6kg๋ผ๊ณ ์ฃผ์ฅํ๋ค. ์ด ์ฃผ์ฅ์ด ๋ง๋์ง ๊ฒ์ฆํด๋ณด์
๊ฐ์ : ์ ๊ท์ฑ
๊ฐ์ค
๊ท๋ฌด๊ฐ์ค : ๋ชจํ๊ท ์ ๊ฐ์ *์ด๋ค
๋๋ฆฝ๊ฐ์ค : ๋ชจํ๊ท ์ ๊ฐ์ *๊ฐ ์๋๋ค
2-๋์ํ๋ณธ t-test : ๋จ์ผ ์ง๋จ์ ๋ ๊ทธ๋ฃน์ ๋ํ ๋น๊ต
ex - ์์ปคํ ์์ ์ ํ์ ๋ณด์ด๋ ๋ ํฌ๊ธฐ ํ๊ท ๋น๊ต
๊ฐ์ : ์ ๊ท์ฑ
๊ฐ์ค
๊ท๋ฌด๊ฐ์ค : ๋ ๊ทธ๋ฃน์ ํ๊ท ์ด ๊ฐ๋ค
๋๋ฆฝ๊ฐ์ค : ๋ ๊ทธ๋ฃน์ ํ๊ท ์ด ๋ค๋ฅด๋ค
3-๋ ๋ฆฝํ๋ณธ t-test : ๋ ๊ฐ์ ๋ ๋ฆฝ๋ ์ง๋จ์ ํ๊ท ๋น๊ต
๊ฐ์ : ์ ๊ท์ฑ, ๋ฑ๋ถ์ฐ์ฑ(์ง๋จ์ด 2๊ฐ ์ด์์ผ ๋๋ถํฐ ๊ฒ์ ํ์)
๊ฐ์ค
๊ท๋ฌด๊ฐ์ค : ๋ ์ง๋จ์ ํ๊ท ์ด ๊ฐ๋ค
๋๋ฆฝ๊ฐ์ค : ๋ ์ง๋จ์ ํ๊ท ์ด ๋ค๋ฅด๋ค
์ด์ธ์๋ ๋ถ์ฐ๋ถ์, ๊ต์ฐจ๋ถ์, ํ๊ท๋ถ์ ๋ฑ ๋ค์ํ๊ฒ ์๋๋ฐ ๊ทธ๊ฑด ์ดํ์ ๊ธ์์ ๊ฐ๊ฐ์ ์ฃผ์ ๋ก ์จ๋ณด๊ฒ ๋ค.
๊ทธ๋ผ ์ด์ t-test๋ฅผ ํ์ด์ฌ์ผ๋ก ์จ๋ณด์.
4. ์ฝ๋
1- ์ผํ๋ณธ t-test
๋ฐ์ดํฐ๋ ๊ณ ์์ด์ ์ฑ๋ณ๊ณผ ๋ฌด๊ฒ, ๊ธธ์ด์ ๋ํ ๋ฐ์ดํฐ์ด๋ค.
import pandas as pd
cats = pd.read_csv('/Users/eve/Downloads/jupyter notebook/files/stat/cats.csv')
cats.head()

์ด ๋ฐ์ดํฐ์ ๋ํด ๊ธฐ์กด์๋ ๊ณ ์์ด์ ๋ชธ๋ฌด๊ฒ๊ฐ 2.6kg๋ผ๋ ์ธ์์ด ์์๋ค. ๊ทผ๋ฐ ์ด๋ค ์คํ์๊ฐ ์ด๋ฐ ์ฃผ์ฅ์ ํ๋ค. ์ด ๋ชฉ๋ก์ ์๋ ๊ณ ์์ด๋ค์ ํ๊ท ๋ชธ๋ฌด๊ฒ๊ฐ 2.6kg์ด ์๋์ผ!
๊ทธ๋ฌ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ฐ์ค์ ์ธ์ฐ๊ณ ๊ฒ์ ์ ํ ์ ์๋ค.
๊ท๋ฌด๊ฐ์ค : ๊ณ ์์ด์ ํ๊ท ๋ชธ๋ฌด๊ฒ๊ฐ 2.6kg์ด๋ค
๋๋ฆฝ๊ฐ์ค : ๊ณ ์์ด์ ํ๊ท ๋ชธ๋ฌด๊ฒ๊ฐ 2.6kg๊ฐ ์๋๋ค
๊ฒ์ ํ๊ธฐ ์ ์ ๋ฐ์ดํฐ์ ์ ๊ท์ฑ๊ณผ ๋ฑ๋ถ์ฐ์ฑ์ ๋ง์กฑํ๋์ง ํ์ธํด์ผ ํ๋ค. ๋จผ์ ์ ๊ท์ฑ ๊ฒ์ ์ ์คํผ๋ก ํ ์คํธ๋ฅผ ํตํด ์ ์ ์๋ค.
์ด ํ ์คํธ๋ ๊ฒ์ ์ ์ผ์ข ์ด๋ฏ๋ก ์ ํด์ง ๊ฐ์ค ๋ด์ฉ์ด ์๋ค.
๊ท๋ฌด๊ฐ์ค : ์ ๊ท์ฑ์ ๋ง์กฑํ๋ค.
๋๋ฆฝ๊ฐ์ค : ์ ๊ท์ฑ์ ๋ง์กฑํ์ง ์๋๋ค.
b = cats['Bwt']
normal = shapiro(b)
print('test statistic : {0}'.format(normal[0]))
print('p-value : {0}'.format(normal[1]))

๊ฒ์ ํต๊ณ๋์ 0.95๋ก ์ด ๋ชจ๋ธ์ ๋งค์ฐ ์ ๋ขฐํ ์ ์๋ ๊ฒ์ผ๋ก ํ์ธํ ์ ์๋ค.
๋ p-value ๊ฐ์ด ์ ์์์ค 0.05๋ณด๋ค ๋ฎ์ ๊ฒ์ผ๋ก ๋ณด์ ๋ฐ์ดํฐ๊ฐ ์ ๊ท์ฑ์ ๋ง์กฑํ์ง ์๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
๋์ผ๋ก๋ ์ ๊ท์ฑ ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํด๋ณด์. ๋จผ์ ๊ฐ์ ๊ฐ๋ผ๋ฆฌ groupby๋ฅผ ํด์ค๋ค.
cats_Bwt_cnt = pd.value_counts(cats['Bwt'].values, sort=False)
import matplotlib.pyplot as plt
import seaborn as sns
plt.figure()
sns.barplot(x=cats_Bwt_cnt.index, y=cats_Bwt_cnt.values)


์ผํ๋ณธ t-test ์ค ์ ๊ท์ฑ์ ๋ง์กฑํ์ง ๋ชปํ๋ค๋ฉด ์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์์ฝ์จ ํ ์คํธ๋ฅผ ํตํด ๊ฒ์ ์ ์ด์ด์ ์งํํ ์ ์๋ค. ๋ง์ฝ ์ ๊ท์ฑ์ ๋ง์กฑํ๋ค๋ฉด ์๋ t-test ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
wc = wilcoxon(cats['Bwt']-2.6, alternative='two-sided')
print('\nt-test stats')
print('test statistic : {0}'.format(wc[0]))
print('p-value : {0}'.format(wc[1]))

ํน์ ์ ๊ท์ฑ์ ๋ง์กฑํ๋ค๋ฉด? ์๋ ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค
t1 = ttest_1samp(b, popmean=2.6)
print('\nt-test 1samp stats')
print('test statistic : {0}'.format(t1[0]))
print('p-value : {0}'.format(t1[1]))

2- ๋์ํ๋ณธ t-test
์ด ๋ฐ์ดํฐ๋ ์๋ฉด์ ๋ณต์ฉ ์ ๊ณผ ํ์ ์๋ฉด ์๊ฐ์ ์ฐจ์ด๋ฅผ ์ ๋ฆฌํด๋์ ๊ฒ์ด๋ค.
df_ba = pd.DataFrame({'before':[7, 3, 4, 5, 2, 1, 6, 6, 5, 4],
'after':[8, 4, 5, 6, 2, 3, 6, 8, 6, 5]})
1๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ฐ์ค์ ์๋ฆฝํด๋ณด์.
๊ท๋ฌด๊ฐ์ค : ์๋ฉด์ ๋ณต์ฉ ์ /ํ๋ก ์๋ฉด ์๊ฐ์ ์ฐจ์ด๋ ์๋ค.
๋๋ฆฝ๊ฐ์ค : ์๋ฉด์ ๋ณต์ฉ ์ /ํ๋ก ์๋ฉด ์๊ฐ์ ์ฐจ์ด๋ ์๋ค.
print(shapiro(df_ba['before']))
print(shapiro(df_ba['after']))

3-๋ ๋ฆฝํ๋ณธ t-test
์ผํ๋ณธ ๊ฒ์ ์์ ํ๋ ๊ณ ์์ด ๋ฐ์ดํฐ๋ฅผ ๋ค์ ๊ฐ์ ธ์์, ์ด๋ฒ์๋ ์์ปท๊ณผ ์์ปท ๊ณ ์์ด์ ๋ชธ๋ฌด๊ฒ ์ฐจ์ด๊ฐ ์๋์ง ์์๋ณด์
import pandas as pd
cats = pd.read_csv('/Users/eve/Downloads/jupyter notebook/files/stat/cats.csv')
female = cats.loc[cats['Sex']=='F', 'Bwt']
male = cats.loc[cats['Sex']=='M', 'Bwt']
๊ท๋ฌด๊ฐ์ค : ์ฑ๋ณ๊ฐ ๋ชธ๋ฌด๊ฒ ์ฐจ์ด๊ฐ ์๋ค.
๋๋ฆฝ๊ฐ์ค : ์ฑ๋ณ๊ฐ ๋ชธ๋ฌด๊ฒ ์ฐจ์ด๊ฐ ์๋ค.
๊ทธ๋ฆฌ๊ณ ์ผํ๋ณธ, ๋์ํ๋ณธ๊ณผ ๋ฌ๋ฆฌ ์ด๋ฒ์๋ ์ ๊ท์ฑ, ๋ฑ๋ถ์ฐ์ฑ ๊ฒ์ ์ ๋ชจ๋ ํด์ผ ํ๋ค.
์ ๊ท์ฑ ๊ฒ์ ์ ์ค์ฌ๊ทนํ์ ๋ฆฌ์ ์ํด ๋ฐ์ดํฐ ์๊ฐ 30๊ฐ ์ด์์ด๋ฏ๋ก ๋ง์กฑํ๋ค๊ณ ๊ฐ์ ํ๊ณ ๋์ด๊ฐ๋ค
eval = stats.levene(female, male)
print(eval)


๊ทธ๋ผ ์ ๊ทธ๋ฆผ์ ๋ฐ๋ผ ํจ์๋ฅผ ๋ฐ๊พธ์ด ์ฒ๋ฆฌํ๋ฉด ๋๋ค. ๋ฑ๋ถ์ฐ์ฑ ๊ฒ์ ์ด ์คํจํ์ผ๋ฏ๋ก ์ค๋ฅธ์ชฝ ํจ์๋ฅผ ์ ์ฉํ์.
ind = stats.ttest_ind(female, male, equal_var=False)
ind

'Daily' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| 23.02.11 Naive Bayes ๋์ด๋ธ ๋ฒ ์ด์ฆ (0) | 2023.02.06 |
|---|---|
| 23.02.05 ์์๋ธ (0) | 2023.02.05 |
| 23.02.04 ์์ฌ๊ฒฐ์ ๋๋ฌด (0) | 2023.02.04 |
| 23.01.31 KNN ์ต๊ทผ์ ์ด์ (0) | 2023.01.31 |
| 23.01.28 SVM ์ํฌํธ ๋ฒกํฐ ๋จธ์ (0) | 2023.01.29 |