본문 바로가기
R/Graph

R 이산변수 시각화 - 모자이크 플롯 mosaicplot

by 통계열등생 2021. 3. 21.
반응형
변수 개수 변수 형태 그래프
일변량 연속형 데이터 히스토그램 (hist)
상자 그래프 (boxplot)
범주형 데이터
(명목형, 수치형)
막대 그래프 (barplot)
파이 차트 (pie)
점 차트 (dotchart)
다변량 연속형 데이터 산점도(행렬) (plot, pairs)
범주형 데이터 모자이크 플롯 (mosaicplot)

 

 

 

 

 

 ◎ 모자이크 플롯

 

mosaicplot(x, main = deparse1(substitute(x)), sub = NULL, xlab = NULL, 
              ylab = NULL, sort = NULL, off = NULL, dir = NULL, color = NULL, 
              shade = FALSE, cex.axis = 0.66, las = par("las"), border = NULL, ...)

<인수설명>

x 배열 형식의 분할표
main, sub 주제목, 부제목
xlab, ylab 축의 이름
sort 변수들의 순서를 지정
off 모자이크 조각의 간격을 퍼센트로 지정
dir 모자이크 조각의 분할 방향을 지정
color 모자이크 조각의 색상
shade 확장된 모자이크 플롯을 생성할지 여부
cex.axis 축의 주석들의 문자 크기
las 축의 label의 스타일
border  모자이크 조각의 테두리 색상

 

 

> str(UCBAdmissions)
 'table' num [1:2, 1:2, 1:6] 512 313 89 19 353 207 17 8 120 205 ...
 - attr(*, "dimnames")=List of 3
  ..$ Admit : chr [1:2] "Admitted" "Rejected"
  ..$ Gender: chr [1:2] "Male" "Female"
  ..$ Dept  : chr [1:6] "A" "B" "C" "D" ...

UCBAdmissions 데이터셋은 R 프로그램에 저장되어 있는 내장 데이터셋이다. UC 버클리 대학교 대학원의 1973년도 입학 자료로 합격여부, 성별, 지원학과가 테이블 구조로 저장되어 있다.

이 데이터를 사용해서 mosaicplot() 함수의 인수(옵션)들을 설명하려고 한다.

 

> data = UCBAdmissions
> dimnames(data)
$Admit
[1] "Admitted" "Rejected"

$Gender
[1] "Male"   "Female"

$Dept
[1] "A" "B" "C" "D" "E" "F"

dimnames(x) 함수의 속성에 지정된 범주 label들이 모자이크 플롯을 만들때 각 분할표의 label로 사용된다. 세개의 속성을 가진 이 데이터로 모자이크 플롯을 그려보겠다. 

 

> par(mfrow=c(1,2))
> mosaicplot(data)
> mosaicplot( ~ Admit + Gender + Dept, data=data)

모자이크 플롯을 만드는 방법으로 두가지가 있다. 기본적으로 왼쪽 그래프처럼 객체를 지정하는 방법과 오른쪽 그래프처럼 포뮬라(formula) 형식으로 지정하는 방법이 있다. 포뮬라 형식으로 지정할 경우 x축, y축 등에 들어갈 데이터의 속성을 자유롭게 지정할 수 있다. 

 

 

 

  • main, sub
> mosaicplot(data, main="UC 버클리 대학교 지원자 현황",
+            sub="대학원의 1973년도 입학자료")
> mosaicplot(data, main=NULL)

main 와 sub 인수는 각각 주제목, 부제목을 지정한다. 부제목은 x축의 아래에 출력된다. 
main 인수는 지정하지 않아도 기본적으로 객체의 이름이 출력된다. main 인수를 NULL로 지정하게 되면 주제목이 출력되지 않는다. 

 

 

  • xlab, ylab / cex.axis
> dimnames(data)$Admit = c('합격','불합격')
> dimnames(data)
$Admit
[1] "합격"   "불합격"

$Gender
[1] "Male"   "Female"

$Dept
[1] "A" "B" "C" "D" "E" "F"

x축, y축 label을 바꾸기 전에 데이터의 속성들을 구성하고 있는 문자열을 바꿔주고 싶었다. dimnames() 함수와 $(달러사인) 을 사용해서 "Admitted", "Rejected"를 "합격", "불합격"으로 바꿔주었다. 

 

> mosaicplot(data, xlab="합격 여부", ylab="성별")
> mosaicplot(data, cex.axis=0.5)

xlab 와 ylab 인수는 각각 x축 이름, y축 이름을 지정한다. sub 인수를 xlab 인수와 함께 사용할 경우 x축 이름 아래에 부제목이 출력된다.

cex.axis 인수는 축 주석들에 사용할 배율을 지정한다. 그래프를 자세히보면 x축 이름과 y축 이름의 크기는 그대로이고 주석들의 크기만 줄어든 것을 볼 수 있다. cex.axis 인수의 기본값은 1이 아닌 0.66이다. 

 

 

 

  • sort
> par(mfrow=c(1,1))
> mosaicplot(data, sort=c(2,1,3))

sort 인수는 정수 1부터 dim(x)의 길이까지의 순열을 포함하는 벡터이다. 위 모자이크 플롯의 sort 인수를 c(2,1,3)으로 지정하였는데 이전에 설명했던 다른 모자이크 플롯과는 모자이크를 나누는 기준이 조금 달라진 것을 알 수 있다. c(2,1,3)의 의미는 먼저 2번째 속성인 Gender를 기준으로 모자이크를 나눈 뒤 Gender가 남자인 그룹에서 첫번째 속성인 Admit을 기준으로 나누고, 여자인 그룹도 마찬가지로 Admit을 기준으로 나눈다. 마지막으로 4개로 나눠진 각 그룹을 세번째 속성인 Dept를 기준으로 나누어 그래프를 그린다는 뜻이다. 

 

> apply(data, 2, sum)
  Male Female 
  2691   1835 
> Male = UCBAdmissions[,1,]
> Female = UCBAdmissions[,2,]
> apply(Male, 1, sum)
Admitted Rejected 
    1198     1493 
> apply(Female, 1, sum)
Admitted Rejected 
     557     1278 

좀 더 정확한 이해를 돕고자 apply() 함수를 사용해 모자이크를 나눈 기준과 그 값을 출력해보았다.

 

 

 

  • off / dir
> par(mfrow=c(1,2))
> mosaicplot(data, off=2)
> mosaicplot(data, dir=c("h","v","v"))

off 인수는 모자이크의 각 수준에서 백분율 간격을 결정하기 위한 오프셋 벡터이다. 적절한 값은 0에서 20 사이이다. 

dir 인수는 데이터의 각 차원에 대한 분할 방향을 지정하는 벡터이다. 수직의 경우 "v", 수평의 경우 "h"로 지정한다. 기본값은 수직 분할로 시작해 번갈아가는 방향으로 구성된다. 

이 데이터의 경우 기본값은 c("v","h","v")이다. 위의 예시에서 dir 인수를 c("h","v","v")로 지정했더니 x축과 y축의 레이블이 바뀐 것을 알 수 있다. 

 

 

 

  • color
> mosaicplot(data, color=T)
> mosaicplot(data, color=rainbow(6))

color 인수는 음영을 넣는 논리값을 지정할 수 있고, 색상을 저장하고 있는 벡터를 지정할 수도 있다. 기본적으로 회색 상자가 그려진다.

논리값으로 지정할 경우 color=TRUE는 감마 보정된 회색 팔레트가 출력되고, color=FALSE는 음영이 없는 빈 상자를 출력한다.

색상 벡터를 지정할 경우 색상 이름(ex "red") or RGB 색상(ex #FF0000) 등으로 지정할 수 있다. RGB를 사용해 그래프의 색상을 변경하려면 "#RRGGBB"의 형식으로 값을 지정한다.

color 인수는 shade 인수가 FALSE 또는 NULL(기본값)인 경우에만 사용할 수 있다.

 

 

 

  • shade
> par(mfrow=c(1,1))
> mosaicplot(data, shade=T)

shade 인수는 확장된 모자이크 플롯을 생성할지 또는 잔차에 대한 절단점의 절대값을 제공하는 최대 5개의 고유한 양수의 숫자 벡터를 생성할지 여부를 나타내는 논리값을 지정한다. 기본적으로 shade은 FALSE이며, 간단한 모자이크 플롯이 생성된다. shade=TRUE를 사용하면 2와 4에서 잔차에 대한 절단점의 절대값을 자른다.

 

 

 

  • las
> mosaicplot(data, las=0, main="las=0")
> mosaicplot(data, las=1, main="las=1")
> mosaicplot(data, las=2, main="las=2")
> mosaicplot(data, las=3, main="las=3")

las 인수는 0부터 3까지의 숫자를 지정할 수 있고, 지정한 숫자에 따라 축 레이블의 스타일이 바뀌게 된다.

las=0일때 x축 label은 수평, y축 label은 수직

las=1일때 x축 label은 수평, y축 label은 수평

las=2일때 x축 label은 수직, y축 label은 수평

las=3일때 x축 label은 수직, y축 label은 수직

 

 

 

  • border
> par(mfrow=c(1,2))
> mosaicplot(data, border=F)          # border=NA 와 같음
> mosaicplot(data, border="#FF0000")  # border="red" 와 같음
> par(mfrow=c(1,1))

border 인수는 모자이크 조각의 테두리 색상을 지정한다. 기본적으로 색상은 "black"이고, border 인수를 FALSE로 지정하면 테두리가 없이 그래프가 출력된다. 

color 인수와 같이 색상을 저장하고 있는 벡터를 지정할 수 있는데 색상 이름(ex "red") or RGB 색상(ex #FF0000) 등으로 지정할 수 있다. RGB를 사용해 그래프의 색상을 변경하려면 "#RRGGBB"의 형식으로 값을 지정한다.

 

 

 

 

 

 ◎ 모자이크 플롯 응용

 

> str(HairEyeColor)
 'table' num [1:4, 1:4, 1:2] 32 53 10 3 11 50 10 30 10 25 ...
 - attr(*, "dimnames")=List of 3
  ..$ Hair: chr [1:4] "Black" "Brown" "Red" "Blond"
  ..$ Eye : chr [1:4] "Brown" "Blue" "Hazel" "Green"
  ..$ Sex : chr [1:2] "Male" "Female"

HairEyeColor 데이터 셋은 R 프로그램에 저장되어 있는 내장 데이터셋이다. 592명의 통계 학생의 머리카락과 눈 색깔 및 성별 분포를 테이블 구조로 저장하고 있다.

 

> mosaicplot( ~ Hair + Eye, data=HairEyeColor, las=1, 
+             cex.axis=1, color=T, main=NULL)

먼저 두개의 속성만 가지고 모자이크 플롯을 그려보았다. 그래프를 보면 머리카락이 갈색("Brown")인 학생이 다른 색상보다 비율이 높은 것을 알 수 있다. 또한 머리카락이 금발("Blond")이면 눈 색깔이 파란색("Blue")일 가능성이 아주 높다는 사실도 알 수 있다.

 

> mosaicplot(HairEyeColor, off=3, cex.axis=0.75, 
+            color=c("#90CCFF","#FF9090"), border=F, main=NULL)

남녀의 비율까지 알아보기 위해 데이터가 가지고 있는 세가지 속성을 모두 사용한 모자이크 플롯을 그려보았다. 파란색 모자이크 조각은 남자, 빨간색 모자이크 조각은 여자의 비율을 나타내고 있다.

대부분 남녀의 비율이 비슷해 보인다. 위에서 알아보았던 머리카락이 금발("Blond")이면서 눈 색깔이 파란색("Blue")인 경우 남자보다는 여자의 비율이 더 높고, 머리카락이 검은색("Black")이면서 눈 색깔이 녹갈색("Hazel")인 경우는 남자의 비율이 더 높은 것을 알 수 있다. 

 

 

 

 

 

<R 이산변수 시각화 - 모자이크 플롯 mosaicplot>

반응형

댓글