[TIL]8.Confidence Intervals
ANOVA(one-way)
์์์
์์ํ ์นด์ด : 1๊ฐ ๊ทธ๋ฃน์ ํ๊ท ์ด ํน์ ์์ ๊ฐ์์ง
ํฌ์ํ ์นด์ด : 2๊ฐ ๊ทธ๋ฃน์ ํ๊ท ์ด ์ ์๋ฏธํ๊ฒ ๋ค๋ฅธ์ง
- 2๊ฐ ์ด์ ๊ทธ๋ฃน์ ํ๊ท ์ ์ฐจ์ด๊ฐ ์๋์ง๋ฅผ ๊ฐ์ค ๊ฒ์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ๋ฐฐ์๋ณด๊ฒ ์ต๋๋ค.
Multiple Comparison
- 2๊ฐ ์ด์์ ์ฌ๋ฌ ๊ทธ๋ฃน์ ๋น๊ตํ๊ธฐ ์ํด์ ์ด๋ฐ ์๊ฐ์ ํ ์ ์๋ค.
์ด๋ก ์์ผ๋ก ๊ฐ๋ฅํ์ง๋ง ๋ฌธ์ ๊ฐ ์๋ค.
3๋ฒ์ ๊ฐ์ค ๊ฒ์ ์์ ๊ฐ๊ฐ ํต๊ณ์ ์ผ๋ก ์๋ฌ๊ฐ ๋ ํ๋ฅ ์ α์ด๋ค.
์ฆ, 3๊ฐ์ ๊ฐ์ค ๊ฒ์ ์ค ์ ์ด๋ ํ๋์์ ์๋ฌ๊ฐ ๋ ํ๋ฅ ์
1−(1−α)^3 ์ด๊ณ α=0.05 ๊ธฐ์ค์ผ๋ก ์ฝ 15 % ์ ๋๋ค.
์ํ์ ์ผ๋ก
m๊ฐ ๊ทธ๋ฃน์ ๋ํ ๊ฐ์ค ๊ฒ์ ์ด๋ผ๋ฉด
ํ๊ท α = 1−(1−α)^m , ํ๊ท α ≤ m⋅α ๋ผ๋ ๊ฒ์ด ์ํ์ ์ผ๋ก ์ฆ๋ช
๋์ด ์์ต๋๋ค.
์ฆ, ์ฌ๋ฌ๊ฐ๋ฅผ ํ๋ํ๋์ฉ ๋น๊ต ํ๋ ๊ฒ์ ๊ทธ๋ฃน์๊ฐ ๋์ด๋ ์๋ก ์๋ฌ๋ ์ปค์ง๋ค๋ ์ด์ผ๊ธฐ์ฃ .
์ด๋ ๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ๊ฐ์ ๊ทธ๋ฃน์ ํ๊บผ๋ฒ์ ๋น๊ต ํ๋ ๋ฐฉ๋ฒ์ด ํ์!!!
Variation
๊ทธ๋ผ ์ฌ๋ฌ ๊ทธ๋ฃน๊ฐ์ ์ฐจ์ด๋ฅผ ์ด๋ป๊ฒ ํ์ธํด์ผํ๋๊ฐ?
'์ฌ๋ฌ ๊ทธ๋ฃน๋ค์ด ํ๋์ ๋ถํฌ์์๋ถํฐ ์๋ค'๋ผ ๊ฐ์
์ด๋ฅผ ์ํ ์งํ๋ 'F-statistic' ์ด๋ค.
๊ฐ๋จํ F = (์ง๋จ ๊ฐ ๋ถ์ฐ) / (์ง๋จ ๋ด ๋ถ์ฐ)
F ๊ฐ์ด ํฌ๋ค
- ๋ถ์(์ง๋จ ๊ฐ ๋ถ์ฐ)๋ ํฌ๊ณ , ๋ถ๋ชจ(์ง๋จ ๋ด ๋ถ์ฐ)์ ์์์ผํ๋ค.
- ์ฆ, '๋ค๋ฅธ ๊ทธ๋ฃน๋ผ๋ฆฌ์ ๋ถํฌ๊ฐ ๋ค๋ฅผ ๊ฒ์ด๋ค' ๋ผ๋ ๊ฐ์ ์ด ๋ถ๊ฒ ๋๋ค.
- ๊ท๋ฌด๊ฐ์ค์ '๊ทธ๋ฃน๋ผ๋ฆฌ ๋ถํฌ๊ฐ ๊ฐ์ ๊ฒ์ด๋ค.'์ธ๋ฐ, F๊ฐ์ด ๋งค์ฐ ํฌ๋ฉด pvalue๋ ๋งค์ฐ ์๊ฒ ๋์ด ๊ท๋ฌด๊ฐ์ค์ด ๊ธฐ๊ฐ๋๋ค.
# scipy๋ฅผ ์ด์ฉํ oneway ANOVA(oneway, twoway๋ ์ฐพ์๋ณด๊ธฐ)
from scipy.stats import f_oneway
f_oneway(g1, g2, g3)
F_onewayResult(statistic=2.6009238802972483, pvalue=0.11524892355706169)
ํฐ ์์ ๋ฒ์น
sample ๋ฐ์ดํฐ ์๊ฐ ์ปค์ง์๋ก, sample์ ํต๊ณ์น๋ ์ ์ ๋ชจ์ง๋จ์ ๋ชจ์์ ๊ฐ๊น์์ง๋ค.
์ค์ฌ๊ทนํ์ ๋ฆฌ(Central Limit Theorem, CLT)
sample ์์ฒด์ ๊ฐฏ์๊ฐ ๋ง์์ง์๋ก, ๊ฐ sample๋ค์ ํ๊ท ์ ์ ๊ท๋ถํฌ์ ๊ทผ์ฌํ๋ค.
Point estimate(์ ์ถ์ ) vs Interval estimate(๊ตฌ๊ฐ ์ถ์ )
์ ์ถ์
- 130cm์ผ ๊ฒ์ด๋ค.
๊ตฌ๊ฐ์ถ์
- 125~135cm ์ ๋์ผ ๊ฒ์ด๋ค.
- 120~140cm ์ ๋์ผ ๊ฒ์ด๋ค.
- 1~300cm ์ ๋์ผ ๊ฒ์ด๋ค.
์์ธกํ๋ '๊ตฌ๊ฐ'์ด ๋์ด์ง์๋ก ๋ง์ ํ๋ฅ (์ ๋ขฐ๋)์ ์ฌ๋ผ๊ฐ๋ค.
์ ๋ขฐ๋
์ ๋ขฐ๋๊ฐ 95% ๋ผ๋ ์๋ฏธ๋ ํ๋ณธ์ 100๋ฒ ๋ฝ์์ ๋, 95๋ฒ์ ์ ๋ขฐ๊ตฌ๊ฐ ๋ด์ ๋ชจ์ง๋จ์ ํ๊ท ์ด ํฌํจ๋๋ค.
์ ๋ขฐ ๊ตฌ๊ฐ์ ์ค์ ๋ฐ ํด์
# ์ ๋ขฐ๊ตฌ๊ฐ ๊ตฌํ๊ธฐ
from scipy import stats
def confidence_interval(data, confidence = 0.95):
"""
์ฃผ์ด์ง ๋ฐ์ดํฐ์ ํ๋ณธ **ํ๊ท **์ ๋ํ ์ ๋ขฐ๊ตฌ๊ฐ์ ๊ณ์ฐ.
๊ธฐ๋ณธ ๊ฐ์ผ๋ก t-๋ถํฌ์ ์๋ฐฉํฅ (two-tailed), 95%์ ์ ๋ขฐ๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์
๋ ฅ ๊ฐ :
data - ์ฌ๋ฌ ๊ฐ๋ก ์ด๋ฃจ์ด์ง (list ํน์ numpy ๋ฐฐ์ด) ํ๋ณธ ๊ด์ธก์น
confidence - ์ ๋ขฐ๊ตฌ๊ฐ์ ์ํ ์ ๋ขฐ๋
๋ฐํ ๋๋ ๊ฐ:
(ํ๊ท , ํํ, ์ํ๊ตฌ๊ฐ)์ผ๋ก ์ด๋ฃจ์ด์ง tuple
"""
data = np.array(data)
mean = np.mean(data)
n = len(data)
# std / sqrt(n)
stderr = stats.sem(data)
# Standard Error of Mean (https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.sem.html)
# s / sqrt(n)
# length_of_one_interval
interval = stderr * stats.t.ppf( (1 + confidence) / 2 , n - 1) # ppf : inverse of cdf
return (mean, mean - interval, mean + interval)
# cdf -> t ๋ฅผ ๋ฃ์ผ๋ฉด %
# ppf -> % ๋ฅผ ๋ฃ์ผ๋ฉด t
# 1 + 0.95 / 2 -> 0.975
# (1 - 0.95) / 2 -> 0.025
# scipy.stats์์ t ๋ฅผ ์ด์ฉํ ๋ฐฉ๋ฒ(ํจ์ฌ ๊ฐํธ)
from scipy.stats import t
# ํ๋ณธ์ ํฌ๊ธฐ
n = len(sample)
# ์์ ๋
dof = n-1
# ํ๊ท ์ ํ๊ท
mean = np.mean(sample)
# ํ๋ณธ์ ํ์คํธ์ฐจ
sample_std = np.std(sample, ddof = 1)
# ํ์ค ์ค์ฐจ
std_err = sample_std / n ** 0.5 # sample_std / sqrt(n)
CI = t.interval(.95, dof, loc = mean, scale = std_err) # https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.t.html
print("95% ์ ๋ขฐ๊ตฌ๊ฐ: ", CI)