누락된 자료의 처리*

통계 처리에 있어 missing data를 어떻게 처리할까 하는 문제는 연구자에게 가장 골치 아픈 문제 중 하나이다. 대부분의 통계 방법은 입력된 자료가 완전하고 누락된 자료가 없다고 가정한다. 하지만 실제 우리가 사용하는 대부분의 데이터는 누락된 자료가 있다. 따라서 자료를 분석하기에 앞서 누락된 자료를 제거하거나 합당한 대체값으로 바꾸어야 한다. 때로 통계 패키지가 누락된 자료에 대한 디폴트 방법을 제공하기도 하지만 최선의 방법은 아닐 수도 있다. 따라서 누락된 자료에 대한 여러 가지 대처 방법들과 각각의 장단점을 이해하는 것이 중요하다. 이번 장에서는 누락된 자료를 찾아내고 누락된 패턴을 확인하는 법을 다루고 누락된 자료를 다루는 세 가지 중요한 방법(rational approach, listwise deletion, multiple imputation)을 배워보고자 한다.

누락된 자료(NA, not available) 확인

moonBook 패키지의 acs 데이터를 이용하여 누락된 자료가 얼마나 있는지 확인해보자. acs 데이터는 857명의 환자 자료이나 누락된 자료가 꽤 있다. acs 데이터 중 누락된 자료의 개수를 세어 na.count에 저장하고 이 중 0개가 아닌 자료만 고르면 다음과 같다.

require(moonBook)
na.count=apply(acs,2,function(x) sum(is.na(x)))
na.count[na.count>0]
    EF height weight    BMI     TC   LDLC   HDLC     TG 
   134     93     91     93     23     24     23     15 

이를 그래프로 나타내면 다음과 같다.

barplot(na.count[na.count>0])

누락된 자료의 패턴 분석

그래프로 보기

VIM 패키지의 aggr() 함수는 이들 누락된 자료의 조합이 어떤지 그래프로 보여준다. 함수를 실행시키기 전에 VIM 패키지를 설치한다.

install.packages("VIM")
require(VIM)
aggr(acs,prop=FALSE,numbers=TRUE)

왼쪽 그래프는 각 변수별로 NA값이 얼마나 되는지 보여주고 있으며, 오른쪽 그래프는 NA값이 어느 변수의 조합으로 있는지를 보여준다. 오른쪽 그래프의 제일 마지막 행을 보면 누락된 자료가 없는 행이 677개이고, 다음 행을 보면 EF만 누락된 자료가 74개, EF, height, weight, BMI가 누락된 자료가 47개 등으로 나타난다.

VIM 패키지의 marginplot은 두 개의 변수 간의 missing data의 관계를 보여준다.

marginplot(acs[c("EF","BMI")],pch=20,col=c("darkgray","red","blue"))