1. 교과서 7장 가구 소비지출에 대한 통계청에서 얻을 수 있는 최근 10년간 자료로 2원 분석을 하여라

# create data
setwd("C://Users/R/Desktop/4학년 1학기/탐자분/datafile")
library(readr)
read.any <- function(text, sep = "", ...) {
  
  encoding <- as.character(guess_encoding(text)[1,1])
  setting <- as.character(tools::file_ext(text))
  if(sep != "" | !(setting  %in% c("csv", "txt")) ) setting <- "custom"
  separate <- list(csv = ",", txt = "\n", custom = sep)
  result <- read.table(text, sep = separate[[setting]], fileEncoding = encoding, ...)
  return(result)
}
consume=read.table("household1.txt")

KOSIS 국가 통계 포털을 통해 가구원수별 가구당 월평균 가계수지 (전국, 1인이상) 자료를 얻어 사용하였다. 최근 10년간 자료를 이용하고자 하였으나 2017년부터 소비지출 부문 기준이 변경되어 2007년부터 2016년까지의 10년치 자료를 이용하였다. 또한, CSV파일을 추출하여 교과서 자료에서 제공하는 household.txt 형식으로 바꾸어 분석하였다.

summary(consume)
##  식료품비주류음료    주류담배        의류신발       주거수도광열   
##  Min.   :249440   Min.   :24803   Min.   :113657   Min.   :187790  
##  1st Qu.:266997   1st Qu.:25553   1st Qu.:118521   1st Qu.:206199  
##  Median :300795   Median :25750   Median :135223   Median :236752  
##  Mean   :288944   Mean   :26492   Mean   :131469   Mean   :229991  
##  3rd Qu.:308076   3rd Qu.:26343   3rd Qu.:142788   3rd Qu.:251577  
##  Max.   :309755   Max.   :30582   Max.   :146240   Max.   :259283  
##  가정용품가사서비스      보건             교통             통신       
##  Min.   :64582      Min.   :117069   Min.   :223712   Min.   :115380  
##  1st Qu.:69045      1st Qu.:128318   1st Qu.:232112   1st Qu.:119631  
##  Median :80748      Median :143355   Median :254375   Median :122019  
##  Mean   :79262      Mean   :139339   Mean   :250580   Mean   :123051  
##  3rd Qu.:88139      3rd Qu.:149616   3rd Qu.:263862   3rd Qu.:126693  
##  Max.   :92344      Max.   :157129   Max.   :282265   Max.   :131575  
##     오락문화           교육           음식숙박      기타상품서비스  
##  Min.   : 95517   Min.   :201434   Min.   :245032   Min.   :158524  
##  1st Qu.:101483   1st Qu.:219383   1st Qu.:253725   1st Qu.:166286  
##  Median :115903   Median :226143   Median :268246   Median :181999  
##  Mean   :113790   Mean   :225029   Mean   :268193   Mean   :177744  
##  3rd Qu.:125193   3rd Qu.:233435   3rd Qu.:286095   3rd Qu.:186726  
##  Max.   :129494   Max.   :239363   Max.   :290609   Max.   :192742

요약자료를 보면 위와 같다. 식료품, 주류, 음료/주류, 담배/의류, 신발 등 12개 부문으로 나누어져 있으며 단위는 원이다. 이제 중간값 다듬기를 활용하여 어떤 특이한 징후가 자료 안에 있는지 살펴보자.

년도를 i, 소비부문을 j로 표기하고 년도 i의 부문 j 지출을 y_ij로 나타내자. y_ij에 대해 가법적 모형 y_ij=μ+α_i+β_j+e_ij ,e_ij~(0,σ),i=(1,…,12),j=(1,…,12)을 고려한다.

이제 medpolish()를 통해 모형의 적합 결과를 확인해 보아야한다. 가장 먼저 확인해야하는 것은 비교 값 대 잔차의 산점도이다. 만약 이 Plot에서 어떠한 의미 있는 패턴이 나타난 다면 모형이 적절하지 않기 때문에 어떠한 변환을 통해 적절한 모형을 찾아야 할 것이다.

consume.out=medpolish(consume)
## 1: 855985
## 2: 782309.8
## Final: 778186.3
attach(consume.out)
plot(consume.out)
abline(0,1)

위의 Plot은 비교 값과 잔차의 산점도이다. 변환의 필요성은 주관적인 개입이 필요한 부분이기 때문에 시각에 따라 차이가 있겠지만 기울기 1인 직선을 그려 확인해본 결과 어느정도 선형성이 나타난다. 가법적 모형에 자료를 분해하는 것은 잘못된 방법이라 생각하여 교과서의 예시를 참고하였다.

y_ij≅μ(1+α_i^)(1+β_j)이므로 log를 취하면 loga y_ij≅loga μ^+loga (1+α_i^)+loga (1+β_j^) 로 가법적 형태로 표현된다. 이를 토대로 자료에 log변환을 하여 다시 위와 같은 순서로 비교 값과 잔차의 산점도를 확인해보았다.

detach(consume.out)
consume.log.out=medpolish(log(consume))
## 1: 4.788466
## 2: 4.335233
## Final: 4.311786
attach(consume.log.out)
plot(consume.log.out)
abline(0,0)

log변환 후 얻은 비교 값과 잔차의 산점도이다. 변환 전의 Plot에 비해 모형에 적합하다고 판단할 수 있다. 위 Plot은 경향선을 찾기 어렵다. log변환 후 얻은 자료에 대한 중간값 다듬기 결과는 아래와 같다.

consume.log.out
## 
## Median Polish Results (Dataset: "log(consume)")
## 
## Overall: 12.00005
## 
## Row Effects:
##        2007        2008        2009        2010        2011        2012 
## -0.15951157 -0.14139857 -0.12521765 -0.05640399 -0.02130425  0.02130425 
##        2013        2014        2015        2016 
##  0.02862986  0.04218181  0.03966747  0.02833941 
## 
## Column Effects:
##   식료품비주류음료           주류담배           의류신발       주거수도광열 
##          0.6012186         -1.7734412         -0.1926165          0.3743949 
## 가정용품가사서비스               보건               교통               통신 
##         -0.7012176         -0.1239901          0.4686621         -0.2432317 
##           오락문화               교육           음식숙박     기타상품서비스 
##         -0.3345623          0.3537468          0.5320247          0.1198706 
## 
## Residuals:
##      식료품비주류음료  주류담배   의류신발 주거수도광열 가정용품가사서비스
## 2007       -0.0147871  0.115305 -0.0069852   -0.0718574         -0.0310495
## 2008        0.0168937  0.083250 -0.0207699   -0.0297161         -0.0817465
## 2009        0.0027057  0.017325 -0.0257480   -0.0325300         -0.0673087
## 2010       -0.0027057 -0.017325  0.0069852   -0.0240298         -0.0037461
## 2011        0.0343624 -0.049507  0.0401204   -0.0039892         -0.0011645
## 2012        0.0209604 -0.091339  0.0574083    0.0039892          0.0011645
## 2013        0.0099703 -0.108221  0.0569374    0.0326525          0.0329841
## 2014       -0.0039122 -0.138211  0.0328128    0.0181940          0.0678351
## 2015       -0.0071710  0.017355 -0.0190254    0.0515593          0.0567526
## 2016       -0.0155771  0.073215 -0.0328043    0.0513900          0.1061005
##            보건       교통       통신   오락문화      교육   음식숙박
## 2007 -0.0418989  0.0089106  0.0967692 -0.0356696  0.018928  0.0408045
## 2008 -0.0641462  0.0113658  0.0530603 -0.0570333  0.085689  0.0524393
## 2009 -0.0102751  0.0074278  0.0243819 -0.0424518  0.133566  0.0022833
## 2010  0.0049989 -0.0452902  0.0010347  0.0030225  0.088340 -0.0290153
## 2011  0.0127940 -0.0020110 -0.0015469 -0.0075054  0.049175 -0.0289807
## 2012 -0.0187998 -0.0197041  0.0092060 -0.0030225 -0.018928 -0.0361739
## 2013 -0.0018836 -0.0099134 -0.0010347  0.0153573 -0.047208 -0.0234847
## 2014  0.0018836  0.0397040 -0.0443565  0.0391458 -0.073399 -0.0011273
## 2015  0.0344294  0.0020110 -0.0741868  0.0566559 -0.093450  0.0011273
## 2016  0.0604194 -0.0493313 -0.0936380  0.0775590 -0.109980  0.0193162
##      기타상품서비스
## 2007      0.0150637
## 2008     -0.0048644
## 2009      0.0048644
## 2010      0.0264398
## 2011      0.0704877
## 2012      0.0156801
## 2013     -0.0641577
## 2014     -0.0239912
## 2015     -0.0265093
## 2016     -0.0130213

위의 수치로는 추세를 확인하기 어려워 행효과인 시간의 흐름에 따른 소비변화를 Plot을 통해 확인해보았다.

barplot(consume.log.out$row,ylim=c(-0.15,0.15),ylab="row effects")

2007년 이후 대체적으로 꾸준하게 행효과가 증가하고 있다. 이는 소비지출이 해가 지남에 따라 증가하고 있다고 해석할 수 있을 것이다. 특이점으로는 2009년에서 2010년으로 넘어가면서 큰 폭으로 값이 증가하였다. 다만 2014년이후 2016년까지는 감소추세를 보이고 있다. 이러한 추세가 나타나는 이유에 대해 찾아본 결과 다음과 같다.

“글로벌 금융위기 이후 가계부채 누증 및 전세가격 상승은 채무상환 및 주거비 부담 증가를 통해 가계의 소비여력을 잠식하였다. 또한 고령화·저출산 등의 인구구조 변화와 저성장세 지속은 가계의 예비적, 유 보적 소비성향을 자극하였다. 특히 고령화가 빠르게 진행되는 가운데 노후소득 불안으로 예비적 저축이 큰 폭 늘어나면서 50∼60대의 소비성향이 전 연령대에 서 가장 낮은 수준으로 하락하였다.

이와 같이 가계소 득과 소비간 연계성 약화는 다양한 구조적 요인들이 복합적으로 영향을 미치며 나타난 현상으로서 앞으로 상당기간 지속될 전망이다.” *출처: 글로벌 금융위기 이후 가계소비 부진 배경 분석

barplot(consume.log.out$col)

다음으로 열효과를 살펴보자. 열효과 또한 Plot을 통해 시각적으로 확인해보았다.

열효과는 소비부문에서 차지하는 상대적 크기이다. 식료품비, 주류음료가 가장 큰 값을 가지고 있으며 다음으로 음식숙박, 교통순이다. 주류담배가 두드러지게 가장 작은 값을 가지고 있다. 식료품비, 주류음료는 다른 부문에 비해 생활에서 빼놓을 수 없기 가장 높게 나타나고 있는 듯하다.

par(mfrow=c(3,4))
barplot(consume.log.out$residuals[,1],main="식료품비주류음료",ylab="Residuals");barplot(consume.log.out$residuals[,2],main="주류담배 ",ylab="Residuals")
barplot(consume.log.out$residuals[,3],main="의류신발",ylab="Residuals");barplot(consume.log.out$residuals[,4],main="주거수도광열",ylab="Residuals")
barplot(consume.log.out$residuals[,5],main="가정용품가사서비스",ylab="Residuals");barplot(consume.log.out$residuals[,6],main="보건",ylab="Residuals")
barplot(consume.log.out$residuals[,7],main="교통",ylab="Residuals");barplot(consume.log.out$residuals[,8],main="통신",ylab="Residuals")
barplot(consume.log.out$residuals[,9],main="오락문화",ylab="Residuals");barplot(consume.log.out$residuals[,10],main="교육",ylab="Residuals")
barplot(consume.log.out$residuals[,11],main="음식숙박",ylab="Residuals");barplot(consume.log.out$residuals[,12],main="기타상품서비스",ylab="Residuals")

잔차를 통해 시간의 흐름에 따른 각 부문의 증가세를 확인해볼 수 있다. 다만 y축의 값이 약간씩 다르기 때문에 이 부분을 참고하여 해석하여야 한다. 주류담배의 증가세가 2015에 급격하게 상승한 것을 확인할 수 있다. 이는 2015년 담뱃값 인상에 따른 결과라고 보이며 개인적인 의견으로는 경제침체가 지속적으로 유지되면서 많은 사람들이 이 부문에 지출이 늘었을 것이라고 예상해본다.

식료품, 비주류음료는 그래프상으로는 변화가 있는 것처럼 보이지만 y값의 최대값과 최솟값이 다른 것에 비해 작아 증감폭이 적다고 볼 수 있다. 주거, 수도, 광열 부문은 꾸준하게 증가세를 보이고 있다. 이는 시간의 흐름에 따른 집값 상승이 가장 큰 요인일 것이라 생각한다.

마지막으로 오락문화 부문은 증가세인 것을 볼 수 있다. 이는 영화관람 등 취미생활을 즐기는 것을 중요시 여기는 문화가 점점 자리잡고 있음을 예상해볼 수 있다.

2. 유인물에 있는 자료 중 암발생과 흡연에 대한 자료 만 사용하여 R의 중간값 다듬기로 분석하여라. 비교값 그래프로 변환이 필요한지 점검하여라. 투키가 그렸던 도시별 온도에 대한 격자모양 그래프와 같은 것을 그려라. (흰 종이 또는 모눈종이 위에 자를 사용하여 직접 그려도 좋고, R로 그려도 좋다. R은 시간이 걸릴 수 있다.)

DeathRate <- rbind(c(0.07, 0.47, 0.86, 1.66),
                   c(0.00, 0.13, 0.09, 0.21),
                   c(0.41, 0.36, 0.10, 0.31),
                   c(0.44, 0.54, 0.37, 0.74),
                   c(0.55, 0.26, 0.22, 0.34),
                   c(0.64, 0.72, 0.76, 1.02))
colnames(DeathRate)=c("None","1-14","15-24","25+")
rownames(DeathRate)=c("Lung","Upper respiratory","Stomach","Colon and rectum",
                  "Prostate","Other")
medpolish(DeathRate, maxiter=1)
## 1: 3.47
## Warning in medpolish(DeathRate, maxiter = 1): medpolish() did not converge in 1
## iteration
## 
## Median Polish Results (Dataset: "DeathRate")
## 
## Overall: 0.4125
## 
## Row Effects:
##              Lung Upper respiratory           Stomach  Colon and rectum 
##            0.2525           -0.3025           -0.0775            0.0775 
##          Prostate             Other 
##           -0.1125            0.3275 
## 
## Column Effects:
##          None          1-14         15-24           25+ 
## -7.500000e-02 -6.938894e-18 -5.000000e-02  1.750000e-01 
## 
## Residuals:
##                     None   1-14  15-24    25+
## Lung              -0.520 -0.195  0.245  0.820
## Upper respiratory -0.035  0.020  0.030 -0.075
## Stomach            0.150  0.025 -0.185 -0.200
## Colon and rectum   0.025  0.050 -0.070  0.075
## Prostate           0.325 -0.040 -0.030 -0.135
## Other             -0.025 -0.020  0.070  0.105
medpolish(DeathRate, maxiter=2)
## 1: 3.47
## 2: 3.325
## Warning in medpolish(DeathRate, maxiter = 2): medpolish() did not converge in 2
## iterations
## 
## Median Polish Results (Dataset: "DeathRate")
## 
## Overall: 0.37125
## 
## Row Effects:
##              Lung Upper respiratory           Stomach  Colon and rectum 
##           0.29375          -0.29375          -0.14125           0.13125 
##          Prostate             Other 
##          -0.13125           0.36875 
## 
## Column Effects:
##     None     1-14    15-24      25+ 
## -0.07000  0.02875 -0.00375  0.18500 
## 
## Residuals:
##                      None     1-14    15-24     25+
## Lung              -0.5250 -0.22375  0.19875  0.8100
## Upper respiratory -0.0075  0.02375  0.01625 -0.0525
## Stomach            0.2500  0.10125 -0.12625 -0.1050
## Colon and rectum   0.0075  0.00875 -0.12875  0.0525
## Prostate           0.3800 -0.00875 -0.01625 -0.0850
## Other             -0.0300 -0.04875  0.02375  0.0950
med.d <- medpolish(DeathRate)
## 1: 3.47
## 2: 3.325
## 3: 3.29
## Final: 3.29

강의 Script를 이용하여 암발생과 흡연에 대한 사망률 자료를 생성하였다. 그 후 medpolish()를 이용하여 중간값 다듬기를 진행하였는데 maxiter=1,2일 때는 반복에서 수렴하지 않았다는 경고 메시지를 확인할 수 있었고 maxiter를 설정하지 않고 분석한 결과 maxiter=3에서 결과 값이 나오는 것을 확인하였다.

plot(med.d)
abline(0,1)
abline(lm(as.vector(med.d$residuals) ~ 
     as.vector(outer(med.d$row,med.d$col, "*")/med.d$overall)),col="red")

#med.d$residuals[1,4]=0

(검은선: 기울기1의 직선, 빨간선: lm()추정 선)

lm()함수를 이용한 기울기 값은 2.16778로 log변환이 적절한지에 대한 의문이 생겼다. 만약 k=2라면 다른 변환이 더 적절할 것이기 때문이다. 위의 중간값 다듬기 결과값을 살펴보면 lung의 25+ 잔차값이 다른 잔차에 비해 굉장히 큰 값(8.33)을 가지고 있다. 그래서 이를 0으로 바꾸고 시도했을 때 기울기 값을 구해보았고 그 결과 1.031로 log변환이 적절하다는 판단을 내릴 수 있었다.

또한 타 변환에 비해 log변환은 가법적 모형으로 나타낼 수 있기 때문에 더욱 log변환을 이용하고자 하였다. 승법적 모형에서 가법적 모형의 변환은 1번의 설명과 같다.

DeathRate[2,1] <- 0.03
(medpolish.log.DeathRate=medpolish(log(DeathRate)))
## 1: 8.763755
## 2: 8.444269
## Final: 8.444269
## 
## Median Polish Results (Dataset: "log(DeathRate)")
## 
## Overall: -1.034899
## 
## Row Effects:
##              Lung Upper respiratory           Stomach  Colon and rectum 
##         0.6384951        -1.1326654        -0.3080093         0.3080093 
##          Prostate             Other 
##        -0.3391828         0.6558099 
## 
## Column Effects:
##        None        1-14       15-24         25+ 
## -0.08064436  0.08064436 -0.19021349  0.41233823 
## 
## Residuals:
##                        None      1-14     15-24       25+
## Lung              -2.182212 -0.439263  0.435795  0.490883
## Upper respiratory -1.258349  0.046699 -0.050168  0.194578
## Stomach            0.531955  0.240613 -0.769463 -0.240613
## Colon and rectum  -0.013446  0.030059 -0.077149  0.013446
## Prostate           0.856889 -0.053636  0.050168 -0.117066
## Other              0.013446 -0.030059  0.294866 -0.013446

로그 변환 후 중간값 다듬기에서 Error메시지를 확인하였는데 이는 자료에 0이 존재하여 나타나는 것이다. 이를 해결하고자 수업 Script에 주어진 대로 0.03를 넣어 중간값 다듬기를 진행하였다. 이를 통해 얻은 중간값 다듬기 결과값은 위와 같다.

위의 결과를 통해 Other과 Lung에서 사망률이 높게 나타나고 있으며 담배를 피지 않은 사람이 사망률이 낮은 것을 확인하였다. 다만 아이러니한 점은 15-24 grams 흡연자들의 사망률이 가장 낮다는 점이다. 다음으로 비교값과 잔차의 산점도를 그려 모형을 판단하였다.

plot(medpolish.log.DeathRate,lwd=2)

몇몇 잔차의 값이 변환 전과 같이 큰 값을 가지고 있다. 하지만 lm()함수를 이용하여 기울기 값이 0.1임을 확인할 수 있었으며(대부분의 점들이 0 근처에 분포하고 있다.) 변환 전보다 의미 있는 패턴이 나타나지 않고 있기 때문에 log변환이 의미 있는 변환이라고 생각한다.

위 log변환 자료를 토대로 격자모양 그래프를 그렸다. 최종 완성 격자모양 그래프이다.
A caption

A caption

19개의 잔차의 절대값은 0.5보다 작으며 표시한 잔차의 절대값은 모두 0.5보다 크다. 위에서 중간값 다듬기 결과를 보면서 자료를 특성을 간략하게 설명하였다. 위 수치상으로 표현되었을 때보다 직관적으로 어느 암이 그리고 흡연량의 정도에 따라 사망률이 높게 나타나는지 볼 수 있다. 25gram이상 흡연하는 경우 Other암의 사망률이 가장 높으며 15-24gram 흡연자의 Upper respiratory암의 사망률의 가장 낮은 것을 확인할 수 있다. 마지막으로 어떤 암이던 25gram이상 흡연할 때 사망률이 가장 높게 나타나고 있으며 암 중에서는 Other을 제외하면 Lung으로 인한 사망률이 가장 높다.

3. 타이타닉 자료를 모자이크플랏으로 그리고 분석하여라.

head(Titanic)
## [1]  0  0 35  0  0  0

타이타닉 자료는 Class, Sex, Age, 생존여부에 따라 2201명의 자료를 테이블 형식으로 만든 자료이다. 먼저 각 특성에 따라 모자이크 Plot을 그려보았다.

par(mfrow=c(2,2))

#Age,Sex,Class,Survived
mosaicplot(~ Class, data = Titanic, color = TRUE)
mosaicplot(~ Sex, data = Titanic, color = TRUE)
mosaicplot(~ Age, data = Titanic, color = TRUE)
mosaicplot(~ Survived, data = Titanic, color = TRUE)

각 Plot에 변수가 1개만 사용되었기 때문에 각 사각형의 세로 길이는 신경 쓰지 않아도 되고 가로의 길이를 통해 각 특징들이 어떻게 나타나고 있는지 확인할 수 있다.

  1. Class의 경우 Crew(승무원)이 가장 많고 3등급, 1등급, 2등급순으로 나타나고 있다. Crew가 가장 많은 이유는 타이타닉 호에 승무원은 우리가 일반적으로 생각하는 승무원부터 요리사, 청소부 등 서비스를 제공하는 모습 사람들이 포함되어 있기 때문이라고 볼 수 있다.

  2. Sex의 경우 남성의 수가 여성의 수보다 월등하게 많음을 확인할 수 있다. 눈대중으로 남성의 수가 약 4배정도 많다고 볼 수 있다.

  3. Age를 통해 타이타닉 호에 탑승한 인원 대부분이 어른들이고 어린이는 매우 적다는 것을 확인할 수 있다. 또한, Crew에는 어린이인 사람이 없기 때문에 어른들의 인원이 더욱 많은 것이라 생각해볼 수 있었다.

  4. 마지막으로 가장 중요한 요소인 생존여부이다. 사망한 인원이 살아남은 인원보다 더 많으며 약 2배 이상이 될 것으로 보인다.

다음으로 각 특징(Class, Sex, Age)에 따른 생존여부를 나타낸 모자이크 Plot을 그렸다. 이 자료에서 1등급의 여성과 남성의 비율, 어른들의 좌석등급 분포보다는 생존여부에 가장 관심이 많을 것이기 때문에 생존여부를 모든 Plot에 포함시켰다.

위 Plot과 다르게 생존여부를 시각적으로 더 잘 나타내고자 대비되는 색상을 배치하였다.

par(mfrow=c(1,2))
mosaicplot(~ Class+Survived, data = Titanic, color = c("red","blue"))
mosaicplot(~ Sex+Survived, data = Titanic, color = c("red","blue"))

  1. Class에 따른 생존여부: 좌석등급이 높아질수록 생존율이 높아지고 있다는 것을 확인할 수 있으며 Crew는 3등석 인원과 생존율이 비슷하다. 좌석등급이 높으면 생존율이 높다는 결과는 어쩌면 당연하다고 볼 수 있다. 또한, 많은 승무원이 살아남지 못한 이유는 승객들을 구하기 위한 희생이지 않을까? 짐작해볼 수 있다.

  2. Sex에 따른 생존여부: 남성보다 여성의 생존율이 굉장히 높다. 그 이유는 당시 항해사가 여성과 어린이를 먼저 태우도록 하였기 때문이다. 추가적으로 위키백과에 의하면 2등 항해사가 “여자와 어린이 먼저”를 “여자와 어린이만”으로 받아들여 보트에 남은 자리가 있었지만 남성은 승무원이 거부하여 더 많은 희생자가 발생하였다고 한다.

mosaicplot(~ Age+Survived, data = Titanic, color = c("red","blue"))

  1. Age에 따른 생존여부: 어린이의 생존율이 성인보다 높게 나타나고 있다. 이는 위에서 언급한 바와 같이 어린이가 우선적으로 보트에 탑승했기 때문이다.

다음으로 특성 2개와 생존여부를 나타낸 모자이크 Plot을 그렸다. 변수의 순서에 따라 그림이 다르게 나오지만 모든 Plot에서 생존여부의 순서를 제일 마지막에 두었다. 변수의 순서는 분석이 필요한 부분에 맞추었다.

par(mfrow=c(1,3))
mosaicplot(~ Class+Age+Survived, data = Titanic, color = c("red","blue"))
mosaicplot(~ Age+Sex+Survived, data = Titanic, color = c("red","blue"))
mosaicplot(~ Sex+Class+Survived, data = Titanic, color = c("red","blue"))

  1. Class와 Age에 따른 생존여부: 어린이와 어른 모두 1등석에서 생존율이 높음을 확인할 수 있다. 어린이의 경우 1등석과 2등석에서 모두 생존하였고 3등석에서는 생존율이 낮게 나타나고 있다. Crew에서 어린이의 자료가 없기 때문에 직선으로 나타나고 있다. 또한 상자의 크기가 인원수에 비례하는데 이를 통해 승무원이 가장 많이 탑승하고 있었음을 알 수 있다.

  2. Age와 Sex에 따른 생존여부: 이 자료에서 흥미로운 사실을 발견할 수 있었다. 남자 어린이의 경우 여자 어린이보다 생존율이 낮긴 하지만 크게 차이가 나지는 않는다. 하지만 성인의 경우 남자와 여자의 생존율 차이가 큰 것을 볼 수 있다. 위에서도 언급하였지만 다시 한번 성인 남성의 경우 보트에 탑승하지 못하고 여성과 아이들이 우선적으로 탑승하였음을 알 수 있었다.

  3. Sex와 Class에 따른 생존여부: 이 자료에서는 위 내용과 대부분 비슷하지만 여성의 3등석에서 생존율이 눈에 띈다. 다른 Class에서는 여성의 생존율이 확연하게 높지만 3등석의 경우 반정도만 생존하였다. 이는 3등석이 생존하기 매우 힘든 위치에 있었을 것으로 예상된다.

마지막으로 모든 자료들을 포함한 모자이크 Plot을 그렸다.

mosaicplot(~ Sex + Class + Age + Survived, data = Titanic, color = c("red","blue"))

각 축에 어떤 특징을 나타내는지 설명되어 있으며 빨간 부분은 사망한 경우 파란 부분은 생존한 경우이다. 모든 특징을 포함하였기 때문에 필요한 부분을 바로 확인해볼 수 있다.

하지만 너무 많은 자료를 담고 있기 때문에 한 눈에 들어오지 않고 해석하기가 힘들다. 만약 분석에 있어 확고한 기준이 있다면 이렇게 모든 자료를 이용하기 보다는 필요한 부분만 뽑아서 더 간단한 모자이크 그림을 그리는 것이 특징을 파악하는데 더욱 용이할 것으로 판단된다. 위 그림의 해석은 이미 대부분 언급하였기 때문에 생략한다.

마지막으로 모자이크 그림을 그릴 때 순서에 따라 그림이 바뀌기 때문에 이를 주의하여야 한다.

par(mfrow=c(1,2))
mosaicplot(~ Survived + Sex, data = Titanic, color = TRUE,
           sub="Do not draw this plot!") 
mosaicplot(~ Sex + Survived, data = Titanic, color = TRUE) 

왼쪽은 Survived + Sex, 오른쪽은 Sex + Survived 순으로 그린 그림이다. 먼저 오는 변수가 아래에 다음 변수가 왼쪽에 표시됨을 확인할 수 있다. 그림의 모양은 비슷하게 보이지만 해석은 절대 그렇지 않다. 오른쪽 그림의 경우 성별에 따른 생존여부를 나타냈기 때문에 위에서 해석한 결과와 같게 나온다. 하지만 왼쪽의 그림은 생존한 남성과 여성의 상자가 비슷한 것을 확인할 수 있는데 이는 생존한 사람의 남성과 여성을 나타냈기 때문이다.

즉, 남성의 인원이 워낙 많기 때문에 생존율이 낮아도 생존 수는 비슷하게 나타나는 것이다. 이처럼 모자이크 그림을 그리는데 있어 순서를 유의하여 그려야 한다.