본문 바로가기
  • "You can't manage what you can't measure" Peter Drucker
데이터 분석 (with Rstudio)

[R Studio] 이원배치 분산분석 ANOVA (논문 작성을 위한 다섯 번째 분석)

by Vitaminymc 2023. 10. 1.
반응형

이원배치 분산분석 (two-way ANOVA (Analysis of Variance))

두 가지 독립 변수 (또는 요인)가 동시에 작용하는 경우(실험)에 대한 분산분석법을 이원배치 분산분석 (two-way ANOVA)라고 한다.

이원배치 분산분석에서는 두 독립 변수(요인) 간의 상호작용 (interaction effect)이 있는지를 먼저 조사(검정)하고, 상호작용이 존재하지 않아야만 각각의 요인의 효과를 따로 떼어서 분석하는 것이 가능해진다.

이원배치 분산분석에서는 두 요인의 각각의 효과 이외에 두 요인 간의 상호작용이 추가될 수 있다.

다중비교 절차

1. 두 요인간의 상호작용이 존재하는지 확인한다.
2. 상호작용이 존재하지 않으면, 요인 효과를 따로 분리하여 각각의 요인에 대하여 다중비교를 실시할 수 있다.
3. 상호작용이 존재하면, 변수변환을 통하여 상호작용을 제거할 수 있는지 시도해 본다.
4. 변수변환으로 상호작용이 제거된다면, 2로 되돌아간다.
5. 변수변환으로도 상호작용이 제거되지 않는다면, 두 요인의 효과를 동시에 고려한 처리평균에 대하여 다중비교를 실시한다. 

상호작용이 존재하면 해석상에 어려운 점이 있으므로, 가능한 상호작용을 제거해야 한다.

 

이원배치 분산분석 예 (상호작용이 없는 경우)

농장에서 양파를 실험 재배하고 있으며, 두 가지 요인이 작용하는 경우를 예를 들어 보면,

첫 번째 요인은 토양의 종류 (토양 1, 토양 2, 토양 3)이고, 

두 번째 요인은 비료의 종류 (비료 A와 비료 B)이다.

토양과 비료에 따라 양파의 수확량이 차이가 있는지를 검정하고자 한다.

요인 비료A 비료B
토양1 21 21
토양1 23 22
토양1 19 20
토양2 30 26
토양2 29 29
토양2 26 27
토양3 25 23
토양3 22 19
토양3 23 20

 

이원배차 분산분석에서는 상호작용이 존재하는가를 먼저 검정하고, 상호작용이 존재하지 않는다면 토양과 비료의 효과를 따로 분석하는 것이 가능해진다.

R / Rstudio (분산의 동질성 (등분산) 검사)

분산의 동질성을 검사하는 방법은 

"바톨레미 테스트 (Bartlett's test)" 또는 "루빈스 테스트 (Levene's test)"를 사용한다.

이 두 테스트는 등분산성 가정을 확인하는 데 사용되며, 그룹 간의 분산이 동일한지를 검정한다.

soil <- rep(c("X", "Y", "Z"), each = 6)

fertilizer <- rep(c("A", "B"), times = 9)

harvest <- c(21, 21, 23, 22, 19, 20, 30, 26, 29, 29, 26, 27, 25, 23, 22, 19, 23, 20)

# 데이터프레임 생성
onion_data <- data.frame(soil, fertilizer, harvest)
soil fertilizer harvest
X A 21
X B 21
X A 23
X B 22
X A 19
X B 20
Y A 30
Y B 26
Y A 29
Y B 29
Y A 26
Y B 27
Z A 25
Z B 23
Z A 22
Z B 19
Z A 23
Z B 20

 

300x250

바톨레미 테스트 (Bartlett's Test)

바톨레미 테스트는 각 그룹에서의 데이터 분산이 서로 동일한지를 검정한다. 등분산성은 분산이 서로 다른 그룹 간에 동일하다는 가정을 의미하며, 이 가정이 만족되어야 ANOVA와 같은 분산분석을 신뢰할 수 있습니다.

가설 설정:

  • 귀무 가설 (H0): 다수의 그룹 간에 분산이 동일하다 (등분산성이 있다).
  • 대립 가설 (H1): 적어도 하나의 그룹의 분산이 다른 그룹과 다르다 (등분산성이 없다).

R에서는 bartlett.test() 함수를 사용하여 바톨레미 테스트를 수행할 수 있다.

# 필요한 라이브러리 불러오기
library(stats) 

## 방법 1 (상기 데이터 프레임을 bartlett.test() 함수에 전달할 수 있도록 새로운 변수 생성 ###########################

# 데이터프레임에서 토양과 비료 조합에 따른 수확량 데이터 추출
harvest_grouped <- split(onion_data$harvest, list(onion_data$soil, onion_data$fertilizer))

print (harvest_grouped)
> print (harvest_grouped)
$X.A
[1] 21 23 19

$Y.A
[1] 30 29 26

$Z.A
[1] 25 22 23

$X.B
[1] 21 22 20

$Y.B
[1] 26 29 27

$Z.B
[1] 23 19 20
# 바톨레미 테스트 수행
bartlett_result <- bartlett.test(harvest_grouped)

# 결과 출력
print(bartlett_result)
> print(bartlett_result)

Bartlett test of homogeneity of variances

data:  harvest_grouped
Bartlett's K-squared = 1.1523, df = 5, p-value = 0.9494
  • p-value는 귀무가설을 검정하는 데 사용되는데, 여기에서 p-value는 0.9494로 매우 크므로 귀무가설을 기각할 충분한 증거가 없다.
  • 따라서 분석 결과로써, 주어진 데이터 샘플에서는 다수의 그룹 간에 분산이 동일하다는 통계적 증거가 있으며, 등분산성 가정을 만족한다고 해석할 수 있다.
  • 즉, 토양(Soil)과 비료(Fertilizer) 조합에 따른 수확량(Harvest) 데이터에서는 다수의 그룹 간에 분산이 동일하다고 할 수 있다.
## 방법 2 Group 단위의 Vector 생성 ###########################

# 그룹단위 데이터
group_xa <- c(21, 23, 19)
group_xb <- c(21, 22, 20)
group_ya <- c(30, 29, 26)
group_yb <- c(26, 29, 27)
group_za <- c(25, 22, 23)
group_zb <- c(23, 19, 20)

# 바톨레미 테스트 수행
result_b <- bartlett.test(list(group_xa, group_xb, group_ya, group_yb, group_za, group_zb))

print(result_b)
> print(result_b)

Bartlett test of homogeneity of variances

data:  list(group_xa, group_xb, group_ya, group_yb, group_za, group_zb)
Bartlett's K-squared = 1.1523, df = 5, p-value = 0.9494

 

루빈스 테스트 (Levene's Test) 

루빈스 테스트 (Levene's Test)는 다수의 그룹 간에 분산의 동질성(등분산성)을 검정하기 위한 통계적 방법 중 하나이다. 등분산성은 각 그룹 간의 분산이 서로 동일하다는 가정을 의미하며, 이 가정이 만족되어야 ANOVA와 같은 분산분석을 신뢰할 수 있습니다.

가설 설정:

  • 귀무 가설 (H0): 다수의 그룹 간에 분산이 동일하다 (등분산성이 있다).
  • 대립 가설 (H1): 적어도 하나의 그룹의 분산이 다른 그룹과 다르다 (등분산성이 없다).

R에서는 leveneTest() 함수를 사용한다.

# 필요한 라이브러리 불러오기
library(car)

levene_result <- car::leveneTest(harvest ~ soil * fertilizer, data = onion_data)

print(levene_result)

Levene's Test for Homogeneity of Variance (center = median)
  Df F value Pr(>F)
group 5   0.16 0.9726
12        
  • 여기서 귀무 가설은 "다수의 그룹 간에 분산이 동일하다 (등분산성이 있다)"이다.
  • p-value가 매우 큰 0.9726로  p-value가 크므로 귀무가설을 기각할 충분한 증거가 없다.
  • 따라서 이 결과로서, 주어진 데이터 샘플에서는 다수의 그룹 간에 분산이 동일하다고 할 수 있으며, 등분산성 가정을 만족한다고 해석할 수 있다.

R / Rstudio 분산분석 (aov)

soil * fertilizer는 토양과 비료 간의 상호 작용 항목을 포함한 모델을 정의한다.

aov() 함수로 이 모델을 사용하여 분산분석을 수행한다.

summary() 함수를 통해 분산분석 결과를 요약하고 상호 작용 항목의 p-value를 확인할 수 있다.

# 분산분석 (ANOVA)에 상호 작용 항목 추가
model <- aov(harvest ~ soil * fertilizer, data = onion_data)

# 분산분석 결과 요약
summary(model)

  Df Sum Sq Mean Sq F value Pr(>F)  
soil 2 163.44 81.72 26.745 3.78E-05 ***
fertilizer 1 6.72 6.72 2.2 0.164  
soil:fertilizer 2 5.44 2.72 0.891 0.436  
Residuals 12 36.67 3.06      
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

soil 요인에 대한 분석 결과

  • p-value가 매우 작은 3.78e-05로 나타나며, 유의수준 0.05보다 작다.
  • 토양(soil) 요인이 수확량(harvest)에 대해 통계적으로 유의미한 영향을 미친다는 것을 나타냅니다.

fertilizer 요인에 대한 분석 결과

  • p-value가 0.164로 나타나며, 유의수준 0.05보다 크다.
  • 비료(Fertilizer) 요인이 수확량(Harvest)에 대해 통계적으로 유의미한 영향을 미치지 않는다는 것을 나타냅니다.

soil:fertilizer (상호 작용)에 대한 분석 결과:

  • p-value가 0.436로 나타나며, 유의수준 0.05보다 크다.
  • 토양과 비료 간의 상호 작용이 수확량(Harvest)에 대해 통계적으로 유의미하지 않다는 것을 나타냅니다.

"2종의 비료 효과는 없느냐, 3종류의 토양에 따라 양파의 수확량이 차이가 있다."라고 결론을 내릴 수 있다.

 

R / Rstudio 사후 분석, 주효과 분석 (duncan 검정)

상기 예제에서 3종의 토양 중, 어떤 토양이 수확량에 가장 크게 영향을 미치는지를 분석할 필요가 있다.

이를 위해서 사후분석으로 다중비교절차를 수행하며, Duncan's Multiple Range Test (Duncan's 다중 범주화 검정)은 통계 분석에서 다중 비교를 수행하는 일반적인 방법 중 하나이다.

Duncan's 다중 범주화 검정은 다음과 같은 단계로 진행된다.

1. 분산분석(ANOVA)을 통해 그룹 간의 차이를 확인한다.
    이것은 그룹 간의 평균 차이가 통계적으로 유의미한지 확인하는 단계이다.
2. 그룹 간의 차이가 통계적으로 유의미한 경우, Duncan's 다중 범주화 검정을 수행한합다.
    이 검정은 각 그룹을 비교하여 어떤 그룹이 다른 그룹과 유의미한 차이를 가지는지 식별한다.
3. Duncan's 다중 범주화 검정은 결과를 통해 그룹을 통계적으로 유의미한 하위 그룹으로 분류한다.
   동일한 하위 그룹에 속한 그룹은 평균에 유의미한 차이가 없다고 간주된다.
# 분산분석 (ANOVA) 수행
model_2 <- aov(harvest ~ soil, data = onion_data)

summary(model_2)
  Df Sum Sq Mean Sq F value Pr(>F)  
soil 2 163.44 81.72   25.1 1.64E-05 ***
Residuals 15 48.83 3.26        
---              
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
  • "soil"에 대한 p-값: 1.64e-05 (0.0000164)
  • 이 값은 토양 종류에 따른 수확량의 평균 차이가 통계적으로 유의미한지를 나타낸다.
  • p-값이 매우 작으므로 토양 종류에 따른 수확량의 평균은 통계적으로 유의미하게 다르다.
  • 토양 (soil)에 따라 수확량(harvest)에는 통계적으로 유의미한 차이가 있다고 결론 내릴 수 있다.
# Duncan의 다중 범주화 검정 수행
duncan.test(model_2, "soil", console = T, alpha = 0.05) 

#유의수준은 Default 값이 0.05로 생략할 수 있음  duncan_result <- duncan.test(model_2, "soil")
#console = T는 'console'창에 출력 여부

#또는

duncan_result <- duncan.test(model_2, "soil")

# 검정 결과 출력
print(duncan_result)
Study: model_2 ~ "soil"
Duncan's new multiple range test
for harvest 
Mean Square Error:  3.255556 
soil,  means
  harvest std r se Min Max Q25 Q50 Q75
X 21 1.414214 6 0.736609 19 23 20.25 21 21.75
Y 27.83333 1.722401 6 0.736609 26 30 26.25 28 29
Z 22 2.19089 6 0.736609 19 25 20.5 22.5 23
Alpha: 0.05 ; DF Error: 15 
Critical Range
2 3                
2.220378 2.327556                
Means with the same letter are not significantly different.
  harvest groups              
Y 27.83333 a              
X 22 b              
Z 21 b              

"soil, means" (토양별 평균) :

  • "harvest": 수확량의 평균, "std": 표준 편차, "r": 관측치 수, "se": 표준 오차, "Min": 최솟값, "Max": 최댓값
  • "Q25", "Q50", "Q75": 1 사분위수, 중앙값, 3 사분위수

"groups" 열을 보면, 같은 문자로 묶인 토양은 통계적으로 유의미한 차이가 없다는 것을 의미한다.

  • 토양 X와 토양 Z는 같은 문자 "b"로 묶여 있으므로, 이 두 토양 간의 평균 수확량에는 통계적으로 유의미한 차이가 없다고 할 수 있다.
  • 토양 Y는 문자 "a"로 묶여 있으므로, 다른 토양들과 평균 수확량에는 유의미한 차이가 있습니다.

"수확량을 증대하는데 비료의 효과는 없으나, 토양의 조건은 영향을 미치며 토양 조건에서도 토양 Y는 다른 토양보다도 수확량을 증대할 수 있다."라고 결론을 내릴 수 있다.

 

그래프 (geom_line + geom_point)

onion_data %>%
  ggplot(aes(x = soil, y = harvest, group = fertilizer)) +
  geom_line(stat = "summary", fun = "mean", aes(color = fertilizer)) +
  geom_point(stat = "summary", fun = "mean", aes(color = fertilizer), size=3) +
  labs(x = "토양", y = "평균 수확량") +
  ggtitle("토양과 비료에 따른 평균 수확량") +
  theme_minimal()

 

728x90