아주 간단하게 두 범주형 변수 간의 관계를 비율과 함께 그려주는 함수

Giyu·2021년 12월 12일

Data Visualization with R

목록 보기
10/10
post-thumbnail

구글링을 하다가 정말 괜찮은 R 시각화 함수를 찾아서 소개하려고 합니다.

CGPfunctions 패키지의 PlotXTabs2 함수가 그 주인공인데, 이 함수는 두 범주형 변수 간의 관계를 막대 그래프로 표현하되 각각의 막대 그래프에서 나머지 범주형 변수가 차지하는 비율을 시각화하는 것에 집중한 함수입니다.

예를 들어서 제가 ggplot을 활용해 두 개의 범주형 변수 간의 관계를 누적 막대 그래프로 표현하되, 각 막대 그래프 안에서 여러 그룹이 차지하는 비율까지 text로 표현하고 싶다면 아래와 같은 코드를 작성해야 합니다. (mtcars 데이터셋 활용)

mtcars %>% group_by(vs, gear) %>% summarise(count = n()) %>% mutate(prop = round(count/sum(count),3)*100) %>%
  
  ggplot(aes(x=vs, y=count,fill=gear)) + geom_bar(stat = "identity") + geom_text(aes(label = paste(prop, "%")), size = 6, position = position_stack(.5))

일단 코드의 길이도 무척이나 길 뿐더러, 만약 gear가 가지고 있는 3개의 level 중 어느 한 level이 차지하는 비율이 극히 적은 상황이 발생한다면, 그래프에서는 이를 제대로 표현할 수가 없게 됩니다. (혹은 vs의 2개의 level 중 어느 한 level이 차지하는 비율이 극히 적은 상황의 경우도 마찬가지)

이 때 PlotXTabs2 함수를 사용하게 되면 코드의 길이도 줄일 수 있을 뿐더러, 위에서 제시한 문제들을 걱정할 필요가 없습니다.

한 번 PlotXTabs2 함수를 통해 똑같은 인사이트를 제공해보겠습니다.

library(CGPfunctions)

PlotXTabs2(mtcars, x=vs, y=gear)

코드가 정말 어이가 없을 정도로 짧아지지만 똑같은 그래프를 그릴 수 있습니다.

(다만 막대 그래프 안에서 존재하는 level의 순서가 바뀌게 되는데, 아직까지 왜 그런 것인지는 정확히 모르겠습니다. 다만 문제가 되는 것은 아니니 그냥 넘어가겠습니다.)

그래프를 보면 vs의 두 level 중 어느 level이 차지하는 비율이 더 큰 지를 n = 인자를 통해 수치로 대신 표현해주는 것을 알 수 있습니다.

저희가 관심있어 하는 부분은 vs가 0일 경우에 gear의 세 그룹이 차지하는 비율과 vs가 1일 경우에 gear의 세 그룹이 차지하는 비율 간에 차이가 존재하는 지 알아보는 것이기 때문에, 이러한 부분에 있어서 아주 특화된 함수라고 볼 수 있습니다.

만약 각 비율을 소수점 자리까지 표현하고 싶다면 perc.k 인자에 몇 번째 소수점 자리까지 표현할 것인지 숫자로 기입하면 됩니다.

PlotXTabs2(mtcars, x=vs, y=gear, perc.k = 1)

perc.k = 1을 작성한 결과 각 비율이 소수점 첫 째 자리까지 표현된 것을 확인할 수 있습니다. 또한 막대 그래프 안에서 존재하는 각 그룹 간의 색을 구분하려면 물론 일일이 색을 채워주는 것 또한 방법일 수 있지만, palette 인자를 활용하면 아주 손쉽게 색을 구분할 수 있습니다.

PlotXTabs2(mtcars, x=vs, y=gear, perc.k = 1, palette = "Oranges")

추가적으로 PlotXTabs2 함수는 자체적으로 카이제곱 검정 통계량을 계산하여 그 결과를 그래프 맨 위에 표시해줍니다.(너무 좋습니다 ㅠㅠ)

다만 그래프를 여러 개 배치할 경우 해당 문장 때문에 걸리적거릴 경우가 생기는데, 그럴 경우에는 results.subtitle 인자에서 F로 설정해주면 됩니다.

PlotXTabs2(mtcars, x=vs, y=gear, perc.k = 1, palette = "Oranges", results.subtitle = F)

results.subtitle 인자를 F로 설정하니 맨 위의 카이제곱 검정 통계량 결과가 사라졌습니다.

마지막으로 막대 그래프 형태를 모자이크 플롯 형태로 변형할 수 있는데, 바로 plottype = "mosaic"로 작성해주면 됩니다.

PlotXTabs2(mtcars, x=vs, y=gear, perc.k = 1, palette = "Oranges", results.subtitle = F, plottype = "mosaic")

이렇게 막대 형태가 아닌 모자이크 형태로도 그래프를 표현해 줄 수가 있습니다.


이상으로 PlotXTabs 함수에 대한 간략한 소개를 마치며, 자세한 사항은 관련 자료를 찾아보시면 될 것 같습니다.

profile
Data Analysis Log

0개의 댓글