본문 바로가기

■ 프로그래밍/R

[R] ANOVA (Analysis of Variance)

14


패키지 설치 및 로딩하기

install.packages("car")       # Levene Test
install.packages("agricolae") # duncan test
install.packages("nparcomp")  # 비모수 다중비교
library(car)
library(agricolae)
library(nparcomp)


ANOVA

  • 언제 사용 하는가?
    A. 서로 독립인 3개 이상의 모집단의 평균이 다른지/차이가 나는지를 통계적으로 분석할 때 사용한다.


  • 자료: 질적자료(집단이 3개 이상으로 이루어 져야함) 1개, 양적자료 1개
    ex. 기업 영업이익에 차이가 나는 이유를 알아봐라. ex. 연령대? 거주지? 가격?


InsectSprays 데이터 사용
R에 내장되어 있는 데이터라 바로 불러올 수 있다.
InsectSprays는 A-F살충제가 얼마나 많은 해충을 죽였는가에 대한 데이터이다.
- 변수명: count, spray


1단계: 정규성 검정

  • 귀무가설: 정규분포를 따른다
  • 대립가설: 정규분포를 따르지 않는다
by(InsectSprays$count, InsectSprays$spray, shapiro.test)
## InsectSprays$spray: A
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.95757, p-value = 0.7487
## 
## -------------------------------------------------------- 
## InsectSprays$spray: B
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.95031, p-value = 0.6415
## 
## -------------------------------------------------------- 
## InsectSprays$spray: C
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.85907, p-value = 0.04759
## 
## -------------------------------------------------------- 
## InsectSprays$spray: D
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.75063, p-value = 0.002713
## 
## -------------------------------------------------------- 
## InsectSprays$spray: E
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.92128, p-value = 0.2967
## 
## -------------------------------------------------------- 
## InsectSprays$spray: F
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.88475, p-value = 0.1009

결론: C(0.0476)와 D(0.003)때문에 정규분포를 따르지 않는다.


2단계: Kruskal-Wallis Rank Sum Test

kruskal.test(count ~ spray, data = InsectSprays) # y ~ group, data 
## 
##  Kruskal-Wallis rank sum test
## 
## data:  count by spray
## Kruskal-Wallis chi-squared = 54.691, df = 5, p-value = 1.511e-10

결론: 유의확률이 0.000이므로, 유의수준 0.05하에서 살충제의 종류에 따라 통계적으로 유의한 살충 효과가 있는 것으로 나타났다. (chi-squared(카이제곱) = 54.691, p < 0.001)
따라서, 대립 채택


3단계: (비모수) 다중비교(Multiple Comparison) = 사후분석(Post-Hoc)

nparcomp : Non-Parametric Method : Multiple Comparison
type : Tukey(보수), Duncan(진보)

nparcomp::nparcomp(count ~ spray,         # y(양적) ~ group(질적/집단)
                   data = InsectSprays,
                   type = "Tukey")        # Tukey or Duncan


만약 정규성 가정, 이분산 만족 됐다면

3단계: 만약 정규성 가정 만족, 등분산 깨짐 = 이분산 만족

insect.anova <- oneway.test(count ~ spray, 
                            data = InsectSprays,
                            var.equal = FALSE)
insect.anova
## 
##  One-way analysis of means (not assuming equal variances)
## 
## data:  count and spray
## F = 36.065, num df = 5.000, denom df = 30.043, p-value = 7.999e-12

결론: 유의확률이 0.000이므로 유의수준 0.05에서 살충제의 종류에 따라 통계적으로 유의한 살충 효과가 있다. (F = 36.065, p < 0.001)


결과 보기

insect.anova <- aov(count ~ spray, data = InsectSprays)
summary(insect.anova) 
##             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



4단계: 다중비교(Multiple Comparison) = 사후분석(Post-Hoc)

조건: 1단계 정규성 만족, 3단계의 결론이 대립가설(집단 간의 차이가 있어야함)


i. Tukey

TukeyHSD(분산분석의 결과물) : Honesty Significant Different

TukeyHSD(insect.anova)
##   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

B-A의 p adj=0.995이므로, A집단과 B집단에는 차이가 있지만, 통계적으로 무시하겠다.


ii. Duncan
agricolae::duncan.test(insect.anova,
                       "spray", 
                       alpha = 0.05,
                       console = TRUE)
## 
## Study: insect.anova ~ "spray"
## 
## Duncan's new multiple range test
## for count 
## 
## Mean Square Error:  15.38131 
## 
## spray,  means
## 
##       count      std  r Min Max
## A 14.500000 4.719399 12   7  23
## B 15.333333 4.271115 12   7  21
## C  2.083333 1.975225 12   0   7
## D  4.916667 2.503028 12   2  12
## E  3.500000 1.732051 12   1   6
## F 16.666667 6.213378 12   9  26
## 
## Alpha: 0.05 ; DF Error: 66 
## 
## Critical Range
##        2        3        4        5        6 
## 3.196719 3.363151 3.473113 3.553238 3.615084 
## 
## Means with the same letter are not significantly different.
## 
##       count groups
## F 16.666667      a
## B 15.333333      a
## A 14.500000      a
## D  4.916667      b
## E  3.500000      b
## C  2.083333      b


aov와 다중비교
- 정규성 - 등분산 - 등분산/이분산이 가정된 분산분석 - 대립가설 시, 다중비교 1)tukey 2) duncan
- aov는 등분산/이분산을 따지지 않고 분산분석 시행.


참고: 유의확률이 수학적 표현(e)으로 나오지 않도록 설정

options(scipen = 100)


실습

R에 내장되어 있는 mtcars 데이터로 실행해보자.

head(mtcars, 3)
##                mpg cyl disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4     21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag 21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
## Datsun 710    22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
mtcars$cyl <- as.factor(mtcars$cyl)
  • 귀무가설: cyl(실린더의 개수에 따라 mpg에 차이가 없다
  • 대립가설: cyl의 개수에 따라 mpg에 차이가 있다



'■ 프로그래밍 > R' 카테고리의 다른 글

[R] Linear Regression Analysis 선형회귀분석  (2) 2018.09.04
[R] Correlation Analysis 상관분석  (0) 2018.08.27
[R] ANOVA (Analysis of Variance)  (0) 2018.08.25
[R] Paired Test  (0) 2018.08.25
[R] Two Sample T-test  (0) 2018.08.25
[R] One Sample Test (단일 표본 검정)  (0) 2018.08.25