빅데이터분석기사 제3작업형(분산 분석)
분산 분석(ANOVA)에는 일원 분산 분석, 이원 분산 분석이 있습니다. 이 두 가지에 대해 각각 어느 경우에 진행하는지 기록해보려 합니다.
1. 일원 분산 분석
일원 분산 분석은 한 가지의 요인에 의해 구분되는 3개 이상의 집단들에 대해 평균 차이가 유의미한지를 검정하는 통계적 검정 기법입니다.
독립 표본 검정에서는 독립성, 정규성, 등분산성을 가정했습니다. 분산 분석에서의 가정 역시 이와 같습니다.
일원 분산 분석의 귀무, 대립 가설은 아래와 같습니다.
- H0: 모든 집단의 평균이 동일하다.
- H1: 집단 간 평균에 차이가 존재한다.
파이썬으로 일원 분산 분석을 진행하려면 scipy.stats의 f_oneway()를 사용해야 합니다.
예를 들기 위해 위와 같이 3가지의 다이어트 요법을 시도하는 3개의 다이어트 그룹들이 있다고 가정합니다.
위의 세 집단을 나누는 단 한 가지의 요인은 다이어트 요법입니다. 이 그룹들 간의 다이어트 효과에 차이가 있는지 검정해보려고 합니다.
one--way ANOVA의 플로우는 이전의 독립 표본 검정과 거의 유사합니다.
1. 정규성 검정(shapiro-wilk)
2. 등분산성 검정(Levene)
3. 일원 분산 분석(f_oneway)
위의 흐름을 따라 일원분산분석을 진행한 결과입니다. 정규성과 등분산성을 만족하여 일원분산분석을 수행하였으나, p-value가 약 0.06이라 유의수준 0.05 하에서 귀무가설을 기각할 수 없네요. 즉, 저 3가지 그룹의 평균에 차이가 있다고 보기 힘든 것입니다.
위의 방식은 scipy의 f_oneway함수를 이용한 것이고, statsmodels의 anova_lm을 이용하는 방법도 있다고 합니다.
R스타일로 분석을 코드를 작성하던데 저는 그냥 scipy 패키지 쓰는게 편한 것 같습니다.
대략적인 흐름만 적어보자면, 우선 statsmodels.formula.api 에서 ols함수를 사용하여 간단한 선형회귀모델을 적합한 뒤, anova_lm에 집어넣어 일원분산분석을 수행하는 방식입니다.
2. 이원 분산 분석
이원 분산 분석의 경우, 일원 분산 분석 처럼 분석 대상이 되는 그룹이 3개 이상인 것은 같은데, 이들을 구분 짓는 요인이 2개인 경우를 의미합니다. 각 요인의 주 효과와 더불어, 요인끼리의 상호작용 효과까지를 검정할 수 있죠.
귀무, 대립 가설은 아래와 같습니다.
주 효과(2가지)
- H0: ~~~에 따른 차이가 없다.
- H1: ~~~에 따른 차이가 있다.
상호 효과
- H0: A 요인과 B 요인 간 상호작용이 ~에 영향을 주지 않는다.
- H1: A 요인과 B 요인 간 상호작용이 ~에 영향을 준다.
기본 가정은 앞선 일원 분산 분석과 동일합니다.
이원 분산 분석의 플로우는, 일원 분산 분석을 수행하는 또다른 방식이었던 statsmodels 패키지를 이용하는 것입니다.
1. 선형 회귀 모델 적합하기
2. anova_lm으로 분산 분석을 수행.
시나공 책을 보며 예제를 따라 수행해보면 아래와 같은 결과를 얻을 수 있습니다.
이 예제에서 나무, 비료 전부 범주형 데이터였습니다. ols에서 범주형은 자동으로 처리해주기는 하지만, 만약 범주형 데이터가 문자가 아닌 숫자로 표현되어 있다면 연속형 변수로 오인될 수 있으니 범주형 설명변수의 경우 C()를 씌워주는 것이 좋습니다. 이원분산분석이므로 나무와 비료의 상호작용 효과 역시 검정해야 합니다. C(나무):C(비료)가 상호작용을 나타내는 항입니다.
위의 anova_table을 분석해보면 각 변수들의 p-value는 0.05보다 작기 때문에 유의수준 5퍼센트에서 귀무가설을 기각할 수 있습니다. 즉 성장률에 있어 나무의 종류와 비료는 유의미하다고 볼 수 있습니다. 그러나 나무와 비료의 상호작용항의 경우, 약 0.22 정도로 0.05보다 더 p-value를 갖습니다. 따라서 귀무가설을 기각할 수 없으므로 나무와 비료의 상호작용이 성장률에 유의미하지는 않다고 해석할 수 있습니다.