4.5 이변량 범주형 데이터 그래프
범주형 변수 2개를 그래프로 표시해 보겠습니다.
사용하는 변수는 Cars93$Origin
컬럼과 Cars93$AirBags
컬럼 등 2개(이변량)로, 이 두 변수 모두 factor
형의 범주형 변수임을 알 수 있습니다.
이 절에서의 이변량 범주형 데이터에 대하여 다음의 그래프를 그려 보기로 한다.
4.5.1 모자이크 그래프
모자이크 플랏(mosaic plot)은 2원, 3원 교차표를 시각화한 그래프입니다. 모자이크 플랏에는 사각형들이 그래프에 나열되고 각 사각형의 넓이는 각 범주에 속한 데이터의 수 또는 상대적인 크기를 의미합니다. 따라서 x축과 y축의 제목을 보고 데이터를 추론할 수 있습니다.
4.5.1.1 Base Graphics
패키지
R의 Base Graphics
패키지에 모자이크 플랏을 그리는 함수는 mosaicplot()
함수입니다.
- 첫 번쨰 인수인
formula =
는 범주형 변수들의 분할표를 구하는 변수의 목록입니다. - 두 번째 인수인
data =
는 데이터 세트를 지정해야 합니다. 이 두 개의 인수는 기본적으로 지정이 되어야 합니다.
사용할 data =
는 MASS
패키지가 제공하는 Cars93
으로 다음은 자동차 생산국을 나타내는 Origin
과 생산국가별 에어백의 설치(AirBags
)와 관련한 모자이크 그래프를 보여 주고 있습니다.
library(MASS)
mosaicplot(formula = ~ Origin + AirBags,
data = Cars93,
color = c("yellow", "green", "red"),
cex = 0.8)
formula = ~ Origin + AirBags
:X
축에는~ Origin
에 의해Origin
변수가 그리고Y
축에는+ AirBags
의AirBags
가 그래프에 표시됩니다.color =
:Y
축에 표시되는 사각형의 색깔을 지정합니다.cex =
:X
축과Y
축의 데이터 글자의 크기를 지정합니다.
Cars93
의Origin
변수와AirBags
변수의 분할표(Cross Tables)는table()
함수로 구할 수 있습니다. 그리고 분할표의 상대적 비율은prop.table()
함수로 구할 수 있습니다.
두 범주형 변수 간의 분할표를 구해 보겠습니다.
library(MASS)
# Crosstabs of Orgin and AirBags
<- table(Cars93$Origin, Cars93$AirBags); tab # 분할표 생성 tab
##
## Driver & Passenger Driver only None
## USA 9 23 16
## non-USA 7 20 18
<- proportions(tab, margin = 1) ; tab1 # 비율분할표 생성 (1 = 행 단위, 2 = 열 단위) tab1
##
## Driver & Passenger Driver only None
## USA 0.19 0.48 0.33
## non-USA 0.16 0.44 0.40
table()
:Origin
과AirBags
두 범주형 변수의 분할표를 구합니다.- prop.table() 또는
proportions()
: 분할표 tab을 인수로 해서 상대적 비율을 구합니다. 이때, 두 번째 인수margin =
이1
이면 행 단위로,2
면 열단위의 비율을 구합니다.
추가적으로 base datasets
에서 제공하고 있는 Titanic
데이터 세트를 모자이크 그래프로 표시해 보겠습니다.
Titanic
데이터 세트는 2,201 승객을 4개의 범주형 변수(Class
,Sex
,Age
,Survived
등)로 분할하여 정리해 놓은 4차원 배열형태의 분할표입니다. (? Titanic
으로 데이터 세트에 대한 내용을 확인해 보기 바랍니다.)
mosaicplot(Titanic, # 데이터 입력
main = "Survival on the Titanic", # 제목 설정
color = c("red","green"), # 색 지정
off = 1) # 블럭들 사이의 간격 지정
4.5.1.2 vcd
패키지
한편 vcd
패키지가 제공하는 mosaic()
함수를 이용해서도 모자이크 그래프를 그릴 수 있으며, 또한 labelling = labelling_values
인수를 지정해서 사각형에 데이터 레이블을 표시할 수 있습니다.
library(vcd)
## Loading required package: grid
library(MASS)
data("Titanic")
mosaic(Titanic, labeling = labeling_values)
좀 더 깔끔하게 데이터 레이블링을 해 보겠습니다.
library(vcd)
<- ifelse(Titanic < 6, NA, Titanic) # 데이터 수정 : 6보다 작으면 `NA`처리
tab mosaic(Titanic, pop = FALSE) # 모자이크 그래프 그리기
labeling_cells(text = tab, margin = 0)(Titanic) # 데이터 레이블 표시하기
상대적 비율의 모자이크 그래프를 그려 보겠습니다.
mosaic(Titanic, pop = FALSE)
<- round(prop.table(Titanic), 2) # 상대적 비율로 데이터 레이블링
labs labeling_cells(text = labs, margin = 0, cex = 0.6)(Titanic) # 상대적 비율 표시