이원분산분석
이원분산분석
예제 데이터 poison.csv를 다운로드 받는다.
데이터를 연다.
dat = read.csv('poisons.csv')
head(dat)
| X | time | poison | treat | 
|---|---|---|---|
| 1 | 0.31 | 1 | A | 
| 2 | 0.45 | 1 | A | 
| 3 | 0.46 | 1 | A | 
| 4 | 0.43 | 1 | A | 
| 5 | 0.36 | 2 | A | 
| 6 | 0.29 | 2 | A | 
이 데이터에서 종속변수는 time, 독립변수는 poison과 treat이다.
poison이 수치형으로 표현되어 있으므로 factor로 변환해준다.
dat$poison = as.factor(dat$poison)
균형설계자료인지 확인한다.
replications(time ~ poison * treat, dat)
- poison
- 16
- treat
- 12
- poison:treat
- 4
- poison 요인으로 구분한 집단별 표본수는 모두 16으로 동일
- treat 요인구분한 집단별 표본수는 모두 12으로 동일
- poison과 treat 요인으로 구분한 각 집단별 표본수는 모두 4로 동일
- 모든 집단별 표본수가 동일하므로, 균형설계자료
이원분산분석 실시:
m1 = aov(time ~ poison * treat, dat)
summary(m1)
             Df Sum Sq Mean Sq F value   Pr(>F)    
poison        2 1.0330  0.5165  23.222 3.33e-07 ***
treat         3 0.9212  0.3071  13.806 3.78e-06 ***
poison:treat  6 0.2501  0.0417   1.874    0.112    
Residuals    36 0.8007  0.0222                     
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
결과 해석: - poison: F(2, 36) = 23.222, p < 0.05로 유의미. 즉 poison의 수준에 따라 평균에 차이가 난다고 볼 수 있음 - treat: F(3, 36) = 13.806, p < 0.05로 유의미. 즉 treat의 수준에 따라 평균에 차이가 난다고 볼 수 있음 - poison:treat: F(6, 36) = 1.874, p > 0.05로 유의미하지 않음. 상호작용 효과는 발견하지 못함
비균형자료의 이원분산분석
예제 데이터 poison.csv를 다운로드 받는다.
데이터를 연다. poison이 수치형으로 표현되어 있으므로 factor로 변환해준다.
dat = read.csv('poisons.csv')
dat$poison = as.factor(dat$poison)
예시를 위해 자료를 하나 삭제하여 비균형 설계로 바꿔보자.
dat2 = dat[-1,]  # 데이텃의 첫 행을 제거한다
replications(time ~ poison * treat, dat2)
- $poison
- 1
- 15
- 2
- 16
- 3
- 16
 
- $treat
- A
- 11
- B
- 12
- C
- 12
- D
- 12
 
- $`poison:treat`
- A - B - C - D - 3 - 4 - 4 - 4 - 4 - 4 - 4 - 4 - 4 - 4 - 4 - 4 
삭제된 자료는 poison은 1, treat는 A이다. 해당하는 집단의 표본 수가 다른 집단보다 하나씩 적은 것을 확인할 수 있다.
이제 집단별 표본수가 동일하지 않으므로 비균형설계자료가 되었다.
이원분산분석을 실시한다.
m2 = aov(time ~ poison * treat, dat2)
summary 대신 Anova(m2, type="III")로 결과를 확인한다.
library(car)
Anova(m2, type ="III")
Loading required package: carData
| Sum Sq | Df | F value | Pr(>F) | |
|---|---|---|---|---|
| (Intercept) | 0.59853333 | 1 | 26.627969 | 9.880841e-06 | 
| poison | 0.09620606 | 2 | 2.140041 | 1.327926e-01 | 
| treat | 0.36709833 | 3 | 5.443909 | 3.525162e-03 | 
| poison:treat | 0.24100650 | 6 | 1.787011 | 1.304056e-01 | 
| Residuals | 0.78671667 | 35 | NA | NA | 
p값이 아주 작을 경우에는 9.880841e-06와 같이 지수 표기법으로 출력될 수 있다. e-06은 10의 -6승을 곱하라는 것으로, 소수점 아래 6번째 자리라는 뜻이다. 지수 표기법이 보기 불편할 경우 아래와 같이 소수점 7번째 자리까지는 지수표기법을 쓰지 않게 한다.
options(scipen=7)
결과를 다시 출력한다.
Anova(m2, type ="III")
| Sum Sq | Df | F value | Pr(>F) | |
|---|---|---|---|---|
| (Intercept) | 0.59853333 | 1 | 26.627969 | 0.000009880841 | 
| poison | 0.09620606 | 2 | 2.140041 | 0.132792625491 | 
| treat | 0.36709833 | 3 | 5.443909 | 0.003525161961 | 
| poison:treat | 0.24100650 | 6 | 1.787011 | 0.130405579248 | 
| Residuals | 0.78671667 | 35 | NA | NA | 
treat만 통계적으로 유의미하다. (p < .05)