던컨의 다중 검정 (Duncan's new multiple range test (MRT)) 역시 여러 가지 명칭으로 불리는데, 분산 분석의 사후 검정 방법 가운데 앞서 소개한 Tukey's HSD, 그리고 나중에 소개할 사폐 등과 세트로 등장합니다. 흥미로운 사실은 이 방법을 개발한 던컨 (David B. Duncan)이 같은 시대에 (1955년 발표) 살았던 헨리 사폐 (Henry Scheffé)와 존 터키 (John W. Tukey)와 논쟁을 벌였다는 점입니다. 사폐와 터키는 던컨의 다중검정이 지나치게 자유롭다고 비판했고 던컨은 여기에 맞서 자신의 방법이 옳다고 주장했습니다.
아무튼 여기서 우리가 짐작할 수 있는 것은 Tukey's HSD에서 차이가 없다고 나와도 던컨의 다중 검정에서는 차이가 있다고 나오는 등 검정 방법 간에 서로 차이가 있을 수 있다는 점입니다. R의 기본 함수로 지정된 Tukey's HSD와 달리 던컨의 다중 검정은 별도의 패키지가 필요합니다. agriolae 패키지를 설치한 후 duncan.test 를 사용합니다.
> install.packages("agricolae")
를 치면 꽤 여러 가지가 나옵니다. 아무튼 라이브러리를 불러들여 사용하는 건 마찬가지겠죠. duncan.test(out,"Class",alpha = 0.05, console = TRUE) 을 사용하는데, out 은 anova 객체이고 Class는 비교하고자 하는 그룹입니다. 물론 키의 차이가 있는지를 비교하게 됩니다.
> library(agricolae)
> #n=50
> set.seed(1234)
> A<-rnorm span="">-rnorm>
> set.seed(123)
> B<-rnorm span="">-rnorm>
> set.seed(12345)
> C<-rnorm span="">-rnorm>
>
> DFA<-data .frame="" class="" height="" span="">-data>
> colnames(DFA)<-c height="" lass="" span="">-c>
> DFB<-data .frame="" class="" height="" span="">-data>
> colnames(DFB)<-c height="" lass="" span="">-c>
> DFC<-data .frame="" class="" height="" span="">-data>
> colnames(DFC)<-c height="" lass="" span="">-c>
>
> DF2<-rbind span="">-rbind>
>
> out=aov(height~Class, data=DF2)
> summary(out)
Df Sum Sq Mean Sq F value Pr(>F)
Class 2 447 223.56 9.436 0.000139 ***
Residuals 147 3483 23.69
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
> duncan.test(out,"Class",alpha = 0.05, console = TRUE)
Study: out ~ "Class"
Duncan's new multiple range test
for height
Mean Square Error: 23.69198
Class, means
height std r Min Max
A 167.7347 4.425218 50 158.2715 182.0792
B 169.1720 4.629350 50 159.1669 179.8448
C 171.8978 5.482930 50 159.0982 181.9842
Alpha: 0.05 ; DF Error: 147
Critical Range
2 3
1.923840 2.024913
Means with the same letter are not significantly different.
height groups
C 171.8978 a
B 169.1720 b
A 167.7347 b
사실 위의 결과를 해석하기는 좀 쉽지 않습니다. 결과를 해석할 단서는 Critical Range에 있습니다. 2와3은 Duncan's LSR (Least Significant Range)를 의미하며 집단간 평균이 이 값보다 차이가 크면 차이가 있다고 판단하는 근거가 됩니다. LSR2 = 1.923840, LSR3 = 2.024913 이 되는 데 LSR2/3의 차이는 한 단계 인접그룹인지 두 단계 인접 그룹인지를 판단하는 근거입니다. 아무튼 이 값에 따라 C반과 B/A 반이 차이가 있는지를 보면 C-B 반의 차이는 2.7258이며 C-A 반의 차이는 4.1631 입니다. 즉 차이가 있다고 판정할 수 있습니다. 차이가 있는 평균값 옆에는 알파벳 a가 붙는 것으로 보입니다.
여기서도 알 수 있지만, 던컨의 다중검정은 사실 해석이 복잡한데다 심지어 ANOVA에서 유의하지 않은데도 유의한 결과를 얻을 수도 있어 널리 사용되지 않고 있습니다. 마지막으로 한 가지 더 검증해 보겠습니다.
> #n=30
> set.seed(1234)
> A<-rnorm span="">-rnorm>
> set.seed(123)
> B<-rnorm span="">-rnorm>
> set.seed(12345)
> C<-rnorm span="">-rnorm>
>
> DFA<-data .frame="" class="" height="" span="">-data>
> colnames(DFA)<-c height="" lass="" span="">-c>
> DFB<-data .frame="" class="" height="" span="">-data>
> colnames(DFB)<-c height="" lass="" span="">-c>
> DFC<-data .frame="" class="" height="" span="">-data>
> colnames(DFC)<-c height="" lass="" span="">-c>
>
> DF2<-rbind span="">-rbind>
>
> out=aov(height~Class, data=DF2)
> summary(out)
Df Sum Sq Mean Sq F value Pr(>F)
Class 2 152.5 76.24 3.442 0.0364 *
Residuals 87 1927.1 22.15
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
>
> TukeyHSD(out)
Tukey multiple comparisons of means
95% family-wise confidence level
Fit: aov(formula = height ~ Class, data = DF2)
$Class
diff lwr upr p adj
B-A 0.2466061 -2.6510066 3.144219 0.9775584
C-A 2.8761599 -0.0214528 5.773773 0.0521622
C-B 2.6295538 -0.2680589 5.527167 0.0832488
> duncan.test(out,"Class",alpha = 0.05, console = TRUE)
Study: out ~ "Class"
Duncan's new multiple range test
for height
Mean Square Error: 22.15056
Class, means
height std r Min Max
A 168.5179 4.514915 30 158.2715 182.0792
B 168.7645 4.905154 30 159.1669 177.9346
C 171.3940 4.691129 30 161.9102 180.0866
Alpha: 0.05 ; DF Error: 87
Critical Range
2 3
2.415336 2.541599
Means with the same letter are not significantly different.
height groups
C 171.3940 a
B 168.7645 b
A 168.5179 b
앞서 소개한 예제입니다. Tukey HSD에서 유의하지 않은데도 던컨은 유의한 결과가 나왔습니다. 사실 이런 이유로 인해 당시에도 논쟁이 제법 있었을 것 같습니다. 일반적으로 널리 활용되는 방법은 아니고 저도 거의 사용하지 않는데 혹시 필요하신 분이 있을지 몰라 올려둡니다.
댓글
댓글 쓰기