Certificate/data analytics-Google

ANOVA , Analysis of variance, post hoc test, Tukey's HSD(honestly significantly different) test

Olivia-BlackCherry 2023. 7. 25. 15:32

목차

    데이터를 이해한다는 것은 데이터를 가지고 무엇을 할 수  있는지 알게해준다. 다시 말해, 어떤 검정을 실행할 수 있는지 아닌지에 대해, 데이터를 좀더 수정하면 어떤 검정도 가능하는지에 대해 알 수 있다.

    오늘은 categorical variables과 continuous variable의 관계인 분산분석(ANOVA)에 대해 공부한다. 

     

     

    Analysis of Variance(ANOVA) 분산분석

    A group of statistical techniques that test the difference of means between three or more groups.

    ANOVA는 t-test의 확장버전이다. t테스트가 두 개의 그룹 사이의 평균의 차이에 대해 측정했다면, ANOVA는 여러 개의 그룹의 차이를 측정할 수 있다. 즉, 종속변수의 분산과 독립변수의 분산 관계를 통해 내가 만든 regression 모델 성능을 평가한다.

    ex) 학교에서 어떤 공부 방법이 시험 성적에 더 좋은 영향을 미치는지 알고 싶다. 세 가지의 공부 방법으로 공부한 학생으로 세 그룹을 나누고, 각 그룹에 대한 성적을 측정했다. 측정한 성적으로 regression  모델을 만들었다. 측정한 데이터로 분산분석을 통해 이 모델의 통계적으로 유의미한가를 분석한다. 결과적으로 어떤 공부 방법이 다른 공부 방법에 비해 성적이 잘 나오는지 확인했고, 이것이 통계적으로 유의미한가에 대한 검정도 마쳤다.

     

     

    회귀분석 vs 분산분석

    회귀변수는 여러 변수가 종속 변수에 얼마나 영향을 미치는지에 관해 알 수 있다. 분산분석은 여러 변수 중 일부의 쌍을 이루는 변수 간 비교를 통해, 회귀분석에서 변수 간 이해도를 높일 수 있다. 회귀변수가 전체적인 관점에서 그림을 제공한다면, 분산분석은 돋보기처럼 특정 파트를 확대하여 들여다봐서 분석한다. 

    모든 이미지 출처는 구글(이하생략)

     

     

    분산분석의 종류

    1) One-way ANOVA

    Compares the means of one continuous dependent variable based on three or more groups of one categorical variable.

     

    ex) 세 개의 나비의 생명주기가 같을지 다를지에 대해 검정을 하고 싶다. 

    가장 먼저 할 일은, 귀무가설, 대립가설 채택!

    H0: A생명주기평균=B생명주기평균=C생명주기평균

    H1: Not A생명주기평균=B생명주기평균=C생명주기평균

     

     

    2) Two-way ANOVA

    Compares the means of one continuous dependent variable based on three or more groups of two categorical variable.

     

     

    파이썬

    대상 데이터

    예제1. 다이아몬드의 색깔과 가격, 가격(로그씌운)

     

    1. 라이브러리 

    import pandas as pd
    import seaborn as sns
    import statsmodels.api as sm
    from statsmodels.formula.api import ols

     

     

    2. boxplot으로 시각화

    sns.boxplot(x = "color", y = "log_price", data = diamonds)

     

     

    3. 모델 만들기

    model = ols(formula = "log_price ~ C(color)", data = diamonds).fit()
    model.summary()

    ----> price와 color는 통계적으로 유의하다는 결론이 나온다. 

    하지만 각 색상에 따른 가격 간의 차이는 모른다. 

     

     

    4. ANOVA one-way test 

    1) 귀무가설, 대체가설 

    H0: 다이아몬드 색깔에 따라 가격이 동일하다.

    H1: 다이아몬드 색깔에 따라 가격의 차이가 있다.

     

    2) anova_lim()

    ANOVA의 결과는 보통 분산분석표를 사용하여 나타낸다. 파이썬에서는 anova_lim()함수로 분산분석표를 출력한다.

    참고로 typ을 1,2,3 중 하나를 입력할 수 있는데 데이터가 균형을 이루면 모두 동일한 결과를 제공한다.

    sm.stats.anova_lm(model, typ = 2)

     

    sum of square, degree of freedom, F-test, p-value가 나온다. 

    pvalue가 매우 작으므로, 귀무가설을 기각한다. 

     

     

     

    3) typ

    typ은 다양한 방법으로 효과를 검정하는 방식이다. 

    ★ typ=1

    독립변수를 하나씩 추가해가면서 검정하는 방식. 첫 번째 요인을 추가한 뒤 영향을 확인하고, 그 다음 두 번째 요인을 추가한 뒤, 영향을 확인한다. 순서가 바뀌면 결과도 바뀔 수 있다.

     

     typ=2

    다른 요인들이 이미 모델에 포함된 상태에서 각각의 요인들의 영향을 검정한다. 다른 요인과 함께 있을 때, 각 요인의 독립적인 기여도를 확인한다. 통계적으로 안정적이고 보편적으로 많이 쓰인다. 

     

     typ=3

    각 요인의 영향을 검정할 때, 다른 요인과 함께 있을 때 영향을 빼고 검정한다. 일반적으로 type3은 적절하지 않은 경우가 많다. 

     

     

     

    5. ANOVA Two-way test

    예제2 데이터.

     

    1) 모델 만들기

    model2 = ols(formula = "log_price ~ C(color) + C(cut) + C(color):C(cut)", data = diamonds2).fit()

    ---> C(color):C(cut)는 interaction과 관련된다.

     

     

    2) 귀무가설, 대립가설

     

     

    3) two-way test

    sm.stats.anova_lm(model2, typ = 2)

     

    4) 결론

    color, cut에 따라 price(log)값이 다르다

    컬러와 컷 사이에는 interaction effect가 있어서 값에 영향을 미친다..

     

     

     

     

    ANOVA post hoc test 사후분석

    Performs a pairwise comparison between all available groups while controlling for the error rate

    95% 신뢰 수준을 사용하여 여러 가설 검정을 실행하면 거짓 양성 또는 귀무 가설을 거짓으로 기각할 가능성이 높아집니다. 사후 테스트는 이를 제어하며 결과의 정확성에 확신을 유지하면서 많은 가설 테스트를 실행할 수 있습니다. 그렇지 않으면 다중 가설 검정을 실행할 때 매우 주의해야 합니다.

     

    Tukey's HSD(honestly significantly different) test

    다양한 사후분석 테스트 중에 하나이다. 

    from statsmodels.stats.multicomp import pairwise_tukeyhsd
    tukey_oneway = pairwise_tukeyhsd(endog = diamonds["log_price"], groups = diamonds["color"], alpha = 0.05)
    tukey_oneway.summary()

     endog: 그룹 간에 비교되는 변수를 지정합니다. 이 경우 log_price입니다.

     group: 비교 중인 그룹을 나타냅니다. 즉, 색상입니다.

     alpha: 함수에 유의 수준 또는 신뢰 수준을 알려줍니다. 이를 0.05로 설정합니다. 우리는 일반적인 95% 신뢰 수준을 목표로 할 것입니다.

     

     

     

    다음 시간에는, 일련의 파이썬 코드로 ANOVA 절차를 살펴본다.