일원배치 분산분석(One-Way ANOVA)을 수행할 때 주의해야 할 사항은 다음 3가지 입니다.
1. 독립성: 독립변수의 그룹군은 상호 독립적이어야 함
2. 정규성: 독립변수에 대한 종속변수는 정규분포를 만족해야 함
3. 등분산성: 독립변수에 대한 종속변수의 분산은 각 군마다 동일해야 함
따라서 R을 이용한 One-Way ANOVA에서도 위의 가정을 확인 후 진행을 해야 합니다.
iris 데이터에서 Species별 Sepal.Width에 대한 분석을 예로들어 진행하면 다음과 같습니다.
1. 먼저 정규성 검증을 위해서는 Shapiro-Wilk를 수행합니다.
> tapply(iris$Sepal.Width, iris$Species, shapiro.test)
Shapiro-Wilk normality test
data: X[[i]]
W = 0.97172, p-value = 0.2715
$versicolor
Shapiro-Wilk normality test
data: X[[i]]
W = 0.97413, p-value = 0.338
$virginica
Shapiro-Wilk normality test
data: X[[i]]
W = 0.96739, p-value = 0.1809
3개 그룹의 p-value가 모두 0.05 이상이므로 독립변수가 정규성을 충족합니다.
2. 종속변수의 등분산성을 검증을 위해 bartlett과 levene 검증을 수행합니다.
> bartlett.test(Sepal.Width~Species, data=iris)
Bartlett test of homogeneity of variances
data: Sepal.Width by Species
Bartlett's K-squared = 2.0911, df = 2, p-value = 0.3515
p-value가 0.05보다 크므로 등분산성을 충족합니다.
> library(car) # Levene 검증을 위해 car 패키지를 활용해야 합니다.
> leveneTest(Sepal.Width~Species, data=iris)
Levene's Test for Homogeneity of Variance (center = median)
Df F value Pr(>F)
group 2 0.5902 0.5555
147
p-value가 0.05보다 크므로 등분산성을 충족합니다.
3. 정규성과 등분산성을 충족하므로 One-Way ANOVA를 수행합니다.
One-Way ANOVA 수행을 위한 여러 함수가 있지만, 가장 편리하고 많은 정보를 주는 oneway()를 추천합니다.
userfriendlyscience 패키지를 설치하고 실행해야 합니다.
> library(userfriendlyscience)
> oneway(iris$Species,
y = iris$Sepal.Width,
fullDescribe=TRUE,
corrections=TRUE)
### Oneway Anova for y=Sepal.Width and x=Species (groups: setosa, versicolor, virginica)
Omega squared: 95% CI = [.28; .49], point estimate = .39
Eta Squared: 95% CI = [.3; .48], point estimate = .4
SS Df MS F p
Between groups (error + effect) 11.34 2 5.67 49.16 <.001
Within groups (error only) 16.96 147 0.12
### Welch correction for nonhomogeneous variances:
F[2, 97.4] = 45.01, p < .001.
### Brown-Forsythe correction for nonhomogeneous variances:
F[2, 142.65] = 49.16, p < .001.
4. 마지막으로 결과를 해석합니다.
F값이 49.16이며 p-value가 0.05 이하이므로 그룹별 평균의 차이가 통계적으로 유의미합니다.
만일 독립변수의 등분산성이 충족되지 않는 경우에는 밑에 있는 Welch와 Brown-Forsythe의 p-value를 참조해야 합니다.
5. 추가
3단계에서 Levene를 생략하고 다음과 같이 oneway()에서 Levene를 실행할 수 도 있습니다.
> oneway(iris$Species,
y = iris$Sepal.Width,
levene=TRUE,
fullDescribe=TRUE,
corrections=TRUE)
PyCharm에서 TensorFlow 이용을 위한 개발환경 설정(윈도우10) (0) | 2018.11.22 |
---|---|
Python pandas 데이터프레임 자주 사용되는 구문 (0) | 2018.01.26 |
R에서 T-Test 반복수행과 통계표 작성 (1) | 2018.01.12 |
R에서 T-Test 사용방법 (0) | 2018.01.08 |
R을 이용해서 주가 데이터 가져오기: Yahoo Finance 이용 (0) | 2014.03.12 |