오늘 할 일: 끝내주게 숨쉬기
article thumbnail

상관분석

상관분석은 회귀분석을 수행하기 전, 두 변수간 선형적인 관계가 존재하는지를 알아보는 분석입니다. 예를 들어 지능지수와 학업 성적간에 상호 의존 관계가 존재하는지를 그래프나 값을 통해 알아보는거죠. 주의해야 할 부분은 두 변수간의 원인-결과를 알아보는 분석이 아니라는 점입니다. 두 변수가 상관성(연관성)이 있을지, 얼마나 강한 관계가 존재하는지를 알아보는 과정이라고 할 수 있겠습니다.

 

산점도(Scatter plot)

산점도는 두 변수 간의 관계를 나타낸 그래프입니다. 각각에 대응하는 자료를 좌표 평면상에 점들로 나타내죠. 산점도를 통해서는 두 변수 간의 관계를 대략적으로만 알 수 있습니다.

trees 자료의 두 변수 Girth와 Volume의 산점도

이 관계를 객관적으로 파악하기 위해서는 상관계수(correlation coefficient)로 상관성의 정도를 정량화해야 합니다. 상관계수는 -1에서 1 사이의 값을 갖는데요, 절댓값이 클수록 강한 선형적인 관계를 갖는다고 하며, 절댓값이 작아 0에 가까울수록 약한 관계를 갖는다고 합니다. 부호가 양수이면 양의 상관관계, 음수이면 음의 상관관계를 의미합니다. 양의 상관관계란 한 변수가 증가하면 다른 변수 역시 증가하는 관계를, 음의 상관관계란 한 변수가 증가하면 다른 변수가 감소하는 관계를 뜻합니다. 위 산점도는 Girth가 증가함에 따라 Volume도 증가하는 양의 상관관계를 보여주고 있습니다.

 

상관계수의 종류

피어슨 상관계수(Pearson correlation coefficient)

피어슨 상관계수는 n개의 자료를 갖는 두 변수 x와 y으로부터 다음과 같이 정의합니다.

$$x : \{x_1, x_2, ..., x_n\},    y : \{y_1, y_2, ..., y_n\}$$

$$r_{xy} = \frac{\sum_{i=1}^{n} (x_i-\bar{x})(y_i-\bar{y})}{\sqrt(\sum_{i=1}^{n} (x_i-\bar{x})^2)\sqrt(\sum_{i=1}^{n} (y_i-\bar{y})^2)}$$

$$\bar{x}, \bar{y} : x, y의 표본평균$$

 

스피어만 상관계수(Spearman correlation coefficient)

기존의 자료를 순위 자료로 전환하고, 순위 자료로부터 피어슨 상관계수를 구한 것이 스피어만 상관계수입니다. 전환된 순위 자료를 r, s라고 한다면 다음과 같의 정의합니다. 기존 자료를 사용하지 않고 순위로 변환했기 때문에 이상치 자료에 덜 민감하다는 장점이 있습니다. 

$$r : \{r_1, r_2, ..., r_n\},    s : \{s_1, s_2, ..., s_n\}$$

$$r_{s} = \frac{\sum_{i=1}^{n} (r_i-\bar{r})(s_i-\bar{s})}{\sqrt(\sum_{i=1}^{n} (r_i-\bar{r})^2)\sqrt(\sum_{i=1}^{n} (s_i-\bar{s})^2)}$$

 

R에서 상관분석하기

R에서 제공하는 trees 데이터를 사용합니다. 세 변수 Girth, Height, Volume간의 피어슨 상관계수와 산점도는 다음과 같이 확인할 수 있습니다. cor() 함수는 피어슨 상관계수를 디폴트로 수행합니다.

trees의 세 변수에 대한 산점도

스피어만 산점도는 cor() 함수에서 method를 바꿔 수행할 수 있습니다.

 

다양한 시각화 방법

데이터 분석에 발을 한번이라도 담갔다면 절대 모를 수 없는, 왕왕 유명한 ✨아이리스 데이터를 사용해 분석에 유용한 시각화를 구현해보겠습니다. 

psych :: pairs.panels()

아이리스 데이터의 1열~4열은 연속형 자료이며, 5열에는 꽃의 종류(setosa, versicolor, virginica)가 요인형 자료로 입력되어 있습니다. 상관분석은 연속형 자료에 대해서만 수행되므로 1열부터 4열만 선택하여 시각화했습니다.

 

옵션을 조정하면 보다 유의미한 정보를 얻을 수 있습니다. 꽃의 종류에 따라 포인트의 색깔을 다르게하고 scale(상관계수의 절댓값에 따라 숫자의 크기를 조정)을 TRUE로 바꾸니 훨씬 보기 좋아졌네요.

 

corrplot :: corrplot()

네 변수의 상관성을 원형의 크기와 색을 이용하여 나타냈습니다. 이 시각화는 변수의 종류가 많은 경우에 유용하겠네요. mtcars 데이터를 이용하여 적용하면 다음과 같이 나타낼 수 있습니다.

 

corrplot :: corrplot.mixed()

상관행렬을 더 예쁘게 나타낼 수 있는 시각화 방법입니다. lower와 upper을 사용자가 직접 선택할 수 있습니다.