[python/파이썬] 반복없이 여러 집단을 두 요인으로 분석하는 이원배치 분산분석
분산분석은 분산을 통해
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값을 기각치와 비교하여 통계적 판단을 내리게 됩니다.
분산분석표 작성의 첫번째 단계인 제곱합을 계산하겠습니다.
제곱합은 제곱들을 더한다는 의미입니다.
여기서 제곱은 각각의 값과 전체 평균과의 차이를 제곱한 것입니다.
학생들 간의 차이를 확인하기 위해서는
각 학생의 평균과 전체평균과의 차이를 계산합니다.
급식종류별 차이를 확인하기 위해서는
각 급식종류별 평균과 전체평균과의 차이를 계산합니다.
우선 각 학생별 만족도 평균은 다음과 같습니다.
예제의 전체평균은 다음과 같습니다.
각 학생의 전체평균과의 차이를 구하면 다음과 같습니다.
for문을 활용하여 각 학생의 평균을 하나씩 i로 불러와서
여기에 전체평균(overall_mean)을 뺀 후,
제곱(**2)한 값들을 모두 합하여 구합니다.
각 학생의 평균은 네가지 급식에 대한 평균이므로,
여기에 다시 급식종류의 수만큼 곱해야
학생에 대한 제곱합을 구할 수 있습니다.
요인 | 제곱합 | 자유도 | 평균제곱 | F값 | F분포 기각치 |
학생 | 6.5 | ||||
급식 | |||||
잔차 | |||||
합 |
지금부터는 두번째 요인인 급식에 대한 제곱합을 구하겠습니다.
우선 급식종류별 평균은 다음과 같습니다.
예제의 전체평균은 다음과 같습니다.
급식의 제곱합은 학생의 경우와 동일하며,
다음과 같습니다.
요인 | 제곱합 | 자유도 | 평균제곱 | F값 | F분포 기각치 |
학생 | 6.5 | ||||
급식 | 24.9166666 | ||||
잔차 | |||||
합 |
이제는 잔차의 제곱합을 구하겠습니다.
분산분석에서의 잔차는 주 요인을 제거한 후
남아있는 부분을 뜻합니다.
A학생의 meal1에 대한 잔차는 다음과 같습니다.
A학생의 meal1에 대한 만족도는 9입니다.
여기에 A학생 만족도의 평균 8을 빼고,
meal1 만족도 평균인 7을 뺀 후,
전체평균인 7.25를 더하여 구합니다.
따라서 잔차는 1.25(9 -8 - 7 + 7.25)가 됩니다.
잔차의 제곱합을 구하고 있으므로,
구해진 잔차를 제곱하여 얻습니다.
이와 같은 방식으로
A학생의 meal2, meal3, meal4에 대한 잔차의 제곱합과,
나머지 학생들의 모든 제곱합을 더하면 다음과 같습니다.
세 명의 학생과 네가지 급식에 대한 조합별로 잔차를 구하기 위해,
중첩된 for문을 사용하였으며,
ex.iloc[i, j]는 데이터 ex의 모든 행과 열을 불러옵니다.
이렇게 불러온 값에서 학생별, 급식별 평균을 빼고,
전체평균(overall_mean)을 더한 후 제곱한 합이
잔차의 제곱합이 됩니다.
요인 | 제곱합 | 자유도 | 평균제곱 | F값 | F분포 기각치 |
학생 | 6.5 | ||||
급식 | 24.9166666 | ||||
잔차 | 6.8333333 | ||||
합 |
모든 요인의 합은
각각의 값에서 전체평균을 뺀 후,
제곱한 값들을 모두 더하여 구합니다.
계산의 편의를 위해
자료의 형태를 변경하겠습니다.
자료의 형태를 변경 후 구한 모든 값들에 대한 편차는 다음과 같습니다.
요인 | 제곱합 | 자유도 | 평균제곱 | F값 | F분포 기각치 |
학생 | 6.5 | ||||
급식 | 24.9166666 | ||||
잔차 | 6.8333333 | ||||
합 | 38.25 |
모든 요인의 제곱합을 더하여도
전체 제곱합이 됩니다.
<반복없는 이원배치 분산분석 4단계> 자유도 계산
이제 학생, 급식, 잔차, 전체에 대한
자유도를 구합니다.
학생의 자유도는
총 세 명에서 1을 뺀 2가 됩니다.
급식의 자유도는
총 네 종류의 급식에서 1을 뺀 3이 됩니다.
잔차의 자유도는
학생의 자유도(2)와 급식의 자유도(3)를
곱한 6이 됩니다.
전체의 자유도는
전체 데이터 수(12)에서 1을 뺀 11이 됩니다.
학생, 급식, 잔차의 자유도를 합해도 11이 됩니다.
요인 | 제곱합 | 자유도 | 평균제곱 | F값 | F분포 기각치 |
학생 | 6.5 | 2 | |||
급식 | 24.9166666 | 3 | |||
잔차 | 6.8333333 | 6 | |||
합 | 38.25 | 11 |
자유도에 대해서는
다음 글을 참조 부탁드립니다.
[python/파이썬] 카이제곱분포로 가는 표본분산 분포의 평균
카이제곱분포, t분포, F분포는 모두 일정한 규칙에 따라 검정을 하기 위한 확률분포입니다. 통계적 가설을 검정하고, 검증된 가설은 통계적으로 유의미한 가설이 되며, 진리에 다가가기 위한 열
gilber.tistory.com
<반복없는 이원배치 분산분석 5단계> 평균제곱 계산
평균제곱은 제곱합을 자유도로 나누어 구합니다.
자유도로 나누어 주는 이유는
표본분산의 식에서 유래합니다.
수식의 상세한 의미에 대해서는
다음 글을 참조 부탁드립니다.
[python/파이썬] 카이제곱분포로 가는 표본분산 분포의 평균
카이제곱분포, t분포, F분포는 모두 일정한 규칙에 따라 검정을 하기 위한 확률분포입니다. 통계적 가설을 검정하고, 검증된 가설은 통계적으로 유의미한 가설이 되며, 진리에 다가가기 위한 열
gilber.tistory.com
각각의 제곱합을 자유도로 나눈
평균제곱은 다음과 같으며,
합에 대한 평균제곱은 구하지 않습니다.
요인 | 제곱합 | 자유도 | 평균제곱 | F값 | F분포 기각치 |
학생 | 6.5 | 2 | 3.25 | ||
급식 | 24.9166666 | 3 | 8.3055555 | ||
잔차 | 6.8333333 | 6 | 1.1388888 | ||
합 | 38.25 | 11 |
<반복없는 이원배치 분산분석 6단계> 검정통계량 F값 계산
각각의 요인에 대한 검정통계량 F값은
해당 요인의 평균제곱을
잔차의 평균제곱으로 나누어 구합니다.
검정통계량으로 F값을 사용하는 이유는
F분포가 두 분산의 비율을 검정하는 확률분포이기 때문입니다.
F분포에 대해서는
아래글을 참조 부탁드립니다.
[python/파이썬] F분포
카이제곱분포, t분포, F분포는 모두 일정한 규칙에 따라 검정을 하기 위한 확률분포입니다. 통계적 가설을 검정하고, 검증된 가설은 통계적으로 유의미한 가설이 되며, 진리에 다가가기 위한 열
gilber.tistory.com
검정통계량 F값은 다음과 같습니다.
요인 | 제곱합 | 자유도 | 평균제곱 | F값 | F분포 기각치 |
학생 | 6.5 | 2 | 3.25 | 2.8536587 | |
급식 | 24.9166666 | 3 | 8.3055555 | 7.2926834 | |
잔차 | 6.8333333 | 6 | 1.1388888 | ||
합 | 38.25 | 11 |
<반복없는 이원배치 분산분석 7단계> 기각치 계산
우리는 유의수준을 5%로 결정하면서,
학생별 만족도 평균이 모두 같다는 귀무가설과
급식별 만족도 평균이 모두 같다는 귀무가설이
발생할 확률이 5%도 되지 않는다면,
해당 귀무가설을 받아들이지 않기로 하였습니다.
발생할 확률의 5%는
그래프 아래의 면적으로 확률을 정하는 확률분포의 면적이
5% 구간에 포함되는 경우입니다.
여기서 5%에 해당하는 영역을
기각역이라고 하며,
5% 구간이 시작되는 지점을
기각치라고 합니다.
다양한 확률분포가 있으나,
예제의 경우는
분산의 비율을 통해 확률을 정의하는
F분포를 통해 확률을 정의합니다.
F분포의 그래프의 개형은 자유도에 따라 다릅니다.
비교하고자하는 두 분산의 자유도에 따라 달라지며,
학생의 검정통계량은
학생의 평균제곱을 잔차의 평균제곱으로
나누어 구하였습니다.
따라서 자유도도
학생의 자유도 2와
잔차의 자유도 6을 사용하며,
자유도 2와 6을 따르는
F분포는 다음과 같습니다.
이 F분포 그래프의 아래 면적을 확률로 정의하므로,
왼쪽 영역은 상대적으로 발생할 확률이 높은 부분이며,
오른쪽 영역은 상대적으로 발생할 확률이 낮은 부분입니다.
이원배치 분산분석은 두 요인을 비교하며,
한 요인의 평균제곱을
잔차의 평균제곱으로 나누어
검정통계량을 구하였습니다.
따라서 이 검정통계량은 주요인의 평균제곱이 커질수록,
큰 값을 가지게 됩니다.
그 값은 F분포의 그래프에서 x에 해당하며,
x의 값이 커질수록,
발생할 확률이 낮다는 것을 의미합니다.
정규분포와 t분포의 경우에는
예제에 따라서 그래프의 양측을 검정하거나,
한 측만 검정합니다.
F분포는 위와 같은 특성으로 인하여,
일반적으로는 오른쪽 한 측만 활용하여,
검정합니다.
다시 유의수준 5%로 돌아와서,
자유도 2와 6을 따르는
F분포의 기각역을 나타내면 다음과 같습니다.
검정색으로 얇게 표시된 부분이 기각역입니다.
그래프 아래의 면적을 100%로 봤을 때,
5%에 해당하는 부분입니다.
이러한 기각역이 시작되는 부분이 기각치이며,
유의수준 5%이며,
자유도 2와 6을 따르는 F분포의 기각치는
다음과 같습니다.
요인 | 제곱합 | 자유도 | 평균제곱 | F값 | F분포 기각치 |
학생 | 6.5 | 2 | 3.25 | 2.8536587 | 5.1432528 |
급식 | 24.9166666 | 3 | 8.3055555 | 7.2926834 | |
잔차 | 6.8333333 | 6 | 1.1388888 | ||
합 | 38.25 | 11 |
참고로
급식의 자유도인 3과
잔차의 자유도인 6을 따르는
그래프와 기각역은 다음과 같습니다.
자유도 3과 6을 따르는 F분포의 기각치는
다음과 같습니다.
요인 | 제곱합 | 자유도 | 평균제곱 | F값 | F분포 기각치 |
학생 | 6.5 | 2 | 3.25 | 2.8536587 | 5.1432528 |
급식 | 24.9166666 | 3 | 8.3055555 | 7.2926834 | 4.7570626 |
잔차 | 6.8333333 | 6 | 1.1388888 | ||
합 | 38.25 | 11 |
<반복없는 이원배치 분산분석 8단계> 통계적 판단
학생별 만족도가 같다고 가정한 귀무가설과
급식별 만족도가 같다고 가정한 귀무가설이
귀무가설의 발생할 확률이 5%도 되지 않는다면,
귀무가설을 받아들이지 않기로 하였습니다.
우선 학생별 만족도가 같다고 가정한
귀무가설부터 검정하겠습니다.
예제에서 계산한 F값이,
F분포의 기각치인
5.1432528를 넘어가는 경우에 한하여
귀무가설을 받아들이지 않기로 하였습니다.
학생에 대한 검정통계량 F값은 약 2.8536587이며,
F분포의 기각치는 약 5.1432528이므로,
급식에 대한 만족도는 학생별로 차이가 없다는
귀무가설을 채택합니다.
다음으로 급식별 만족도가 같다고 가정한
귀무가설을 검정하겠습니다.
예제에서 계산한 F값이,
F분포의 기각치인
4.7570626를 넘어가는 경우에 한하여
귀무가설을 받아들이지 않기로 하였습니다.
학생에 대한 검정통계량 F값은 약 7.2926834이며,
F분포의 기각치는 약 4.7570626이므로,
급식에 대한 만족도는 급식별로 차이가 없다는
귀무가설을 기각합니다.
가설의 기각여부는 귀무가설을 중심으로 표현하지만,
결론은 대립가설을 기준으로 표현합니다.
따라서 이번 예제의 결론은 다음과 같습니다.
유의수준 5%에서 검정결과,
급식에 대한 만족도는 학생별로 차이가 있다는
대립가설은 기각합니다.
급식에 대한 만족도는 급식종류별로 차이가 있다는
대립가설은 채택합니다.
즉, 학생별로 급식에 대한 만족도는 다르기 때문에
급식에 대한 만족도를 인정하기 어렵다는
통계초등학교의 주장은
통계적인 측면에서는 설득력이 부족합니다.
급식에 대한 만족도는 학생이 아니라
급식종류별로 다르기 때문에,
급식종류를 개선해야 급식에 대한 만족도를 올릴 수 있습니다.
반복없는 이원배치 분산분석을 이해하기 위해
분산분석표를 직접 작성하여 풀었으나,
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.134611이 나왔으며,
유의수준 5% 기준에서 p-value가 0.05보다 높으므로
귀무가설을 채택하게 됩니다.
예제에서 급식에 대한 p값은 0.019964가 나왔으며,
유의수준 5% 기준에서 p-value가 0.05보다 낮으므로
귀무가설을 기각하게 됩니다.
같은 맥락에서,
p값은 귀무가설이 사실일 확률이라고도 볼 수 있습니다.
p값이 높아질 수록 귀무가설 발생확률이 높아지고,
p값이 낮아질 수록 대립가설 발생확률이 높아지기 때문입니다.