분산분석 Analysis of Variance, ANOVA Test
데이터가 서로 다른 세 개 이상의 모집단으로부터 추출된 경우에 사용하는 분석으로,
각 집단의 평균을 비교하는 분석인데 통계적 유의성을 검증할 때 분산을 이용해서 분산분석이라 일컫는다.
분산분석 사용의 이유
3개 이상의 집단에서 1:1 분석을 하지 못하는 이유는 다음과 같다.
먼저, A, B, C 세 집단이 있을 때,
A:B, A:C, B:C를 각각 비교하고, A>B, B>C이면 A>B>C이지 않나?
라는 의문이 들 수 있다.
하지만 유의수준의 차원에서 이를 봤을 때, 표본을 모집단으로 확장했을 때
A>B이지 않을 5%의 확률이 존재하고, 마찬가지로 B>C이지 않을 확률 또한 5% 존재한다.
그러므로, A>B>C가 틀릴 확률은 단순히 생각해도 5%를 뛰어 넘기에, 0.05의 합의점에서 탈락할 수 있다.
분산분석의 의미
표본데이터를 집단별로 나누었을 때, 총분산은 집단내 분산과 집단끼리의 분산으로 나뉘어지므로,
총분산 = 집단내 분산 + 집단간 분산
이라는 수식을 토대로 집단간 분산 값이 크면, 집단간 평균에 차이가 있을 가능성이 커지게 된다는 결론에 도달한다.
위 집단들과 아래 집단들을 보자면,
표본그룹이 많이 겹치게 됨에 따라
상대적으로 집단내 분산이 커지고, 집단간 분산이 작아졌다.
이렇듯, 집단내 분산이 상대적으로 크면 두 집단의 평균이 모집단에서도 차이를 보일지 모르기에,
두 집단의 평균은 같다는 가설을 기각하기 힘들어진다.
이를 여러 집단을 통해 보면 다음과 같아지는데,
보라색 집단의 집단간 분산이
다른 두 집단의 집단간 분산보다 많이 크기 때문에,
보라색 집단이 다른 두 집단과 멀리 떨어져 있어서,
보라색 집단의 평균이 다른 두 집단과 많이 다를수 있다는 결론을 내릴 수 있다.
이 때,
1) 집단내 분산: 각 집단을 구성하는 개별 데이터간에 변동성의 평균
2) 집단간 분산: 각 집단끼리의 평균의 차이, 즉 변동성의 평균
이 된다.
이 때 다시,
F = 집단간 분산 / 집단내 분산
이라고 할 수 있는데,
예를들어 집단간 분산이 2이고 집단내 분산이 10이라면
집단이 다르다는 이유의 분산 2가 집단내에서 우연히 발생할 수 있는 분산인 10보다 작기 때문에,
집단이 달라서 발생한 분산이라기보단, 유연히 발생할 수 있는 분산의 범위 내에 있고,
두 집단이 다르다는 원인이나 근거가 되기 힘들다.
반대로 집단간 분산이 10이고 집단내 분산이 2라면,
집단이 다르다는 이유의 분산 10이 우연히 발생할 수 있는 분산인 2보다 5배나 큰 수치이기에,
두 집단은 우연을 넘어 집단이 다르기 때문에 발생한 분산이 섞여있다는 말이된다.
그러므로 두 집단의 차이/변동성에 의애 집단이 나뉘었다고 볼 수 있다.
F값의 유의성
위에서 나온 F값은 F 분포를 따른다고 알려져 있다.
이때 F 값은 위에서 말했듯이, 같은 모집단에서 나온 두 표본 집단의 분산의 비율을 뜻하고
자유도에 따라 그 모양이 달라지는데, 두 집단의 비율이기 때문에
n과 m 두개의 자유도를 필요로 한다.
다시 말해, 동일한 모집단에서 추출된 두 표본 집단의 분산 비는 F분포를 따라야 하며,
더 구체적으로는 두 집단의 평균이 같은지 아닌지를 볼 수 있는 것이다.
이를 달리 말하면, 서로 다른 모집단에서 추출한 표본의 분산비를 본다면
두 개, 혹은 세 개 이상의 모집단의 평균이 같은지도 볼 수 있는 것이다.
ANOVA 분석을 예시로,
세 모집단의 평균이 동일하다면 (귀무가설)
집단간의 평균차이는 없고, 따라서 집단간 분산 값이 작을 것이다.
그러므로 F값은 1보다 작게 되고, 1보다 크게 되더라도 아주 작은 숫자일 것이고,
이러한 값들은 F 분포상에서 발생할 확률이 아주 크다.
또한, 모집단이 달라 평균값이 다르고, 집단간 분산값이 커진다면
F값은 커질 것이고, 위의 확률분포에 따르면 그 값은 아주 작아질 것이다.
이런 희박한 확률을 가진 값이 나왔기 때문에,
집단간의 평균이 같다는 가정을 기각해야 한다.
이를 파이썬으로 수행하면 다음과 같다.
import scipy.stats as stats
F_statistic, pVal = stats.f_oneway(group1, group2, group3)
[output] F=3.7, p=0.04359
위의 경우, p-value가 충분히 작게 나왔기 때문에 귀무가설을 기각하고,
각 그룹간 분산이 유의미하게 그룹내 분산보다 크다,
즉 각 그룹간의 평균이 유의미하게 다르다라고 말할 수 있다.
다중 검정의 문제
여러 가설을 동시에 검정하는 것을 다중검정이라고 하는데,
이 때 동시에 m개의 가설검정을 수행한다는 사실을 고려하지 않으면 (각 검정마다 유의수준을 잘 조절하지 않으면)
1종 오류 (귀무가설이 참인데 기각하는 오류, False Positive) 발생 확률이 증가한다.
예컨대, 단일검정에서 p-value가 0.05 보다 작다는 것은, 결과값이 False Positive일 확률이 5%라는 것을 감안하는 것.
이 때, 검정의 수가 m개가 되면 False Positive Rate는 0.05 x m의 확률로 (5m%) 높아지는 것이다.
예시로, 검정을 3번을 한다면,
3번의 검정 중 어떠한 하나의 가설이라도 잘못된 판단을 내릴 확률이 15%가 되는 것.
그러므로, 1종 오류를 줄이기 위해서는 유의수준을 더 엄격하게 할 필요가 있다.
이 때,
다수의 검정을 동시에 수행할 경우 발생하는 1종 오류를
"실험별 오류율 Experiment-wise Error Rate / Family-wise Error Rate"
그 안에 개별 검정에 대한 1종 오류를
"비교별 오류율 Comparison-wise Error Rate / Test-wise Error Rate"
라고 한다.
전체 오류율 (1종오류율)을 유지하는 대표적인 방법으로는
1) FWER을 통제하는 방법
2) FDR을 조절하는 방법
가 있다.
1) FWER (Family-wise Error Rate)
Type 1 Error Rate는 귀무가설이 참인 상황에서 귀무가설을 기각할 확률을 의미하며,
FWER은 m개의 가설검정을 수행할 때 적어도 한 개의 Type 1 Error를 발생시킬 확률을 의미한다.
이 때,
V 는 Type 1 Error, 즉 False Positive의 수
S 는 True Positive의 수
U 는 True Negative의 수
W 는 False Negative의 수를 뜻한다.
이 때, FWER을 정의 하자면 다음과 같다.
FWER은 전체에서 어떠한 가설도 잘못 기각하지 않을 확률을 뺀 것으로,
즉, 1 - 모두 다 잘 기각 시킬 확률 이다.
예를들어, 유의 수준 0.05일 때, 100개의 독립적임 검정을 수행한다면
이므로, 99.4%의 확률로 적어도 1개의 Type 1 Error가 발생하게 된다.
이러한 FWER의 통제 방법으로는 다음과 같은 검정들이 있다.
A) Bonferroni 검정
해당 검정은 개별 유의 수준을 검정의 수인 m으로 나눠, 유의 수준을 기존의 α 보다 낮추는 방법이다.
하지만 m값이 높아짐에 따라 개별 검정의 유의수준이 계속해서 작아지기 때문에 귀무가설을 잘 기각시키지 않게 되어
굉장히 보수적이게 되고, True Positive를 잡지 못하게 되어 도리어 Type 2 Error, 즉 False Negative를 발생시킨다.
파이썬으로 Bonferroni 검정을 수행하면 다음과 같다.
from statsmodels.sandbox.stats.multicomp import MultiComparison
import scipy.stats as stats
# 판다스에서 밸류 값과 (weight) 그룹 값 (각 weight가 어느 그룹에 속해 있는지)
comp = MultiComparison(df.weight, df.group)
result = comp.allpairtest(stat.ttest_ind, method="bonf")
result[0]
결과에서 볼 수 있듯, AB, AD, BC의 차이수준만 유의하다고 볼 수 있다.
B) Tuckey's Honestly Significant Difference, HSD 검정
from statsmodels.stats.multicomp import pairwise_tukeyhsd
# 판다스에서 밸류 값과 (weight) 그룹 값 (각 weight가 어느 그룹에 속해 있는지)
hsd = pairwise_tukeyhsd(df['weight'], df['group'], alpha=0.05)
hsd.summary()
2) FDR False Discovery Rate
'Statistics' 카테고리의 다른 글
[STAT 101] 자유도와 카이제곱 분포, 검정 (1) | 2024.08.14 |
---|---|
[STAT 101] T 검정과 BEST검정 (0) | 2024.08.13 |
[STAT 101] 베이지안 AB Test의 전환율 검정과 기대수익 분석 (4) | 2024.08.13 |
[STAT 101] 베르누이 분포와 이항 분포, 그리고 포아송 분포 (0) | 2024.08.12 |
[STAT 101] 정규분포(Normal Distribution)와 t분포(Student's t-distribution) (0) | 2024.08.09 |