분산 분석(ANOVA : Analysis of Variance)
k 개의 집단을 비교하여 다름을 판단하는 것. (k : 3개 이상의 유한한 개수)
분산 분석의 대립가설은 많은 경우의 수를 가지고 있다. 그래서 최소한 2개의 집단은 차이가 있을 것으로 판단한다.
일표본 검정 -> 독립 2표본 -> 분산분석 -> 회귀분석으로 확장된다.
모집단 A, B, C 가 있고 모두 정규분포를 따른다고 가정한다. 각각의 모집단에서 표본을 추출하는데 데이터 2개씩 가져온다고 가정해보자.
우리는 뽑아낸 표본들의 데이터들에 대해 Y의 다름이 얼마나 되는지 측정하고 싶다.
하지만 데이터에서 전체 평균을 빼고 모두를 더하면 무조건 0 이 나온다.
그래서 그 편차를 제곱을 한다.
SST = SSE(Sum of Square Error) + SSB(Sum of Square Between)
SST : Y의 다름의 양 #두 가지 다름의 양으로 나누어진다.
SSE : 집단 내부 다름의 양
SSB : 각 집단 사이의 다름의 양
[SSE 와 SSB 비교하기]
예를 들어 SST(100) = SSE(90) + SSB(10) 이라고 한다면 집단 내부적인 이유 때문에 Y의 다름이 생겼다.
결국 각 집단들이 다르다고 할 수 없고, 집단이 같다고 할 수 있다. (귀무가설 가능성 증가)
반대로, SST(100) = SSE(10) + SSB(90) 이라고 한다면 집단이 달라 대립가설로 갈 가능성이 높다.
#다른 예시
SST(20202) = SSE(20202) + SSB(0) 으로 볼 수 있어 집단 내부적인 이유로 Y의 다름이 생겼다고 볼 수 있다.
표본의 내부만 보아도 집단 내부의 차이가 많다는 것을 알 수 있다.
분산분석은 SSE에 비해서 SSB가 얼마나 더 큰 지에 대해 초점을 맞추어야 한다.
(집단 내부적인 이유보다는 각 집단이 달라서 생기는 것에 더 초점)
하지만 SSB를 구하기 위해 사용하는 데이터의 양과 SSE를 구하기 위해 사용하는 데이터의 양이 각각 다르기 때문에 여기에 관해서도 알고 있어야만 할 것이 있다. (상대적으로 SSE가 SSB보다 항상 많다.)
집단 간의 차이가 있어도 SSE가 데이터의 양이 많아 상대적으로 높아지기 때문에 차이가 없다는 결론이 나올 수 있다. 그래서 데이터의 양이 많으면 많이 나누면 되고, 적다면 적게 나누면 된다고 생각하게 된다.
# MSB(Mean Square Between) / MSE(Mean Square Error)
k : 집단의 개수
n : 모든 표본의 개수
통계적으로 분모와 분자가 모두 제곱의 형태이면 F 라고 불린다. (*등분산 검정 일 때도 출현함.)
[파이썬(Python)]
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import scipy.stats as stats
import researchpy as rp
import pingouin as pg
귀무가설 : iris 품종(setosa, versicolor, virginica)에 따라 꽃잎의 길이(petal_length)에 차이가 없다.
대립가설 : iris 품종(setosa, versicolor, virginica)에 따라 꽃잎의 길이(petal_length)에 차이가 있다.
정규성을 만족한다고 가정하고 진행한다.
1) EDA
rp.summary_cont(iris.petal_length)
* 참고 : SE(Standard Error) - 표준오차
모집단에서 표본으로 나올 수 있는 무수한 후보들이 있다. 그래서 표본의 평균 또한 많을 것이고, 이것을 통해 평균(μ)을 구할 수 있다. 표본의 평균(bar_y) 의 표준편차를 표준오차라고도 부른다.
표준오차가 작다는 것은 어떤 표본이 뽑히더라도 결과가 상당히 비슷하다는 것이다. 그래서 이 표본에 대한 결과를 신뢰할 수 있다.
rp.summary_cont(iris.petal_length.groupby(iris.species))
@ 품종별 꽃잎의 길이에 대한 boxplot
sns.boxplot(x = "species", y = "petal_length", data = iris)
plt.show()
setosa는 확실하게 versicolor 와 virginica 와 차이가 있는 것으로 보인다.
versicolor의 가장 큰 쪽과 virginica의 가장 작은 쪽의 범위 내에 겹치는 범위도 보인다.
2) 등분산 검정
귀무가설 : 등분산이다.
대립가설 : 이분산이다.
stats.levene(iris.loc[iris.species == "setosa", "petal_length"],
iris.loc[iris.species == "versicolor", "petal_length"],
iris.loc[iris.species == "virginica", "petal_length"])
-----------------------------------------------------------------------
LeveneResult(statistic=19.480338801923573, pvalue=3.1287566394085344e-08)
F(검정통계량) = 19.480
p-value = 0.000
유의확률이 0.000 이므로 유의수준 0.05에서 이분산이다.
3) (이분산이 가정된) 분산분석
pg.welch_anova(dv = "petal_length", between = "species", data = iris)
ddof1 : 자유도(k-1) = 2 # k 가 3이다. (품종 3개)
ddof2 : 자유도(n-k) = 78.073
F(검정통계량) = 1828.092
p-unc(유의확률 p-value) = 0.000
유의확률이 0.000 이므로 유의수준 0.05에 대하여 대립가설로 가는 것을 알 수 있다.
* 실습출처 : 2020 SBA아카데미 AI 데이터분석 개발자과정 : 기초 통계 (이부일 CEO님)
'데이터 분석 > 통계(Statistics)' 카테고리의 다른 글
[Python] 상관 분석(산점도, 상관계수) - Pearson, Spearman, Kendall (0) | 2020.09.19 |
---|---|
[Python] 분산 분석(ANOVA) : feat.크루스칼-왈리스 순위합 검정- (2) (0) | 2020.09.10 |
[Python] 카이제곱 검정(교차분석) (1) | 2020.09.03 |
[Python] 대응 2표본 검정(Paired test) - (2) (0) | 2020.08.29 |
[Python] 대응 2표본 검정(Paired test) - (1) (0) | 2020.08.26 |