분산분석

[python/파이썬] 반복하여 여러 집단을 두 요인으로 분석하는 이원배치 분산분석

gilber 2023. 3. 4. 07:27
728x90

분산분석은 분산을 통해

3개 이상의 집단의 모평균을 비교하기 위해 사용합니다.

 

하나의 요인에 근거하여 분석하는 경우

일원배치 분산분석(One-way ANalysis Of VAriance)이라고 합니다.

 

두 개의 요인에 근거하여 분석하는 경우

이원배치 분산분석(Two-way ANalysis Of VAriance)이라고 합니다.

 

세 개 이상의 요인에 근거하여 분석하는 경우

다원배치 분산분석(Multi-way ANalysis Of VAriance)이라고 합니다.

 

예제를 통해 반복 있는 이원배치 분산분석

단계적으로 분석해 보도록 하겠습니다.

 

반복이 있는 경우는

같은 요건에 대해 여러 번의 조사가 이뤄지는 경우입니다.

 

통계초등학교에 재학중인 A, B, C 학생을 임의로 추출하여,

급식 종류별로 만족도를 조사한 결과는 다음과 같습니다. 

 

조사의 객관성을 위해,

같은 종류의 급식에 대해서

반복해서 조사를 하였습니다.

급식에 대한 만족도 결과를 두고,

통계초등학교에서는 급식에 대한 만족도는

학생별로 다르기 때문에 인정하기 어렵다고 주장합니다.

 

반면 학생 측에서는

급식의 종류별로 학생의 만족도가 다르므로,

급식을 개선해야만 학생의 만족도가 올라갈 수 있다고  주장합니다.

 

어느 쪽의 주장이 타당한지

통계적으로 검정해 보도록 하겠습니다.

 

 

<반복있는 이원배치 분산분석 1단계> 귀무가설과 대립가설 설정

학생이나 급식 종류 간 차이가 없다고 생각되었으나,

차이가 있다는 새로운 주장을 한다면,

기존의 주장과는 대립되므로 대립가설이라고 합니다.

 

만약 대립가설이 타당하지 않다면,

기존의 주장으로 돌아가게 되므로, 기존의 주장을 귀무(歸無)가설이라고 합니다.

돌아갈 귀(歸)와 없을 무(無)의 귀무이며,

돌아가서 보니 변한 건 없다는 의미입니다.

 

예제의 귀무가설은 다음과 같습니다.

급식에 대한 만족도는 학생별로 차이가 없다. 

급식에 대한 만족도는 급식종류별로 차이가 없다. 

 

예제의 대립가설은 다음과 같습니다.

급식에 대한 만족도는 학생별로 차이가 있다. 

급식에 대한 만족도는 급식종류별로 차이가 있다. 

 

 

<반복있는 이원배치 분산분석 2단계> 유의수준 설정

일반적으로 발생할 확률이 5%도 채 되지 않는다면,

통계적으로는 발생할 확률이 없다고 판단합니다.

 

이때 기준이 되는 확률이 바로 유의수준입니다.

 

만약 급식에 대한 만족도가 학생별로 차이가 없다고  가정한

귀무가설이 사실일 확률이 5% 이내라면,

귀무가설을 받아들이지 않기로 하겠습니다.

 

우리는 급식에 대한 만족도를 학생별로 급식종류별로 비교 중이며,

차이가 없다고 가정한 귀무가설의 발생확률이 5%도 되지 않는다면,

귀무가설을 받아들이지 않는 것이 타당하기 때문입니다.

 

 

<반복있는 이원배치 분산분석 3단계> 제곱합 계산

분산분석의 기본은 분산분석표를 작성하는 일입니다.

 

분산분석표를 통해 제곱합, 자유도, 평균제곱, F값을 구한 후

F값을 기각치와 비교하여 통계적 판단을 내리게 됩니다.

 

분산분석표 작성의 첫 번째 단계인 제곱합을 계산하겠습니다.

 

제곱합은 제곱들을 더한다는 의미입니다.

여기서 제곱은 각각의 값과 전체 평균과의 차이를 제곱한 것입니다.

 

학생들 간의 차이를 확인하기 위해서는

각 학생의 평균과 전체평균과의 차이를 계산합니다.

급식종류별 차이를 확인하기 위해서는 

각 급식종류별 평균과 전체평균과의 차이를 계산합니다.

 

우선 각 학생별 만족도 평균은 다음과 같습니다.  

A학생의 만족도 평균만 별도로 구하면 다음과 같습니다.

예제의 전체평균은 다음과 같습니다. 

각 학생의 평균만족도와 전체평균과의 차이를 구하면 다음과 같습니다.

for문을 활용하여 각 학생의 평균을 하나씩  i로 불러와서

여기에 전체평균(overall_mean)을 뺀 후,

제곱(**2)한 값들을 모두 합하여 구합니다.

 

각 학생의 평균은 8번(급식종류별 2번 조사) 평가의 평균이므로,

여기에 다시 해당 응답수만큼 곱해야

학생에 대한 제곱합을 구할 수 있습니다.

모든 학생 수의 응답수가 같으므로,

A학생의 경우만 계산을 하면 8이 나옵니다.

응답한 학생이 A면 True이므로,

True의 수만 세서 구합니다. 

 

이를 앞서 구한 각 학생의 만족도 평균과

전체평균과의 차이에 곱한 후

np.sum을 활용해 모두 더하면,

학생의 제곱합이 나옵니다. 

요인 제곱합 자유도 평균제곱 F값 F분포 기각치
학생 9.3333333        
급식          
잔차          
         

 

지금부터는 두 번째 요인인 급식에 대한 제곱합을 구하겠습니다. 

 

급식종류별 만족도 평균은 다음과 같습니다.

급식의 제곱합은 학생의 경우와 동일하며,

다음과 같습니다.

요인 제곱합 자유도 평균제곱 F값 F분포 기각치
학생 9.3333333        
급식 17.3333333        
잔차          
         

 

이제는 잔차의 제곱합을 구하겠습니다.

분산분석에서의 잔차는 주 요인을 제거한 후

남아있는 부분을 뜻합니다. 

 

A학생의 meal1에 대한  첫 번째 잔차는 다음과 같습니다.

 

A학생의 meal1에 대한 첫번째 만족도는 9입니다. 

여기에 A학생 만족도의 평균 8을 빼고,

meal1 만족도 평균인 6.3333333을 뺀 후,

전체평균인 7.3333333를 더하여 구합니다.

따라서 잔차는 2(9 - 8 - 6.3333333 + 7.3333333)가 됩니다.

 

반복 없는 이원배치와의 차이는

반복 조사가 있으므로

A학생의 meal1에 대한 만족도가 

하나가 아니라 여러 개라는 점입니다.

 

잔차의 제곱합을 구하고 있으므로,

구해진 잔차를 제곱하여 얻습니다. 

 

이와 같은 방식으로

A학생의 meal2, meal3, meal4에 대한 잔차의 제곱합과,

나머지 학생들의 모든 제곱합을 더하면 다음과 같습니다. 

각 학생과 급식종류가 순차적으로 반복되므로,

np.repeat과 np.tile을 활용하여 반복된 리스트를 만듭니다.

 

이를 for문에 적용하여 순차적으로 연산을 하면

다음과 같은 순으로 연산이 진행됩니다.

식에 대입하여 얻은 잔차의 제곱합은

36.6666666입니다.

요인 제곱합 자유도 평균제곱 F값 F분포 기각치
학생 9.3333333        
급식 17.3333333        
잔차 36.6666666        
         

 

모든 요인의 제곱합을 구하겠습니다.

 

모든 요인의 제곱합은

각각의 값에서 전체평균을 뺀 후,

제곱한 값들을 모두 더하여 구합니다. 

요인 제곱합 자유도 평균제곱 F값 F분포 기각치
학생 9.3333333        
급식 17.3333333        
잔차 36.6666666        
63.3333333        

전체 제곱합을 별도로 계산하였으나,

모든 요인 각각의 제곱합을 더하여도

전체 제곱합이 됩니다.

 

 

<반복있는 이원배치 분산분석 4단계> 자유도 계산

이제 학생, 급식, 잔차, 전체에 대한

자유도를 구합니다.

 

학생의 자유도는

총 세 명에서 1을 뺀 2가 됩니다.

 

급식의 자유도는

총 네 종류의 급식에서 1을 뺀 3이 됩니다.

 

잔차의 자유도는

학생의 자유도(2)와 급식의 자유도(3)를 곱한 6과

학생의 수(3)와 급식종류 수(4)를 곱한 수에서,

반복되는 횟수(2)에서 1을 뺀 12를 더하여 구합니다.

계산결과는 18(2×3 + 3×4×(2-1))입니다. 

 

전체의 자유도는 

전체 데이터 수(24)에서 1을 뺀 23이 됩니다.

학생, 급식, 잔차의 자유도를 합해도 23이 됩니다.

요인 제곱합 자유도 평균제곱 F값 F분포 기각치
학생 9.3333333 2      
급식 17.3333333 3      
잔차 36.6666666 18      
63.3333333 23      

자유도에 대해서는

다음 글을 참조 부탁드립니다.

https://gilber.tistory.com/39

 

[python/파이썬] 카이제곱분포로 가는 표본분산 분포의 평균

카이제곱분포, t분포, F분포는 모두 일정한 규칙에 따라 검정을 하기 위한 확률분포입니다. 통계적 가설을 검정하고, 검증된 가설은 통계적으로 유의미한 가설이 되며, 진리에 다가가기 위한 열

gilber.tistory.com

 

 

<반복있는 이원배치 분산분석 5단계> 평균제곱 계산

평균제곱은 제곱합을 자유도로 나누어 구합니다.

 

자유도로 나누어 주는 이유는

표본분산의 식에서 유래합니다.

수식의 상세한 의미에 대해서는

다음 글을 참조 부탁드립니다.

https://gilber.tistory.com/39

 

[python/파이썬] 카이제곱분포로 가는 표본분산 분포의 평균

카이제곱분포, t분포, F분포는 모두 일정한 규칙에 따라 검정을 하기 위한 확률분포입니다. 통계적 가설을 검정하고, 검증된 가설은 통계적으로 유의미한 가설이 되며, 진리에 다가가기 위한 열

gilber.tistory.com

각각의 제곱합을 자유도로 나눈

평균제곱은 다음과 같으며,

합에 대한 평균제곱은 구하지 않습니다.

요인 제곱합 자유도 평균제곱 F값 F분포 기각치
학생 9.3333333 2 4.6666666    
급식 17.3333333 3 5.7777777    
잔차 36.6666666 18 2.0370370    
63.3333333 23      

 

 

<반복있는 이원배치 분산분석 6단계> 검정통계량 F값 계산

각각의 요인에 대한 검정통계량 F값은 

해당 요인의 평균제곱을

잔차의 평균제곱으로 나누어 구합니다.

 

검정통계량으로 F값을 사용하는 이유

F분포가 두 분산의 비율을 검정하는 확률분포이기 때문입니다.

 

F분포에 대해서는 

아래글을 참조 부탁드립니다.

https://gilber.tistory.com/43

 

[python/파이썬] F분포

카이제곱분포, t분포, F분포는 모두 일정한 규칙에 따라 검정을 하기 위한 확률분포입니다. 통계적 가설을 검정하고, 검증된 가설은 통계적으로 유의미한 가설이 되며, 진리에 다가가기 위한 열

gilber.tistory.com

요인 제곱합 자유도 평균제곱 F값 F분포 기각치
학생 9.3333333 2 4.6666666 2.2909090  
급식 17.3333333 3 5.7777777 2.8363636  
잔차 36.6666666 18 2.0370370    
63.3333333 23      

 

 

<반복있는 이원배치 분산분석 7단계> 기각치 계산

우리는 유의수준을 5%로 결정하면서,

학생별 만족도 평균이 모두 같다는 귀무가설과

급식별 만족도 평균이 모두 같다는 귀무가설이

발생할 확률이 5%도 되지 않는다면,

해당 귀무가설을 받아들이지 않기로 하였습니다. 

 

발생할 확률의 5%는

그래프 아래의 면적으로 확률을 정하는 확률분포의 면적이

5% 구간에 포함되는 경우입니다.

 

여기서 5%에 해당하는 영역을

기각역이라고 하며,

5% 구간이 시작되는 지점을

기각치라고 합니다. 

 

다양한 확률분포가 있으나,

예제의 경우는

분산의 비율을 통해 확률을 정의하는 

F분포를 통해 확률을 정의합니다.

 

F분포의 그래프의 개형은 자유도에 따라 다릅니다. 

비교하고자 하는 두 분산의 자유도에 따라 달라지며,

학생의 검정통계량은 

학생의 평균제곱을 잔차의 평균제곱으로

나누어 구하였습니다. 

 

따라서 자유도도

학생의 자유도 2와 

잔차의 자유도 18을 사용하며,

자유도 2와 18을 따르는

F분포는 다음과 같습니다. 

이 F분포 그래프의 아래 면적을 확률로 정의하므로,

왼쪽 영역은 상대적으로 발생할 확률이 높은 부분이며,

오른쪽 영역은 상대적으로 발생할 확률이 낮은 부분입니다.

 

이원배치 분산분석은 두 요인을 비교하며,

한 요인의 평균제곱을 

잔차의 평균제곱으로 나누어

검정통계량을 구하였습니다. 

 

따라서 이 검정통계량은 주요인의 평균제곱이 커질수록,

큰 값을 가지게 됩니다. 

그 값은 F분포의 그래프에서 x에 해당하며,

x의 값이 커질수록,

발생할 확률이 낮다는 것을 의미합니다.

 

정규분포와 t분포의 경우에는

예제에 따라서 그래프의 양측을 검정하거나,

한 측만 검정합니다.

 

F분포는 위와 같은 특성으로 인하여,

일반적으로는 오른쪽 한 측만 활용하여,

검정합니다.

 

다시 유의수준 5%로 돌아와서,

자유도 2와 18을 따르는

F분포의 기각역을 나타내면 다음과 같습니다.

검은색으로 얇게 표시된 부분이 기각역입니다.

그래프 아래의 면적을 100%로 봤을 때,

5%에 해당하는 부분입니다. 

 

이러한 기각역이 시작되는 부분이 기각치이며,

유의수준 5%이며,

자유도 2와 18을 따르는 F분포의 기각치는

다음과 같습니다. 

요인 제곱합 자유도 평균제곱 F값 F분포 기각치
학생 9.3333333 2 4.6666666 2.2909090 3.5545571
급식 17.3333333 3 5.7777777 2.8363636  
잔차 36.6666666 18 2.0370370    
63.3333333 23      

 

참고로

급식의 자유도인 3과

잔차의 자유도인 18을 따르는

그래프와 기각역은 다음과 같습니다. 

자유도 3과 18을 따르는 F분포의 기각치는

다음과 같습니다. 

요인 제곱합 자유도 평균제곱 F값 F분포 기각치
학생 9.3333333 2 4.6666666 2.2909090 3.5545571
급식 17.3333333 3 5.7777777 2.8363636 3.1599075
잔차 36.6666666 18 2.0370370    
63.3333333 23      

 

 

<반복없는 이원배치 분산분석 8단계> 통계적 판단

학생별 만족도가 같다고 가정한 귀무가설과

급식별 만족도가 같다고 가정한 귀무가설이

귀무가설의 발생할 확률이 5%도 되지 않는다면,

귀무가설을 받아들이지 않기로 하였습니다. 

 

우선 학생별 만족도가 같다고 가정한

귀무가설부터 검정하겠습니다.

 

예제에서 계산한 F값이,

F분포의 기각치인

3.5545571를 넘어가는 경우에 한하여

귀무가설을 받아들이지 않기로 하였습니다. 

 

학생에 대한 검정통계량 F값은 약 2.2909090이며,

F분포의 기각치는 약 3.5545571이므로,

급식에 대한 만족도는 학생별로 차이가 없다는

귀무가설을 채택합니다.

 

다음으로 급식별 만족도가 같다고 가정한

귀무가설을 검정하겠습니다.

 

예제에서 계산한 F값이,

F분포의 기각치인

3.1599075를 넘어가는 경우에 한하여

귀무가설을 받아들이지 않기로 하였습니다. 

 

학생에 대한 검정통계량 F값은 약 2.8363636이며,

F분포의 기각치는 약 3.1599075이므로,

급식에 대한 만족도는 급식별로 차이가 없다는

귀무가설도 채택합니다.

 

가설의 기각여부는 귀무가설을 중심으로 표현하지만,

결론은 대립가설을 기준으로 표현합니다. 

 

따라서 이번 예제의 결론은 다음과 같습니다.

 

유의수준 5%에서 검정결과,

급식에 대한 만족도는 학생별로 차이가 있다는 

대립가설은 기각합니다.

 

급식에 대한 만족도는 급식종류별로 차이가 있다는

대립가설도 기각합니다. 

 

즉, 학생별로 급식에 대한 만족도가 다르다는

통계초등학교의 주장과

급식종류별로 학생들의 만족도가 다르다는

학생의 주장 모두

통계적인 측면에서 설득력이 약합니다.

 

다만 유의수준이 5%가 아닌

10%로 정하였다면,

귀무가설의 기각여부는 달라집니다.

 

학생에 대한 F분포 기각치는 2.6239469이 되며,

학생별로 급식에 대한 만족도가 차이가 없다는

귀무가설은 변함없이 채택됩니다.

 

그러나 급식에 대한 F분포 기각치는 2.4160053이 되며,

급식종류에 따른 학생들의 대한 만족도가 차이가 없다는

귀무가설은 기각됩니다.

 

따라서 유의수준에 따라

귀무가설 기각여부가 달라지게 되며,

통계적으로는 학생들의 주장이 보다 설득력이 있습니다.

 

 

반복있는 이원배치 분산분석을 이해하기 위해

분산분석표를 직접 작성하여 풀었으나,

statsmodels를 활용해 검정통계량과

기각여부를 간단히 확인할 수 있습니다. 

ols는 ordinary least squares의 약자로서

오차의 제곱합을 최소한으로 하여,

실제값과 예측값간 차이를 최소화하기 위한 방법입니다. 

 

ols 인자에는 각각의 값에 대해

students 컬럼과 meals 컬럼 기준으로 검정하겠다는

공식을 ' '형태로 입력합니다. 

 

이를 분산분석의 선형모델인 anova_lm을 활용하면,

예제와 동일한 분산분석표가 나옵니다. 

 

자유도(df), 제곱합(sum_sq), 평균제곱(mean_sq), F값(F) 

모두 동일한 결과를 확인할 수 있습니다. 

 

차이점은

예제에서는 F분포의 기각치로 가설검정하였으나,

statsmodels에서는 p값으로 가설검정하였다는 것입니다.

 

p값(p-value)은 검정통계량 값에 대해서

귀무가설을 기각하기 위한 최소한의 유의수준을 뜻합니다. 

 

예제에서 학생에 대한 p값은 0.129904이 나왔으며,

유의수준 5% 기준에서 p-value가 0.05보다 높으므로 

귀무가설을 채택하게 됩니다. 

 

예제에서 급식에 대한 p값은 0.067235가 나왔으며,

유의수준 5% 기준에서 p-value가 0.05보다 높으므로 

귀무가설을 채택하게 됩니다. 

 

같은 맥락에서,

p값은 귀무가설이 사실일 확률이라고도 볼 수 있습니다.

p값이 높아질수록 귀무가설 발생확률이 높아지고,

p값이 낮아질수록 대립가설 발생확률이 높아지기 때문입니다.

 

 

반복없는 이원배치 분산분석과

반복있는 이원배치 분산분석의 차이는

교호작용(interaction) 유무에 있습니다.

 

교호작용은 두 요인이 서로의 원인과 결과가 되어

영향을 미치는 현상을 뜻합니다. 

 

반복있는 이원배치 분산분석에 한하여

교호작용을 분산분석표에 포함하여 검정합니다. 

 

교호작용이 발생하는 예를 예제로 들면,

학생과 급식종류 간에 긴밀한 연관성이 있어서,

서로에게 영향을 주게 되어,

각각의 요인에 대한 검정이 어려운 상황을 뜻합니다.

 

따라서 교호작용은 없는 것이 바람직하며,

분산분석에서도 이를 포함하여 검정을 합니다.

앞의 경우보다 C(students):C(meals) 요인이 추가되었으며,

이에 대한 p값도 확인할 수 있습니다. 

 

교호작용에 대한 귀무가설은

'학생과 급식종류 간에 교호작용이 없다'입니다. 

 

귀무가설이 맞다고 전제한 상황에서

교호작용에 대한 p값이 0.05가 넘어가므로

귀무가설을 채택하게 됩니다.

 

결과적으로 예제의 경우는 

교호작용이 없는 것으로 판단됩니다. 

 

교호작용이 있는 것으로 판단된 경우에는

주 요인에 대한 검증이 무의미하므로,

반복있는 이원배치 분산분석 시

반드시 이를 확인해야 합니다.

반응형