[R] - 통계데이터분석 - 공분산분석 ANCOVA(analysis of covariance) , 반복측정 분산분석(repeated measures ANOVA)

반응형

공분산분석(analysis of covariance , ANCOVA)

분산분석에 공변량(covariate)을 추가하여 분산분석모델을 확장
분산분석은 집단 간의 차이를 검정합니다. 예를 들어 일원분산분석을 이용해서 세 종류의 비만치료제간의 효과가 차이가 있는지 검정할 수 있습니다. 그런데 비만은 스트레스와 밀접한 관련이 있다고 알려져있습니다. 실험에 참가한 참여자들은 서로 다른 스트레스 수준을 가지고 있을 수 있습니다.


따라서 일원분산분석을 통해서 비만치료제간에 차이가 있다는 결론을 내렸다면 그 이유는 치료제때문이 아니라 참여자의 스트레스 수준일 수 있습니다. 참여자의 스트레스 수준을 측정해서 그 데이터를 가지고 있다면 참여자의 스트레스 수준을 통제해서 치료제의 순수한 영향력을 측정할 수 있습니다. 스트레스 수준이 일정하다는 가정하에서 치료제간의 차이가 있는지 검정합니다. 이때 이 스트레스 수준을 공변량이라하고 공변량을 모델에 포함시켜서 분산분석 모델을 확장한 것을 공분산분석이라고 합니다. 일반적으로 공변량은 연속형 변수로 가정을 합니다.

*공변량을 통제하여 독립변수의 순수한 영향을 검정 *

R 프로그래밍


# 필요한 패키지를 설치하고 불러옵니다.
install.packages("faraway")
library(faraway)

# 데이터를 불러옵니다.
data(sexab)

# ANCOVA 모델을 만듭니다.
# 여기서는 sex를 범주형 독립변수(factor)로, age를 공변량(covariate)으로, response를 종속변수로 사용합니다.
model = aov(response ~ sex + age, data = sexab)

# 모델 요약을 출력합니다. 
summary(model)

반복측정 분산분석(repeated measures ANOVA)

동일한 대상에 대해 여러번 반복측정하여 반복측정 집단 간에 차이가 존재하는지 검정하는 방법
평균검정에서 다뤘던 대응표본검정은 동일한 대상에 대해서 두차례 측정하여 두 집단의 대응표본간의 차이를 검정하는 반면
반복측정 분산분석은 반복횟수를 세 번이상 확장해서 세 개 이상의 집단간의 차이를 검정합니다.


일반적인 분산분석이 다른 집단에 속한 대상들간의 집단간 차이를 분석하는 것이라면 반복측정 분산분석은 동일 집단에 속한 대상들간의 집단 내 차이를 규명하는데 관심을 갖습니다.


열명의 우울증 환자에 대해서 심리치료를 실시하고 심리치료 효과가 기간에 따라 변화가 있었는지 검정하려고 합니다.
심리치료 4주차의 결과와 16주가 경과한 후의 결과를 측정하여 환자별로 2개의 데이터가 나오도록 측정합니다.


여기서 집단을 나타내는 '기간'이라는 변수는 '집단 내 요인'이라고 합니다. 집단 내 요인은 동일한 대상에 대해서 반복측정한 결과를 구분하는 변수입니다. 이 실험에서는 집단을 구분하는 변수가 하나이기 때문에 일원분산분석이라고 할 수 있습니다.


집단을 구분하는 변수의 두 범주의 측정값들은 반복해서 측정되는 것이기 때문에 이것을 '반복측정 분산분석'이라고 할 수 있습니다.
즉, 왼쪽의 실험은 '반복측정 일원분산분석'이 되겠네요.


오른쪽의 실험에서는 심리치료를 A,B 두 종류로 나누고 환자들을 할당할 경우에 우리는 이원분산분석을 수행할 수 있습니다. 이때 이 심리치료에 해당하는 변수를 '집단 간 요인'이라고 합니다. 집단 간 요인은 대상을 서로 구분되는 집단으로 분할하는 변수입니다.

Screenshot from 2023-08-04 15-33-16

R 프로그래밍

반복측정 분산분석을 위한 R 포뮬러 형식

  • 반복 측정 일원분산분석 : y ~ W + Error(Subject/W)
  • 반복 측정 이원분산분석 : y ~ B * W + Error(Subject/W)

W와 B는 각각 집단 내 요인과 집단 간 요인, Subject는 각 측정 대상에 대한 식별자 변수입니다.


# CO2 데이터는 84개의 관측값과 5개의 변수로 구분되어 있다. 
str(CO2)

CO2

CO2sub = subset(CO2, Treatment=="chilled") # conc변수를 범주형 변수로
CO2sub$conc = factor(CO2sub$conc)

# 나무의 종류별로 반복측정 Type, Treatment, conc 
CO2 

# 반복측정 분산분석 
CO2sub.aov = aov(uptake ~ Type * conc + Error(Plant/conc), data=CO2)
summary(CO2sub.aov)

boxplot(uptake ~ Type * conc, data=CO2sub,
        col=c("deepskyblue", 'violet'))

Screenshot from 2023-08-04 16-20-45

image

반응형