[ R : ANOVA(Analysis of Variance) ]
패키지 설치 및 로딩하기
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] Paired Test (0) | 2018.08.25 |
[R] Two Sample T-test (0) | 2018.08.25 |
[R] One Sample Test (단일 표본 검정) (0) | 2018.08.25 |