R programming/통계데이터분석

[R/통계] 15.분산분석 - 다변량 분산분석 🔑 MANOVA | multivariate analysis of variance | 2개 이상의 종속변수

gumin00 2022. 7. 22. 01:52

15.통계데이터분석 - 분산분석 - 다변량 분산분석.Rmd
0.01MB
15.통계데이터분석---분산분석---다변량-분산분석.html
1.23MB

 

 

 

 

https://www.youtube.com/watch?v=ovNU9MzKTW0&list=PLY0OaF78qqGAxKX91WuRigHpwBU0C2SB_&index=16

1. 다변량 분산분석

  • 다변량 분산분석: 2개 이상의 종속 변수가 있을 때 집단별 차이를 동시에 검정
  • 1개의 종속변수를 사용할 때에 비해 연구의 타당성 증대 효과를 기대할 수가 있음

2. 다변량 분산분석 수행 절차

library(heplots)
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 ...
  • 데이터셋 및 변수 설명
구분 설명
Skulls 데이터셋 고대 이집트 왕조 시대부터 로마 시대에 이르기까지 이집트 지역에서 발굴된 인간의 두개골 크기 측정 데이터임. 이집트 역사를 5개 시대로 구분하고, 각 시대별 30개씩의 두개골을 4개 지표로 측정. 150개의 관측값 포함
epoch 변수(집단변수) 이집트의 시대를 5개로 구분한 범주 포함
mb 변수 두개골 폭
bh 변수 두개골 높이
bl 변수 두개골 길이
nh 변수 코의 높이

3. sample_n() 함수 - 관측값 무작위 추출

  • 데이터셋으로부터 10개 관측값 무작위 추출후 화면에 출력
library(dplyr)
sample_n(Skulls, 10)
##       epoch  mb  bh  bl nh
## 148  cAD150 140 135 103 48
## 33  c3300BC 138 134  98 45
## 40  c3300BC 133 125  94 46
## 28  c4000BC 127 129 106 48
## 135  cAD150 142 135  96 52
## 21  c4000BC 126 133 102 51
## 23  c4000BC 134 124  93 53
## 29  c4000BC 131 136 114 54
## 72  c1850BC 137 139  97 50
## 138  cAD150 137 135  96 54
  • 시대별 4개 두개골 측정값이 저장이 되어 있음

4. 다변량 분산분석으로 이러한 두개골 측정값이 시대에 따라 다른지 검정

  • 종속변수: 두개골 폭, 두개골 높이, 두개골 길이, 코의 높이
  • 독립변수: 시대는 5개 범주를 갖짐
  • 다변량 분산분석 수행을 위해 종속변수들을 결합해 하나의 행렬 형식으로 변환을 해야 함
  • 데이터셋에 변수로 에 접근할 때마다 데이터셋 이름을 지정하는 불편 덜기 위해 attach() 함수로 사용하는 데이터셋을 작업경로 상에 포함
attach(Skulls)
search()
##  [1] ".GlobalEnv"        "Skulls"            "package:dplyr"    
##  [4] "package:heplots"   "package:car"       "package:carData"  
##  [7] "package:stats"     "package:graphics"  "package:grDevices"
## [10] "package:utils"     "package:datasets"  "package:methods"  
## [13] "Autoloads"         "package:base"
  • Skulls 데이터셋이 두번째 포함되어 있음

5. cbind() - 측정값을 결합해 행렬 형식으로 변형

  • cbind()로 두개골의 4개 측정값을 결합해 하나의 행렬 형식으로 변환하고 그 결과를 y 라는 변수 저장
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

6. aggregate() 함수 - 데이터의 특정 컬럼을 기준으로 통계량 계산

  • 시대별로 두개골 측정값의 평균 구하기
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.36667
  • 출력 결과: 측정 지표에 따라서 정도의 차이가 있으나 “대체로 두개골 측정 값 평균이 시대별로 차이가 있는 것”처럼 보임
  • 하지만 이를 모집단으로 일반화하기 위해서는 통계적 검증 절차가 필요함

7. ranova() 함수 - 종속변수 값의 집단간 차이에 대한 다변량 분산분석 수행

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
  • ranova() 함수에 종속변수와 독립변수 간 관계를 포뮬러 형식으로 지정
  • 종속변수: 두개골 측정값 행렬 y 지정
  • 독립변수: 시대를 나타내는 epoch 변수 지정
  • data 인수: Skulls 데이터셋을 attach 함수로 작업경로상에 포함시켰기 때문에 별도로 지정할 필요 없음. 그렇지 않은 경우, 사용하고 있는 데이터셋 지정해야함
  • summary 함수를 이용해서 마노 밤스 로부터 생성된 모델 객체로부터 분석결과 출력
  • 검정결과: p 값이 1 수준 0.05 에 대해서 매우 작아 “시대에 따라서 두개골 측정값의 차이가 없다”는 귀무가설을 기각하고 “시대에 따라서 두개골 측정값은 다르다” 라고 결론 내릴 수 있음

8. summary.aov() - 일변량 일원분산분석

  • 구체적으로 어느 두개골 측정값의 차이가 존재하는지 확인하기 위해 summary.aov() 함수로 일변량 일원분산분석 수행해 확인 가능. summary 함수에 manova함수로 생성된 모델 객체 지정
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
  • 출력결과: 종속변수에 포함되어 있는 4개의 두개골 측정지표 별로 각각 시대별로 평균 값에 있어서 차이가 존재하는지를 검증 해서
  • 코의 높이를 나타나 nh 변수를 제외하고 모두 유의확률이 0.05보다 작음
  • 유의수준 0.05 에서 “코의 높이 nh를 제외한 나머지 두개골 측정값은 시대별로 차이가 있다” 라고 결론 내릴 수 있음
  • 이처럼 시간의 흐름에 따라서 두개골 측정값에 차이가 존재한다는 것은 어쩌면 이민족의 유입에 의한 혼혈의 가능성이 있다는 것을 의미할 수도 있음
detach(Skulls)
  • 모든 작업을 종료하게 되면 작업경로 상에 포함 되어 있던 Skulls 데이터셋을 작업경로에서 삭제함