Stats & AI tech blog - '일단 시도함'

[R] 그룹 별로 정규성 검정 (shapiro_test, group_by, qqplot) 본문

Programming/R

[R] 그룹 별로 정규성 검정 (shapiro_test, group_by, qqplot)

justdoit ok? 2024. 1. 17. 16:26

통계 분석을 하다보면 데이터의 각 그룹(ex. 치료군/대조군) 별로 정규성 검정을 하는 경우가 많다.

아래 함수를 통해 변수를 동적으로 바꿔가며 group_by를 사용한 shapiro_test를 수행할 수 있다.

 

 

1. shapiro_test {rstatix}, group_by {dplyr}

library(rstatix)
data %>% 
  group_by(group) %>% 
  shapiro_test(ALCAM)
 
 # 변수 바꿔가며 테스트 반복
 lapply(colnames(permnt)[4:15], function(var){
	permnt %>% 
    group_by(cbct) %>% 
    shapiro_test({{var}})
})

 

  group variable statistic        p
  <chr> <chr>        <dbl>    <dbl>
1 ln    ALCAM        0.684 4.54e-11
2 nc    ALCAM        0.903 2.76e- 3
3 sle   ALCAM        0.626 8.74e-12

 

 

정규성을 확인할 때는 qqplot이나 density plot을 함께 그려보는 것이 좋다.

아래는 qqplotr 패키지와 ggplot2 패키지를 활용하여 그룹 별로 qqplot, density plot을 그리는 코드이다.

 

 

2. qqplot {qqplotr} , ggplot {ggplot2}

library(ggplot2)
library(qqplotr)
ggplot(data = iris, mapping = aes(sample = Sepal.Length, fill = Species))+
  stat_qq_band(alpha=0.15) +stat_qq_line(alpha=0.15) +stat_qq_point(size=0.5) + facet_wrap(~ Species) +labs(title = "Normal Q-Q plot", x = "Theoretical Quantiles", y = "Sample Quantiles")+theme_bw()

 

3. geom_density {ggplot2}

ggplot(data=iris, aes(x = Sepal.Length, fill = Species)) + 
  geom_density(alpha = 0.15)+labs(title = "Density plot with multiple groups")+theme_bw()