12.2 모자이크 그림

모자이크 그림(Mosaic Chart)은 Marimekko chart, Eikosogram 이라고도 하는데요, 특히 2개 이상의 다변량 변수를 한꺼번에 그림으로 나타내어 탐색적 분석을 할 때 아주 유용합니다.

모자이크 그림은 다변량 범주형 데이터 간의 관계를 파악할 수 있게 해 줍니다.

모자이크 그림은 vcd 패키지의 mosaic() 함수를 이용하겠으며, 데이터는 MASS 패키지의 cars93데이터 프레임 내에 있는 차종(Type), 구동방식(DriveTrain) 그리고 제조국(Origin) 등의 3개 변수를 모자이크 그림으로 시각화해 보겠습니다.

vcd 패키지의 mosaic() 함수를 이용하겠습니다.

12.2.1 데이터 세트와 패키지

# vcd 패키지 설치 및 불러오기
# install.packages("vcd")
library(vcd)

# 데이터 세트
library(MASS)
str(Cars93)

Go Top

12.2.2 기본 모자이크 그림 그리기

12.2.2.1 일변량 범주형 데이터

먼저 범주형 변수인 자동차의 종류(Type) 만을 기본 모자이크 그림으로 그려 보겠습니다.

mosaic( ~ Type, data = Cars93,
        main = "자동차 종류의 모자이크 그림")
자동차 종류의 모자이크 그림

Figure 12.9: 자동차 종류의 모자이크 그림

Cars93 데이터 세트가 자동차의 종류(Type) 별로 수평(horizontal)으로 분할되어 표시가 됩니다.

12.2.2.2 2변량 범주형 데이터

이제 자동차의 종류(Type)와 구동 방식(DriveTrain) 2개의 범주형 변수를 모자이크 그람으로 시각화 해 보겠습니다.

mosaic(DriveTrain ~ Type, data = Cars93,
       main = "차종별 구동 방식 모자이크 그림")
차종별 구동 방식 모자이크 그림

Figure 12.10: 차종별 구동 방식 모자이크 그림

Cars93 데이터 세트가 1차적으로 자동차의 종류(Type) 별로 수평(horizontal)으로 분할되고, 2차적으로 각 자종차의 종류별로 구동 방식(DriveTrain)이 수직(vertical)으로 분할되어 표시되고 있음을 알 수 있습니다.

12.2.2.3 3변량 범주형 모자이크 그림

이번에는 자동차의 종류(Type)와 구동 방식(DriveTrain) 그리고 제조국(Origin) 등 3개의 범주형 변수를 모자이크 그람으로 시각화 해 보겠습니다.

mosaic( Origin ~ Type + DriveTrain, data = Cars93,
        main = "3변량 범주형 모자이크 그림")
3변량 범주형 모자이크 그림

Figure 12.11: 3변량 범주형 모자이크 그림

Cars93 데이터 세트가 1차적으로 자동차의 종류(Type) 별로 수평(horizontal)으로 분할되고, 2차적으로 각 자종차의 종류별로 구동 방식(DriveTrain)이 수직(vertical)으로 분할되어 표시되고 그리고 3차적으로 제조국(Origin) 별로 수평(horizontal)으로 분할되어 표시되고 있음을 알 수 있습니다.

12.2.3 분할 방향

앞에서 살펴본 바와 같이 3 개의 범주형 변수에 대한 분할 방향은 다음과 같습니다.

  • Type : 수평
  • DriveTrain : 수직
  • Origin : 수평

수평 분할(horizontal splits)로 시작하여 방향을 바꾸어 가는 것이 기본적인 분할 방향 패턴입니다.

따라서 앞에서 살펴본 3변량 모자이크 그림은 다음과 같이 direction = 모수를 이용하여 동일한 그림을 그릴 수 있습니다.

mosaic( Origin ~ Type + DriveTrain, data = Cars93,
        direction = c("h", "v", "h"),
        main = "3변량 범주형 모자이크 그림")
3변량 범주형 모자이크 그림 : 분할 방향

Figure 12.12: 3변량 범주형 모자이크 그림 : 분할 방향

12.2.3.1 분할 방향의 변경

이러한 분할 방향은 우리가 원하는대로 변경할 수 있습니다. 예를 들어, 모든 변수들은 수직으로 분할하고, 마지막 변수만 수평으로 분할하는 더블데커 플롯을 그릴 수 있습니다.

mosaic( Origin ~ Type + DriveTrain, data = Cars93,
        direction = c("v", "v", "h"),
        main = "3변량 범주형 모자이크 그림 : 분할 방향의 변경")
3변량 범주형 모자이크 그림 : 분할 방향의 변경

Figure 12.13: 3변량 범주형 모자이크 그림 : 분할 방향의 변경

여기서 분할 방향 벡터 direction = c("v", "v", "h")Origin ~ Type + DriveTrain 공식에 있는 변수 (Type, DriveTrain, Origin)의 순서로 적용이 됩니다. 즉, ~ 기호 앞에 있는 변수가 제일 마지막 변수(주로 분석에서는 이 변수를 종속변수라고 합니다.)가 됩니다.

12.2.4 모자이크 그림의 채우기 색

채우기 색을 적용할 수 있으며, 마지막 컷 차원(마지막 변수)에 따라서 자동 반복(recyling)됩니다.

다음과 같이 highlighting_fill = 모수로 채우기 색을 설정할 수 있습니다.

mosaic( Origin ~ Type + DriveTrain, data = Cars93,
        highlighting_fill = c("grey90", "cornflowerblue"),
        main = "모자이크 그림 : 채우기 색")
모자이크 그림 : 채우기 색

Figure 12.14: 모자이크 그림 : 채우기 색

12.2.5 모자이크 그림에 라벨 추가하기

12.2.5.1 축 레이블 회전 시키기

rot_labels = 벡터는 변수의 분할 순서가 아닌 위, 오른쪽, 아래, 왼쪽 순으로 네 측면의 회전율을 설정해 줍니다.

mosaic( Origin ~ Type + DriveTrain, data = Cars93,
        highlighting_fill = c("grey90", "cornflowerblue"),
        labeling = labeling_border(rot_labels = c(45, -45, 0, 45)),
        
        main = "모자이크 그림 : 채우기 색")
모자이크 그림 : 축 레이블 회전

Figure 12.15: 모자이크 그림 : 축 레이블 회전

12.2.5.2 레이블 축약

레이블은 (direction = 에서와 같이) 분할 순서대로 축약할 수 있습니다. 레이블 축약 알고리즘은 모음을 제거한 지정한 수의 문자를 반환합니다.

자세한 사항은 ? label_border를 참고하기 바랍니다.

mosaic( Origin ~ Type + DriveTrain, data = Cars93,
        highlighting_fill = c("grey90", "cornflowerblue"),
        labeling = labeling_border(rot_labels = c(45, -45, 0, 45),
                                   abbreviate_labs = c(3, 2, 4)),
        main = "모자이크 그림 : 레이블 축약")
모자이크 그림 : 레이블 축약

Figure 12.16: 모자이크 그림 : 레이블 축약

abbreviate_labs = c(3, 2, 4)은 공식에 있는 3개의 범주형 변수에 대해 (Type, DriveTrain, Origin) 순으로 각각 3글자, 2글자, 4글자 등으로 축약해 줍니다.

12.2.5.3 비율 레이블 추가하기

마지막으로, 모자이크 그림에 비율 레이블(Mosaic Chart with Percentage Label)을 추가해 보겠습니다.

# 비율 라벨 추가 (Mosaic Chart with Percentage Labels)
table_1 <- with(Cars93, table(Type, Origin))
proportions <- round(prop.table(table_1) * 100, 1)        # 백분율, 소수점 첫째자리 반올림
proportions
##          Origin
## Type       USA non-USA
##   Compact  7.5     9.7
##   Large   11.8     0.0
##   Midsize 10.8    12.9
##   Small    7.5    15.1
##   Sporty   8.6     6.5
##   Van      5.4     4.3
values <- c(table_1)
rowvarcat <- c("USA","non_USA")
columnvarcat <- c("Compact","Large", "Midsize", "Small", "Sporty", "Van")
names=c("Origin", "Type")
dims <- c(2,6)

TABS <- structure( c(values), 
                    .Dim = as.integer(dims), 
                    .Dimnames = structure( list(rowvarcat, columnvarcat ),
                    .Names = c(names) ) , class = "table") 
 
PROPORTIONS <- structure( c(proportions), 
                           .Dim = as.integer(dims), 
                           .Dimnames = structure( list(rowvarcat,columnvarcat ),
                           .Names = c(names) ) , class = "table") 
 
TABSPROPORTIONS <- structure( c(paste(proportions,"%","\n", "(",values,")",sep="")), 
                               .Dim = as.integer(dims), 
                               .Dimnames = structure( list(rowvarcat,columnvarcat ),
                               .Names = c(names) ) , class = "table") 
 
mosaic(TABS, 
       pop = FALSE, 
       main = "자동차 종류별 제조국의 비율 레이블")
 
labeling_cells(text=TABSPROPORTIONS, clip_cells=FALSE)(TABS)
모자이크 그림 : 비율 레이블

Figure 12.17: 모자이크 그림 : 비율 레이블

Go Top