[R] - 통계데이터분석 - 일원분산분석(one-way ANOVA) , 분산분석 가정

반응형

일원분산분석(one-way ANOVA)

집단을 구분하는 독립변수가 하나일 때 모집단 간 평균의 동일성을 검정하는 방법

  • 귀무가설 : 집단 간 평균은 모두 동일하다.
  • 대립가설 : 집단 간 평균은 모두 동일하지 않다.
    • 어느 한 집단이라도 다른 집단과 통계적으로 유의한 차이를 보인다면 귀무가설은 기각됨

R programming

InsectSprays 데이터를 이용해서 실습을 진행합니다.

아래의 코드를 통해 주어진 데이터셋에서 살충제의 종류별로 여러가지 함수를 적용해 볼 수 있습니다. 전체 카운트 횟수, 평균, 표준편차를 가져옵니다.


tapply(InsectSprays$count, InsectSprays$spray, length)
tapply(InsectSprays$count, InsectSprays$spray, mean) 
tapply(InsectSprays$count, InsectSprays$spray, sd) 
스크린샷 2023-08-01 오후 1 17 54 스크린샷 2023-08-01 오후 1 18 07
---

gplots 라이브러리에 있는 plotmeans()는 집단 별 평균과 평균에 대한 신뢰구간을 그래프상에 함께 보여줍니다.


library(gplots)

plotmeans(count ~ spray, data=InsectSprays)
스크린샷 2023-08-01 오후 1 27 57

plotmeans() 함수에 더 다양한 옵션을 추가하여 그래프를 예쁘게 보이게 할 수 있습니다.
아래의 코드처럼 다양한 옵션을 추가하면 위의 그래프보다 더 직관적인 그래프를 만들 수 있습니다.


plotmeans(count ~ spray, data=InsectSprays,
          barcol = "tomato", barwidth = 3,
          col="cornflowerblue", lwd=2,
          xlab="Type of Sprays", ylab="Insect Count",
          main = "Performance of Insect Sprays")
스크린샷 2023-08-01 오후 1 30 49

비슷한 방법으로 상자도표를 그릴 수 있습니다.
상자의 가장 아래부분은 전체데이터의 25%가 되는 부분이고 윗 부분은 75%가 되는 지점입니다. 그래서 상자의 길이는 사분위범위를 나타냅니다.
상자 가운데 굵은 선은 중위수를 나타냅니다. 상자의 상단과 하단으로부터 뻗어나온 끝은 상자길이의 1.5배 범위 내에서의 최소값과 최대값을 나타냅니다.
살충제 C,D를 보면 상자 밖을 벗어나 동그란 점이 있는데, 이는 이상치(outlier)라고 부릅니다.


boxplot(count ~ spray, data=InsectSprays, col="tomato",
        xlab="Type of Sprays", ylab="Insect Count",
        main = "Performance of Insect Sprays")
스크린샷 2023-08-01 오후 1 33 30

위에서 그려본 그래프를 보면 각 살충제들은 비슷한 효과를 보여준다고 하기 어렵습니다.
일원분산분석을 통해서 살충제간 살충효과의 평균이 동일한지 통계적으로 검정하겠습니다.

일원분산분석을 수행하는 aov()함수에 검정하고자하는 값을 넣고 summary를 통해 자세한 값을 확인해봅니다.
F 값은 34.7로 나와있고 그에 대응되는 유의수준 Pr(>F) 값은 매우 작은 값으로 나와있습니다. ( 거의 0에 가까움 )
유의확률이 매우 작으므로 귀무가설을 기각하고 대립가설을 채택합니다.

집단간의 차이가 없다는 귀무가설을 기각하고 살충제간 효과는 차이가 있다는 대립가설을 채택합니다.
이렇게 확률이 작다는 것은 모집단에서 6개의 살충제간의 살충 효과의 평균이 같다는 가정하에서 표본으로부터 F값(34.7)을 관측할 확률이 매우 작다는 것을 의미합니다.


> sprays.aov aov(count ~ spray , data=InsectSprays)
sprays.aov
Call:
   aov(formula = count ~ spray, data = InsectSprays)

Terms:
                   spray Residuals
Sum of Squares  2668.833  1015.167
Deg. of Freedom        5        66

Residual standard error: 3.921902
Estimated effects may be unbalanced
> summary(sprays.aov)
            Df Sum Sq Mean Sq F value Pr(>F)    
spray        5   2669   533.8    34.7  2e-16 ***
Residuals   66   1015    15.4                   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1


다중비교를 하기 위해서 TukeyHSD()함수를 사용합니다.
독립변수 spray를 기준으로 아래에 여러가지 다양한 정보를 제공하고 있습니다.
6종류의 살충제가 만들어내는 모든 가능한 비교쌍의 평균차이를 보여주는 열인 diff,
평균 차이에 대한 95% 신뢰구간에 대한 상한값과 하한값 lwr, upr
평균 차이에 대한 p값


> sparays.compare = TukeyHSD(sprays.aov)
> sparays.compare
  Tukey multiple comparisons of means
    95% family-wise confidence level

Fit: aov(formula = count ~ spray, data = InsectSprays)

$spray
           diff        lwr       upr     p adj
B-A   0.8333333  -3.866075  5.532742 0.9951810
C-A -12.4166667 -17.116075 -7.717258 0.0000000
D-A  -9.5833333 -14.282742 -4.883925 0.0000014
E-A -11.0000000 -15.699409 -6.300591 0.0000000
F-A   2.1666667  -2.532742  6.866075 0.7542147
C-B -13.2500000 -17.949409 -8.550591 0.0000000
D-B -10.4166667 -15.116075 -5.717258 0.0000002
E-B -11.8333333 -16.532742 -7.133925 0.0000000
F-B   1.3333333  -3.366075  6.032742 0.9603075
D-C   2.8333333  -1.866075  7.532742 0.4920707
E-C   1.4166667  -3.282742  6.116075 0.9488669
F-C  14.5833333   9.883925 19.282742 0.0000000
E-D  -1.4166667  -6.116075  3.282742 0.9488669
F-D  11.7500000   7.050591 16.449409 0.0000000
F-E  13.1666667   8.467258 17.866075 0.0000000


분산분석 가정

  • 정규성(normality) : 종속변수는 정규분포를 함
  • 등분산성(homoscedasticity, equality of variance) : 각 집단의 분포는 모두 동일한 분산을 가짐

분산분석 진단

  • 정규성
    • 정규Q-Q도표(normal quantile-quantile plot)

일부 관측값들은 정규분포를 따르지 않으며 신뢰구간 바깥에 있습니다. 따라서 정규성 가정을 충분히 충족하지 못한다고 보여집니다.
하지만 그래프만으로 정규성 충족여부가 명확히 드러나지 않는다면 샤피로-윌크검정을 통해 정규성 가정 충족 여부를 검증할 수 있습니다.


library(car)
qqPlot(sprays.aov$residuals, distribution="norm",
       pch=20, col="tomato", id=FALSE,
       main="Q-Q plot", 
       xlab="Theoretical Quantiles", ylab="Residual")

스크린샷 2023-08-01 오후 2 28 52
* 샤피로-윌크검정(Shapiro-Wilt test)

아래의 결과를 보면 유의 확률이 0.05보다 작습니다. 따라서 검정 결과에 따르면 유의수준 0.05에서 관측값이 정규분포한다는 귀무가설을 기각할 수 있습니다. 정규성 가정은 충족하지 못했다고 할 수 있겠네요.


하지만 분산분석은 정규성 가정에 크게 제약을 받지 않는 것으로 알려져있습니다. 데이터가 극단적으로 비정규성을 보이지 않는다면 말이죠.
다만 집단을 구성하는 표본의 크기가 작은 경우 이상치와 같은 비정상적인 값이 미칠 수 있는 영향력을 주의깊게 살필 필요가 있습니다.
비정상적인 관측값은 평균과 표준편차에 큰 영향을 미칠 수 있기 때문에 반드시 이상치들을 제거하는 것이 바람직합니다.


shapiro.test(residuals(sprays.aov))

    Shapiro-Wilk normality test

data:  residuals(sprays.aov)
W = 0.96006, p-value = 0.02226

  • 등분산성
    • 레벤검정(Levene test)
    • 바틀렛검정(Bartlett test)

아래의 코드는 레벤검정과 바틀렛검정을 실행한 R 코드입니다. 두 검정법 모두 유의확률이 0.05보다 낮게 나온 것을 확인할 수 있습니다.
즉, 집단 간의 분산이 동일하다는 귀무가설을 기각합니다. 따라서 이 데이터는 집단 간의 분산이 동일하지 않습니다.


> leveneTest(count ~ spray, data=InsectSprays)
Levene's Test for Homogeneity of Variance (center = median)
      Df F value   Pr(>F)   
group  5  3.8214 0.004223 **
      66                    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
> bartlett.test(count ~ spray, data=InsectSprays)

    Bartlett test of homogeneity of variances

data:  count by spray
Bartlett's K-squared = 25.96, df = 5, p-value = 9.085e-05

반응형