정보

    • 업무명     : 기초통계 : 분산분석 (ANOVA 검정)

    • 작성자     : 박진만

    • 작성일     : 2020-04-15

    • 설   명      :

    • 수정이력 :

     

     내용

    [개요]

     

    [특징]

    • 통계이론 설명

     

    [활용 자료]

    • 없음

     

    [자료 처리 방안 및 활용 분석 기법]

    • 없음

     

    [사용법]

    • 내용 참조

     

     

     상세 내용

    [분산분석 (ANOVA 검정) ]

    • 분산 분석 (ANOVA)은 2 개 이상의 실험군의 모평균이 동일한 지 여부를 검정하는 방법의 하나이다.

    • R에서는 aov함수 및 anova함수 등이 분산 분석을 수행하는 함수이다.

    • 이 페이지에서는 시뮬레이션 데이터를 생성하여 분산 분석을 실행하는 예를 설명한다.

    • 시뮬레이션 데이터는 4 개의 실험군으로 이루어지며, 실험군에는 10 개체의 데이터가 포함되는 것으로 한다. 

    • 비교를 위해 4 개의 실험군을 각각 A, B, C, D로 놓는다. 여기서 A, B, C의 3 군은 평균 100 분산 10의 정규 분포에서 데이터를 샘플링한다. 한편, D 군은 평균 140 분산 10의 정규 분포에서 데이터를 샘플링한다.

    A <- rnorm(10, mean = 100, sd = sqrt(10))
    B <- rnorm(10, mean = 100, sd = sqrt(10))
    C <- rnorm(10, mean = 100, sd = sqrt(10))
    D <- rnorm(10, mean = 140, sd = sqrt(10))
    
    d <- data.frame(A = A, B = B, C = C, D = D)
    head(d)
    ##           A         B         C        D
    ## 1  98.52897  99.32576 101.61557 138.4413
    ## 2 100.58735  95.54787 103.35295 138.9097
    ## 3  94.29980  99.15260  97.86004 135.7413
    ## 4 101.57001 102.17695  97.74807 140.2136
    ## 5  98.29363 101.43227 101.45534 139.3579
    ## 6 100.44516  98.56665 104.61613 138.7526

     

    • 분산 분석에서 이용하기 쉽도록 데이터 형을 변환한다. 변경된 데이터는 2 열에서 첫 번째 열은 실험군의 이름, 두 번째 열에는 실험군의 각 개체의 관측 데이터이다.

    library(reshape)
    
    x <- melt(d, variable_name = "group")
    head(x)
    ##    group     value
    ## 1 GroupA  98.52897
    ## 2 GroupA 100.58735
    ## 3 GroupA  94.29980
    ## 4 GroupA 101.57001
    ## 5 GroupA  98.29363
    ## 6 GroupA 100.44516

     

    [aov 함수]

    • 샘플 데이터를 준비 했으므로, aov함수를 이용하여 분산 분석을 실시 해 보자.

    • 각 실험군의 모평균이 같은 것은 각 개체의 값은 실험군의 영향을 받고 있는지 해석 할 수있다. 

    • 즉, 각 개체의 값 value을 실험군 group으로 설명 할 수 있는지 여부라는 것을 바꿔 말할 수 있다.

    • 그래서 aov에 대입하는 식으로 value ~ group한다. 

    • 다음 예제에서는 group숫자가 아닌 수준 인 것을 명시하기 위해 factor(group)변환하고 이용하고 있다.

     

    res <- aov(value ~ factor(group), data = x)
    
    summary(res)
    ##               Df Sum Sq Mean Sq F value Pr(>F)
    ## factor(group)  3  12545    4182   440.6 <2e-16 ***
    ## Residuals     36    342       9
    ## ---
    ## Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

     

    • factor(group)줄을 보면 Pr (> F) 값이 2 × 10^-16 이하로 매우 작아지고있다. 분산 분석의 결과로 A, B, C, D의 4 개 군의 모평균이 동일하지 않다는 것을 알 수있다. 

    • 그러나 분산 분석에서는 어떤 군의 모평균이 컸다거나 작았는지 까지는 판정 할 수 없다.

     

    [anova 함수]

    • 샘플 데이터를 준비 했으므로, anova함수를 이용하여 분산 분석을 실시하는 예시를 수행 해 보자.

    • anova함수는 일반화 선형 모형 분석 결과에서 분산 분석의 결과를 계산하는 함수이다. 따라서 anova함수를 사용하기 전에 일반화 선형 모형에 의한 분석을 할 필요가 있다.

    • 각 실험군의 어머니 평균이 같은지 것은 각 개체의 값은 실험군의 영향을 받고 있는지 해석 할 수 있다.

    • 즉, 각 개체의 값 value을 실험군 group으로 설명 할 수 있는지 여부라는 것을 바꿔 말할 수 있다. 

    • 그래서 aov에 대입하는 식으로 value ~ group한다. 다음 예제에서는 group숫자가 아닌 수준 인 것을 명시하기 위해 factor(group)변환하고 이용한다.

    l <- lm(value ~ factor(group), data = x)
    res <- anova(l)
    
    res
    ## Analysis of Variance Table
    ## 
    ## Response: value
    ##               Df  Sum Sq Mean Sq F value    Pr(>F)
    ## factor(group)  3 12544.7  4181.6   440.6 < 2.2e-16 ***
    ## Residuals     36   341.7     9.5
    ## ---
    ## Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

     

    • anova와 lm실행 결과가 aov실행 결과와 조금 다르다. 이것은 aov이 유형 I의 평행화를, lm은 타입 II의 평행 화를 이용하여 분석에 이용했기 때문이다. 

    • 가령 다음과 같이 lm함수에 더미 변수를 제공하면 실행 결과가 aov함수와 일치하게 된다.

    l <- lm(value ~ 0 + factor(group), data = x)
    res <- anova(l)
    
    res
    ## Analysis of Variance Table
    ## 
    ## Response: value
    ##               Df Sum Sq Mean Sq F value    Pr(>F)
    ## factor(group)  4 492146  123036   12964 < 2.2e-16 ***
    ## Residuals     36    342       9
    ## ---
    ## Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

     

     

     참고 문헌

    [논문]

    • 없음

    [보고서]

    • 없음

    [URL]

    • 없음

     

     문의사항

    [기상학/프로그래밍 언어]

    • sangho.lee.1990@gmail.com

    [해양학/천문학/빅데이터]

    • saimang0804@gmail.com

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    본 블로그는 파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음
    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기