Statti

[R Studio] 분산분석한 결과 표시/error bar가 있는 막대그래프 그리기(feat. tidyverse/ggplot2) 본문

농업생물통계/R Studio

[R Studio] 분산분석한 결과 표시/error bar가 있는 막대그래프 그리기(feat. tidyverse/ggplot2)

꿈꾸 2021. 12. 11. 07:44
반응형

R Studio에 내장되어 있는 데이터인 iris 데이터를 이용해 분산분석을 수행하고 error bar가 있는 막대그래프를 그려보겠습니다.

 

본격적으로 시작하기에 앞서, agricolae 패키지와 tidyverse 혹은 ggplot2 패키지를 불러오는 것, 잊지마세요.

 

libraray(agricolae)

libraray(tidyvesre)

libraray(ggplot2)

 

먼저 iris 데이터를 불러옵니다. 저는 iris_data라고 불러오겠습니다.

 

 

species에 따라 Sepal.Width가 얼마나 다른지 알아보려고 합니다.

 

따라서 species에 따라 Sepal.Width에 대해 분산분석을 먼저 수행합니다. 저는 분산분석한 데이터를 iris_sl_aov라고 저장하겠습니다.

 

분산분석 후 저장할 데이터명 <- aov(독립변수~종속변수, data=분석할 데이터명)를 입력합니다.

 

그 후 분산분석 결과를 살펴봅니다.

 

summary(분산분석 후 저장한 데이터명)를 입력합니다.

 

 

유의수준 0.001에서 유의차가 있네요. 그 다음엔 사후검정으로 tukye test를 수행해줍니다.

 

TukeyHSD(분산분석 후 저장한 데이터명)을 입력합니다.

 

 

저장할 데이터명 <- HSD.test(분산분석 후 저장한 데이터명, "종속변수")를 입력합니다.

 

저는 Tukey test를 하여 나온 데이터를 iris_sl_hsd라고 저장하겠습니다. 그 다음 iris_sl_hsd를 한 번 더 입력해 결과를 살펴봅니다.

 

 

유의수준 0.05에서 sepal width는 setosa 품종이 가장 크고, 그 다음으론 virginica, versicolor 순으로 큰 것을 알 수 있습니다.

 

그 다음엔 그래프를 만들기 위해 평균과 표준편차를 구해줍니다.

 

먼저 평균을 구해보겠습니다.

 

저장할 데이터명3 <- 평균을 구할 데이터명 %>%
  group_by(종속변수) %>%
  summarise_all(mean)

 

라고 입력해줍니다. 그 다음 결과를 살펴봅니다.


저장할 데이터명3를 입력합니다.

 

 

다음은 표준편차를 구해줍니다. 평균을 구하는 방법과 유사합니다.

 

저장할 데이터명4<- 표준오차를 구할 데이터명 %>%
  group_by(종속변수) %>%
  summarise_all(sd)

 

라고 입력해줍니다. 그 다음 결과를 살펴봅니다.


저장할 데이터명4를 입력합니다.

 

 

이제 분산분석 결과가 표시되어 있고, error bar가 있는 막대 그래프를 만들어 보겠습니다.

 

앞서 분산 분석한 결과값을 이용해, alphabet을 설정해줍니다.

 

alphabet <- c("a", "b", "c")를 입력해줍니다. 알파벳 순서를 유의해서 적어주세요.

 

그 다음엔 다음과 같은 코드를 입력해 ggplot을 통해 그래프를 그려줍니다.

 

 

ggplot(aes(x=Species, y=Sepal.Width, fill=Species), data=iris_sl_mean) + 
  geom_bar(position = position_dodge(0.5), stat = "identity", 
           size=.2, width=.4) +
  geom_errorbar(aes(ymin=Sepal.Width-iris_sl_sd$Sepal.Width
                    ymax=Sepal.Width+iris_sl_sd$Sepal.Width), 
                size=0.2, width=0.3, position = position_dodge(0.5))+
  scale_fill_manual(labels=c("Setosa", "Versicolor", "Virginica"),
                    values = c("#66B2FF", "#CCE5FF", "#000099"))+
  labs(x="Species", y="Sepal Width (mm)")+
  theme(panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.background = element_rect(fill='white', colour="black"),
        legend.spacing.y = unit(0, 'mm'),
        legend.title = element_blank(),
        legend.key.size = unit(0.4, 'cm'),
        legend.text = element_text(size=8),
        legend.position = "none",
        legend.box.background = element_rect(colour='black'),
        text=element_text(size=13), 
        axis.text = element_text(colour="black", size=10), 
        axis.title = element_text(size=10), 
        axis.title.x=element_text(margin=margin(t=10)),
        axis.title.y=element_text(margin=margin(r=10))) +
  geom_text(label=alphabet, aes(y=Sepal.Width+iris_sl_sd$Sepal.Width),
            vjust=-0.5, size=4, position = position_dodge(0.5))

 

geom_errorbar() 안의 width 숫자를 조절하면 errorbar의 너비가 조정됩니다.

 

여기서 geom_text() 안의 vjust의 숫자를 조절하면 알파벳의 위치가 조정됩니다.

 

 

 

 

 

 

 

 

반응형
Comments