다변량 분산분석 (MANOVA)

순동·2022년 2월 14일
0

📌 다변량 분산분석 (MANOVA)

두 개 이상의 종속변수가 있을 경우 집단별 차이를 동시에 검정

고대 이집트~로마 시대까지 발굴된 인간의 두개골 크기 측정한 데이터

  • epoch : 이집트 시대를 5개로 구분한 범주
  • mb : 두개골 폭
  • bh : 두개골 높이
  • bl : 두개골 길이
  • nh : 코의 높이
  • mb, bh bl, nh => 종속변수
  • epoch => 독립변수
> install.packages("heplots")
> library(heplots)

> str(Skulls)
> str(Skulls)  # 고대 이집트 ~ 로마 시대까지 발굴된 인간의 두개골 크기 측정한 데이터
'data.frame':	150 obs. of  5 variables:
 $ epoch: Ord.factor w/ 5 levels "c4000BC"<"c3300BC"<..: 1 1 1 1 1 1 1 1 1 1 ...
 $ mb   : num  131 125 131 119 136 138 139 125 131 134 ...
 $ bh   : num  138 131 132 132 143 137 130 136 134 134 ...
 $ bl   : num  89 92 99 96 100 89 108 93 102 99 ...
 $ nh   : num  49 48 50 44 54 56 48 48 51 51 ...

> # # 10개 무작위 추출
> library(dplyr)
> sample_n(Skulls, 10)
      epoch  mb  bh  bl nh
136  cAD150 139 134  95 47
5   c4000BC 136 143 100 54
57  c3300BC 132 130 104 50
85  c1850BC 136 133  91 49
82  c1850BC 133 131 100 50
61  c1850BC 137 141  96 52
99   c200BC 140 134  90 51
46  c3300BC 131 128  98 45
22  c4000BC 135 135 103 47
116  c200BC 138 126  97 54

⭐다변량 분산분석을 위해서는 종속변수를 결합하여 하나의 행렬 형식으로 변환이 필요⭐

> attach(Skulls)
> search()
 [1] ".GlobalEnv"        "Skulls"            "package:dplyr"     "package:heplots"   "package:car"       "package:carData"   "tools:rstudio"    
 [8] "package:stats"     "package:graphics"  "package:grDevices" "package:utils"     "package:datasets"  "package:methods"   "Autoloads"        
[15] "package:base"  

> y <- cbind(mb, bh, bl, nh)  # 열 결합
> head(y)
      mb  bh  bl nh
[1,] 131 138  89 49
[2,] 125 131  92 48
[3,] 131 132  99 50
[4,] 119 132  96 44
[5,] 136 143 100 54
[6,] 138 137  89 56

> # 시대별 두개골 평균
> aggregate(y, by=list(epoch), mean)
  Group.1       mb       bh       bl       nh
1 c4000BC 131.3667 133.6000 99.16667 50.53333
2 c3300BC 132.3667 132.7000 99.06667 50.23333
3 c1850BC 134.4667 133.8000 96.03333 50.56667
4  c200BC 135.5000 132.3000 94.53333 51.96667
5  cAD150 136.1667 130.3333 93.50000 51.3666

대체로 두개골 측정값 평균이 시대별 차이가 있는 것으로 보이지만 통계적 검정이 필요하다.

📌 다변량 분산분석

> Skulls.manova <- manova(y ~ epoch)
> summary(Skulls.manova)
           Df  Pillai approx F num Df den Df    Pr(>F)    
epoch       4 0.35331    3.512     16    580 4.675e-06 ***
Residuals 145                                             
---
Signif. codes:  0***0.001**0.01*0.05.0.1 ‘ ’ 1

시대에 따라 두개골 측정 값에 차이가 있다.

구체적으로 어느 두개골 측정값에 차이가 존재하는가❓

> summary.aov(Skulls.manova)
 Response mb :
             Df  Sum Sq Mean Sq F value    Pr(>F)    
epoch         4  502.83 125.707  5.9546 0.0001826 ***
Residuals   145 3061.07  21.111                      
---
Signif. codes:  0***0.001**0.01*0.05.0.1 ‘ ’ 1

 Response bh :
             Df Sum Sq Mean Sq F value  Pr(>F)  
epoch         4  229.9  57.477  2.4474 0.04897 *
Residuals   145 3405.3  23.485                  
---
Signif. codes:  0***0.001**0.01*0.05.0.1 ‘ ’ 1

 Response bl :
             Df Sum Sq Mean Sq F value    Pr(>F)    
epoch         4  803.3 200.823  8.3057 4.636e-06 ***
Residuals   145 3506.0  24.179                      
---
Signif. codes:  0***0.001**0.01*0.05.0.1 ‘ ’ 1

 Response nh :
             Df Sum Sq Mean Sq F value Pr(>F)
epoch         4   61.2  15.300   1.507 0.2032
Residuals   145 1472.1  10.153               

> detach(Skulls)

nh를 제외한 두개골 측정값은 차이가 있다.

0개의 댓글