[R_tidyverse] 분산분석 ANOVA: 반복측정 분산분석 Repeated Measures ANOVA
- -
일원분산분일원분산분
분산분석 ANOVA
- 통계분석의 종류는 목적에 따라 크게 (그룹 간) 차이검정, (변수 간) 관계검정으로 나눌 수 있음. 이 중 그룹 간 차이를 검정하는 방법으로는 t-검정과 분산분석(ANOVA)이 있는데, t-검정은 그룹이 1~2개일 때 사용되며, ANOVA는 그룹이 3개 이상일 때 사용함.
- 분산분석은 이름에서 알 수 있듯이 데이터의 분산, 즉 데이터가 얼마나 퍼져있는지를 분석하는 방법임. 이를 통해 여러 그룹 간의 평균이 통계적으로 유의미하게 차이가 있는지를 판단함.
- 분산분석의 주요 가정은 정규성, 독립성, 등분산성임. 정규성은 각 그룹의 데이터가 정규분포를 따르는지, 독립성은 각 그룹의 데이터가 서로 독립적인지, 등분산성은 각 그룹의 데이터가 동일한 분산을 가지는지를 가정함.
- 분산분석의 종류
일원분산분석 One-way ANOVA |
1개의 독립변수가 있는 경우, 독립변수의 각 수준(그룹)간의 평균 차이를 검정 |
반복측정분산분석 Repeated Measures ANOVA |
1개의 독립변수와 반복 측정된 종속변수가 있는 경우, 독립변수의 각 수준(그룹)간의 평균 차이와 시간에 따른 변화를 검정 |
이원분산분석 Two-way ANOVA |
2개의 독립변수가 있는 경우, 독립변수들의 각 수준(그룹)간의 평균 차이를 검정하며, 또한 독립변수들 간의 상호작용 효과를 검정 |
이원반복측정분산분석 Two-way Repeated Measures ANOVA |
2개의 독립변수와 반복 측정된 종속변수가 있는 경우, 독립변수들의 각 수준(그룹)간의 평균 차이, 두 독립변수의 상호작용 효과, 그리고 시간에 따른 변화를 검정 |
반복측정 분산분석 Repeated measures ANOVA
*tidyverse 패키지를 활용한 분석방법
반복측정 분산분석 Repeated Measures ANOVA은 지난번 실습한 대응표본 t-검정의 확장이라고 보면 된다.
이때는 구형성 검정을 실시하여 측정 시점 간의 차이 확인한다
구형성 조건을 만족한 경우 일변량 분석을 실시할 수 있고 만족 안할 경우 자유도 수정하는 방법 사용가능하다.
오늘 실습할 문제는 어학프로그램에 참여하기 전과 참여한지 3개월 후, 그리고 6개월 후의 어학점수를 비교하는 상황이다. 같은 집단에 대해 3번 이상 반복측정하기 때문에 반복측정 분산분석을 활용하여 분석한다.
시점을 세번 이상 측정: 어학프로그램 참여, 참여전/3개월후/6개월후 -> 어학점수
귀무가설: "시점에 따라 어학점수의 차이가 없다"
차례
1. 패키지 설치 및 불러오기
2. 데이터 불러오기, 기술통계, 그래프그리기
3. 이상치 제거
4. 샤피로 테스트: 정규분포 검정
5. 구형성검정
6. 사후검정: 다중비교
7. 부록: 일변량분석
1. 패키지 설치 및 불러오기
오늘의 실습을 위해 필요한 R 패키지. 패키지는 한 번 설치하면 다음에 다시 설치할 필요 없음.
그러나 라이브러리는 매번 불러와야 함!
# 패키지 설치
install.packages("tidyverse") #쌍따옴표 주의
install.packages("tidymodels")
install.packages("rstatix")
install.packages("rskim")
#설치한 패키지 불러오기 (라이브러리)
library(tidyverse) #쌍따옴표 없음
library(tidymodels)
library(rstatix)
library(rskim)
2. 데이터 불러오기, 기술통계, 그래프 그리기
# 데이터불러오기
rma_tb <- read_csv("09.rma.csv",
col_names = T,
na = ".",
locale = locale("ko", encoding = "euc-kr")) %>%
mutate_if(is.character, as.factor) %>%
mutate(시점 = factor(시점,
levels = c(1:3),
labels = c("사전","3개월","6개월")))
# 데이터의 구조 파악
rma_tb
str(rma_tb)
# 기술통계(그룹 쪼개기)
rma_tb %>%
group_by(시점) %>% # 시점에 따른 각 점수의 통계치 파악
get_summary_stats(점수)
# 그래프 그리기
## 상자그림과 히스토그램으로 이상치와 분포 전반적으로 파악하기
rma_tb %>%
ggplot(mapping = aes(x = 시점,
y = 점수)) +
geom_boxplot()
rma_tb %>%
ggplot(mapping = aes(x = 점수)) +
geom_histogram(bins = 10,
color = "white",
fill = "steelblue") +
facet_wrap(~ 시점) # 각 시점 그룹을 나누어서 그래프 작성
3. 이상치 제거
통계분석을 위해 분포에서 벗어나는 극단적인 값, 이상치를 제거해야 함. identify_outliers() 함수를 활용하면 간단히 파악 가능.
박스플랏에 나타나지 않았던 이상치가 나타나기도 함.
# 각각의 그룹을 나누어서 이상치 확인
rma_tb %>%
group_by(시점) %>%
identify_outliers(점수)
아래처럼 이상치 하나 나옴
# A tibble: 1 × 5
시점 id 점수 is.outlier is.extreme
<fct> <dbl> <dbl> <lgl> <lgl>
1 6개월 37 73 TRUE FALSE
삭제해줄수도 있지만, 반복측정 분산분석에서는 각 시점 간 데이터들의 짝이 안맞으면 오류가 남.
그래서 삭제해주려면 id=37의 참여전, 3개월 후, 6개월 후의 모든 데이터를 삭제해야 함.
이상치 제거는 데이터 분포가 정규분포를 벗어날까봐 진행하는 것이기 때문에 아래에서 정규분포 테스트를 해보고
이상치가 있는 채로도 정규분포를 따른다면 굳이 제거할 필요가 없음
4. 샤피로 테스트: 정규분포검정
- 통계분석은 데이터의 분포가 정규분포일 것을 가정하고 이루어짐. 따라서 통계분석을 위해서는 이 데이터의 분포가 정규분포를 따르는지 검정해보아야 함.
- 그럴때 사용되는 것이 샤피로 테스트. 샤피로 테스트의 귀무가설은 '이 데이터의 분포가 정규분포를 따른다'는 것이고, 반대되는 대체가설은 '정규분포를 따르지 않는다' 가 됨. 샤피로 테스트의 p밸류 값이 0.05 이상이라면 귀무가설이 채택되면서 정규분포를 따른다고 볼 수 있음
- shapiro_test() 함수를 활용하면 됨
- 독립표본 t-검정에서는 각각의 그룹에 대해 확인해야 함
rma_tb %>%
group_by(시점) %>%
shapiro_test(점수)
위의 코드 입력 결과 아래와 같이 출력됨. 다 p밸류 0.05 이상이기 때문에 귀무가설이 채택됨.
즉, 이 데이터의 분포가 정규분포라고 받아들일 수 있음.
이대로도 다 정규분포라고 가정할 수 있기 때문에 이상치 제거도 굳이 안해도 됨
# A tibble: 3 × 4
시점 variable statistic p
<fct> <chr> <dbl> <dbl>
1 사전 점수 0.972 0.339
2 3개월 점수 0.962 0.149
3 6개월 점수 0.954 0.0737
5. 구형성검정
구형성 검정: 시점 간 차이 있니
'Mauchly's Test - 귀무가설: 시점 간 등분산성 가진다
rma_results <- rma_tb %>%
anova_test(dv = 점수, # different variable 종속변수
wid = id, # 개인당
within = 시점) # within effect 동질한 그룹의 중재 전후 차이를 보는 것이기 때문에
rma_results
p값 0.05 이상 → 귀무가설 채택 → “시점 간 등분산성 가진다" → 구형성 검증 O
ANOVA Table (type III tests)
$ANOVA
Effect DFn DFd F p p<.05 ges
1 시점 2 88 248.614 6.24e-37 * 0.579
$`Mauchly's Test for Sphericity`
Effect W p p<.05
1 시점 0.963 0.446
$`Sphericity Corrections`
Effect GGe DF[GG] p[GG] p[GG]<.05 HFe DF[HF] p[HF] p[HF]<.05
1 시점 0.964 1.93, 84.88 1.04e-35 * 1.008 2.02, 88.69 6.24e-37 *
'Mauchly's Test에서 등분산 성립되지 않을 경우 보정 필요 → $`Sphericity Corrections` 확인
$ANOVA 보면 극히 작은 p값 -> 시점 간 차이 있다!
어느 시점 간 차이가 있니? 확인이 필요함 → 사후검정: 다중비교
6. 사후검정: 다중비교
이제 시점 간 차이가 있다는 것은 알았는데 어느 시점 간에 차이가 있는지를 보고자 함. 아래의 코드 실행하여 ANOVA 테스트
rma_tb %>%
pairwise_t_test(점수 ~ 시점,
paired = T, # 시점 간 쌍으로 묶어
p.adj = "bonferroni")
그 결과는 아래와 같음. p밸류 보면 모든 그룹 간(시점 간) 차이가 있는 것으로 나타남! 즉, 어학프로그램 효과 있다.
# A tibble: 3 × 10
.y. group1 group2 n1 n2 statistic df p p.adj
* <chr> <chr> <chr> <int> <int> <dbl> <dbl> <dbl> <dbl>
1 점수 사전 3개월 45 45 -3.44 44 1 e- 3 4 e- 3
2 점수 사전 6개월 45 45 -23.0 44 3.48e-26 1.04e-25
3 점수 3개월 6개월 45 45 -17.0 44 6.18e-21 1.85e-20
# ℹ 1 more variable: p.adj.signif <chr>
7. 부록: 일변량분석
구형성 검증되었을 경우에 일원분산분석처럼 분석할 수 있어
rma_results_ow <- aov(점수 ~ 시점 + Error(id/시점),
data = rma_tb)
rma_results_ow
summary(rma_results_ow)
'Programs > R' 카테고리의 다른 글
[R_tidyverse] 분산분석 ANOVA: 이원분산분석 Two-way ANOVA (0) | 2024.02.29 |
---|---|
[R_tidyverse] 분산분석 ANOVA: 일원분산분석 one-way ANOVA ② (0) | 2024.02.23 |
[R_tidyverse] 분산분석 ANOVA: 일원분산분석 one-way ANOVA ① (4) | 2024.02.22 |
[R_tidyverse] t-검정: 대응표본 t-검정 paired sample t-test ② (0) | 2024.02.20 |
[R_tidyverse] t-검정: 대응표본 t-검정 paired sample t-test ① (2) | 2024.02.19 |
소중한 공감 감사합니다