본문 바로가기
R 프로그래밍/R을 활용한 탐색적 자료 분석

탐색적 자료 분석(공변량1)

by 찐남 2021. 9. 29.
본 포스팅은 R for Data Science를 기반으로 하여 작성하였습니다.

 

변동(variation)이 변수 내 행동을 설명하는 통계량이라면, 공변량(covariation)은 변수 간의 행동을 설명합니다. 공변은 두 개 이상의 변수 값이 관련된 방식으로 함께 변하는 경향입니다. 공변량을 찾는 가장 좋은 방법은 둘 이상의 변수 간의 관계를 시각화하는 것입니다. 이를 수행하는 방법은 관련된 변수 유형에 따라 달라집니다. 



1. 하나의 범주형 및 연속형 변수

 

범주형 변수로 분류된 연속 변수의 분포를 탐색하려는 것이 가장 일반적입니다. geom_freqpoly()의 기본 모양은 높이가 개수에 의해 지정되기 때문에 상기 종류의 비교에는 별로 유용하지 않습니다. 즉, 그룹 중 하나가 다른 그룹보다 훨씬 작으면 모양의 차이를 확인하기 어렵습니다. 예를 들어 다이아몬드의 가격이 품질에 따라 어떻게 달라지는지 살펴보겠습니다. 

 

ggplot(data = diamonds, mapping = aes(x = price)) +
____geom_freqpoly(mapping = aes(colour = cut), binwidth = 500)

 

상기 그래프를 보면 아시겠지만, 전체 개수가 너무 다르기 때문에 분포의 차이를 확인하기 어렵습니다. 

ggplot(diamonds) +
____geom_bar(mapping = aes(x = cut))

 

비교를 더 쉽게 하려면 y축에 표시되는 내용을 바꿔야 합니다. 개수를 표시하는 대신 각 빈도 사각형 아래의 면적이 1이 되도록 표준화된 개수인 밀도를 표시합니다.

ggplot(data = diamonds, mapping = aes(x = price, y = ..density..)) +
____geom_freqpoly(mapping = aes(colour = cut), binwidth = 500)



이 플롯에는 다소 놀라운 점이 있습니다. Cutting이 Fair 한 다이아몬드(가장 낮은 품질)의 평균 가격이 가장 높은 것으로 보입니다. 하지만 이는 geom_freqpoly를 해석하기가 조금 어렵기 때문일 수도 있습니다. 이 플롯에는 많은 작업이 필요해 보입니다. 범주형 변수로 분류된 연속형 변수의 분포를 표시하는 또 다른 대안은 상자 그림(box plot)입니다. 상자 그림(box plot)은 통계학에서 매우 인기 있는 값 분포에 대한 시각적 속기 유형입니다. 각 상자 그림은 다음으로 구성됩니다. 

 

  • 분포의 25번째 백분위수에서 사분위수 범위(IQR)로 알려진 거리인 75번째 백분위수까지는 상자(box)로 표시됩니다. 상자 중앙에는 분포의 중앙값, 즉 50번째 백분위수를 표시하는 선이 있습니다. 이 상자(box)로 분포의 산포와 분포가 중앙값에 대해 대칭인지 또는 한쪽으로 치우쳐 있는지 여부를 알려줍니다. 
  • 상자의 양쪽 가장자리에서 IQR의 1.5배 이상 떨어지는 관측치는 점(point)으로 표시합니다. 이러한 지점은 통상 이상치(outlier)로 개별적으로 표시됩니다. 
  • 상자의 각 끝에서 연장되어 이상치로 뻗어 있는 가는 선(또는 수염)

 

그럼 geom_boxplot()을 이용하여 cut별 가격 분포를 다시 살펴보도록 하겠습니다.

ggplot(data = diamonds, mapping = aes(x = cut, y = price)) +
____geom_boxplot()

분포에 대한 정보는 적지만 box plot은 훨씬 더 간결하여 더 쉽게 비교할 수 있습니다(하나의 그림에 표현하기에 더 맞아 보입니다.). box plot으로부터 더 나은 품질의 다이아몬드(cut: Ideal)가 평균적으로 더 저렴하다는 반직관적인 발견을 하게 됩니다. 그 이유 무엇인지 추가적인 질문을 할 수 있습니다. 



cut은 정렬된 요소입니다(Fair < Good < Very Good < Premium < Ideal 순으로 좋습니다.). 많은 범주형 변수에는 고유한 순서가 없으므로 보다 유익한 표시를 위해 순서를 변경할 수 있습니다. 이를 수행하는 한 가지 방법은 reorder() 함수를 사용하는 것입니다. 

 

ggplot(data = mpg, mapping = aes(x = class, y = hwy)) +
____geom_boxplot()

 

ggplot(data = mpg) +
____geom_boxplot(mapping = aes(x = reorder(class, hwy, FUN = median), y = hwy))

 

긴 변수 이름이 있는 경우 90° 뒤집으면 geom_boxplot()이 더 잘 작동합니다. 이것은 coord_flip()으로 할 수 있습니다. 

ggplot(data = mpg) +
____geom_boxplot(mapping = aes(x = reorder(class, hwy, FUN = median), y = hwy)) +
____coord_flip()

 



반응형

댓글