더북(TheBook)

밀도 그림(density)

데이터의 분포를 살펴보는 그래프로는 히스토그램이 가장 잘 알려져 있지만, 히스토그램은 막대를 그리는 구간bin의 너비를 어떻게 잡는지에 따라 전혀 다른 모양이 될 수 있다는 단점이 있다. density( )로 그리는 밀도 그림은 막대의 너비를 가정하지 않고 모든 점에서 데이터의 밀도를 추정하는 커널 밀도 추정kernel density estimation[3] 방식을 사용하여 이러한 문제를 피한다.

표 6-25 밀도 그림

density : 커널 밀도 추정

density(
  x # 커널 밀도를 추정할 데이터
)

반환 값은 밀도에 대한 데이터다. 이 값을 plot( )에 주면 밀도 그림을 그릴 수 있다.

rug : 그래프의 X 축에 데이터를 1차원으로 표시한다.

rug(
  x # 숫자 벡터
)

다음은 iris$Sepal.Width 데이터에 대한 커널 밀도 추정 그림을 그린 예다.

> plot(density(iris$Sepal.Width))
그림 6-34 iris$Sepal.Width의 커널 밀도 추정 그림
그림 6-34 iris$Sepal.Width의 커널 밀도 추정 그림

밀도 그림은 히스토그램과 같이 그릴 수 있다. plot( ) 대신 lines( )를 사용해 히스토그램 위에 선으로 밀도 그림을 그리면 된다.

> hist(iris$Sepal.Width, freq=FALSE)
> lines(density(iris$Sepal.Width))
그림 6-35 iris$Sepal.Width에 대한 히스토그램과 밀도 그림
그림 6-35 iris$Sepal.Width에 대한 히스토그램과 밀도 그림

밀도 그림에 rug( ) 함수를 사용하면 실제 데이터의 위치를 X 축 위에 표시할 수 있다. 이때, 데이터가 중첩되는 경우가 많다면 jitter( )를 같이 사용해 값이 구분되도록 한다.

> plot(density(iris$Sepal.Width))
> rug(jitter(iris$Sepal.Width))
그림 6-36 iris$Sepal.Width의 밀도 그림과 rug( )를 사용한 데이터 표시
그림 6-36 iris$Sepal.Width의 밀도 그림과 rug( )를 사용한 데이터 표시
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.