R programming/통계데이터분석
[R/통계] 15.분산분석 - 다변량 분산분석 🔑 MANOVA | multivariate analysis of variance | 2개 이상의 종속변수
gumin00
2022. 7. 22. 01:52
15.통계데이터분석 - 분산분석 - 다변량 분산분석.Rmd
0.01MB
15.통계데이터분석---분산분석---다변량-분산분석.html
1.23MB
15.통계데이터분석 - 분산분석 - 다변량 분산분석
2022-07-22
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 데이터셋을 작업경로에서 삭제함