이원분산분석 :: 통계 - mindscale
Skip to content

이원분산분석

이원분산분석

예제 데이터 poison.csv를 다운로드 받는다.

데이터를 연다.

dat = read.csv('poisons.csv')
head(dat)
Xtimepoisontreat
1 0.311 A
2 0.451 A
3 0.461 A
4 0.431 A
5 0.362 A
6 0.292 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`
ABCD
3444
4444
4444

삭제된 자료는 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 SqDfF valuePr(>F)
(Intercept)0.59853333 1 26.627969 9.880841e-06
poison0.09620606 2 2.140041 1.327926e-01
treat0.36709833 3 5.443909 3.525162e-03
poison:treat0.24100650 6 1.787011 1.304056e-01
Residuals0.78671667 35 NA NA

p값이 아주 작을 경우에는 9.880841e-06와 같이 지수 표기법으로 출력될 수 있다. e-06은 10의 -6승을 곱하라는 것으로, 소수점 아래 6번째 자리라는 뜻이다. 지수 표기법이 보기 불편할 경우 아래와 같이 소수점 7번째 자리까지는 지수표기법을 쓰지 않게 한다.

options(scipen=7)

결과를 다시 출력한다.

Anova(m2, type ="III")
Sum SqDfF valuePr(>F)
(Intercept)0.59853333 1 26.627969 0.000009880841
poison0.09620606 2 2.140041 0.132792625491
treat0.36709833 3 5.443909 0.003525161961
poison:treat0.24100650 6 1.787011 0.130405579248
Residuals0.78671667 35 NA NA

treat만 통계적으로 유의미하다. (p < .05)