상관분석 : 피어슨 & 스피어만 (행렬 예제 포함)

 

이변량 관계(bivariate relationship)는 두 변수 사이의 관계 또는 상관관계를 설명한다. 이 튜토리얼에서는 상관관계(correlation)의 개념을 논의하고, 두 변수 사이의 관계를 측정하는 데에 어떻게 사용될 수 있는가를 살펴보겠다.

두 변수 사이의 상관관계를 계산하는 두 가지 기본 방법이 있다.

 

이 튜토리얼에서는 다음에 대하여 학습한다.

 

피어슨 상관관계

피어슨 상관관계 방법은 보통 두 변수 사이의 관계를 일차적으로 검토하기 위해 사용된다.

상관 계수(coefficient of correlation)는 두 변수와의 선형 관계의 강도에 대한 척도로 다음과 같이 계산된다.

img

여기에서,

상관계수의 범위는 ~1에서 1이다.

 

다음과 같이 t-검증 값을 계산하여, 자유도를 갖는 분포표를 확인할 수 있다.

img

 

스피어만 순위 상관관계

순위 상관 관계는 관측치를 순위별로 정렬하고 그 순위 간의 유사성 수준을 계산한다. 순위 상관관계는 특이치(outliers)에 강하다는 장점이 있으며, 데이터의 분포와 연결되지 않는다는 점이다. 순위 상관 관계는 서열 변수(ordinal variable)에 적합하다는 점에 주의 하기 바란다. (두 변수 간의 스피어만 상관 계수는 두 변수의 순위 값 사이의 피어슨 상관 계수와 같다.)

스피어만의 순위 상관계수는 항상 -1과 1 사이에 있고, 양 극단에 다가갈수록 강한 관계를 나타낸다. 이 계수는 다음과 같이 계산된다.

img

 

여기에서, 분자는 순위 척도 rgx와 rgy 사이의 공분산을, 그리고 분모는 각 변수의 표준편차를 나타낸다.

 

R에서는 cor() 함수를 사용한다. 이 함수는 x,y 그리고 method 등의 3 가지 인수를 취한다.

Arguments:

벡터가 결측치를 포함한다면 추가적인 인수로 use = "complete.obs"를 추가할 수 있다.

우리는 BudgetUK 데이터 세트를 사용할 것이다. 이 데이터 세트는 1980년과 1982년 사이 영국 가계의 예산 배분을 기록하고 있다. 10가지 특징(변수)을 가진 1,519개의 관측치가 있으며, 그 변수들은 다음과 같다.

 

Example

코드 설명 :

결과 :

 

이제 "피어슨"과 "스피어맨" 방법을 사용하여 income(소득)wfood(식음료) 변수수 사이의 상관 계수를 계산할 수 있다.

1) 피어슨 상관계수

결과 :

 

2) 스피어만 상관계수

결과 :

 

상관계수 행렬

이변량 상관관계는 좋은 출발이지만 다변량 분석(multivariate analysis)을 통해 더 큰 그림을 얻을 수 있다. 많은 변수와의 상관관계는 상관계수 행렬(correlation matrix) 안에서 그려진다. 상관계수 행렬은 모든 변수의 쌍대 상관관계를 나타내는 행렬이다.

cor() 함수는 상관계수 행렬을 반환한다. 이변량 상관관계과의 유일한 차이점은 변수를 지정할 필요가 없다는 것이다. 기본적으로 R은 모든 변수 사이의 상관관계를 계산한다.

주의 : factor 변수에 대해서는 상관관계를 계산할 수 없다는 점이다. 우리는 cor() 안에 데이터 프레임을 전달하기 전에 범주형 특징을 제거해야 한다.

 

상관관계 행렬은 대칭이며, 이는 대각선 위의 값들이 대각선 아래의 값들과 동일함을 의미한다. 행렬의 절반 만 보여주는 것이 더 시각적이다.

children_fac은 factor 수준 변수이기 때문에 제외한다. cor() 함수는 범주형 변수에 대해 상관관계 분석을 수행하지 않는다.

코드 설명 :

결과 :

 

유의수준

유의수준(significance level)은 우리가 피어슨이나 스피어만 방법을 사용할 때 어떤 상황에서는 유용하다. Hmisc 라이브러리의 rcorr() 함수는 우리에게 'p-값(p-value)'을 산출해 준다. 우리는 conda에서 라이브러리를 다운로드하고 코드를 복사하여 터미널에 붙여넣을 수 있다 :

rcorr()는 데이터 프레임을 행렬로 저장해야 한다. p-값으로 상관계수 행렬을 계산하기 전에 데이터를 행렬로 변환할 수 있다.

mat_2 는 리스트 변수로 다음의 3개 요소를 포함한다 [str(mat_2)] :

 

우리는 세 번째 요소인 p-값에 관심이 있다. 상관 계수 대신 p-값으로 상관 행렬을 표시하는 것이 일반적이다.

코드 설명 :

결과 :

 

상관계수 행렬 시각화

열 지도(heat map)는 상관관계 행렬을 보여주는 또 다른 방법이다. GGally 라이브러리는 ggplot2의 확장이다. 현재 conda 라이브러리에서는 이용할 수 없다. 우리는 콘솔에서 직접 설치할 수 있다.

 

img

 

라이브러리는 행렬에 있는 모든 변수의 상관관계 및 분포와 같은 요약 통계를 보여주는 다양한 함수를 포함한다.

 

ggcorr() 함수는 많은 인수를 가지고 있다. 이 튜토리얼에서는 주요 인수만 소개한다.

ggcorr() 함수

인수 :

 

기본 열 지도

가장 기본적인 패키지의 플롯(plot)은 열 지도(heat map)이다. 그래프의 범례는 -1부터 1까지의 그래디언트 컬러(gradient color)로 나타내며, 뜨거운 색은 강한 양의 상관관계를 차가운 색은 음의 상관관계를 나타낸다.

코드 설명 :

결과 :

img

 

열 지도에 제어기 추가하기

우리는 그래프에 더 많은 제어기를 추가할 수 있다.

코드 설명 :

결과 :

img

열 지도에 데이터 값 표시하기

GGally는 창 안에 데이터 값을 표시할 수 있게 해준다.

코드 설명 :

결과 :

img

ggpairs

마지막으로, 우리는 GGaly 라이브러리의 Ggpair() 함수를 소개한다. 이 함수는 행렬 형식으로 그래프를 작성한다. 우리는 세 종류의 연산 결과를 하나의 그래프 안에 표시할 수 있다. 행렬은 관측치의 수와 같은 차원이다. 대각선 부분의 상/하부는 창을 표시한다. 우리는 행렬의 각 부분에서 어떤 정보를 보여줄지 제어할 수 있다. ggpair()의 형식은 다음과 같다 :

인수 :

 

ggpair를 이용한 그룹별 이변량 분석

다음 그래프는 세 가지 정보를 나타낸다.

코드 설명 :

결과:**

[img

 

ggpair를 이용한 부분 그룹별 이변량 분석

다음의 그래프는 약간 다르다. upper 인수 안쪽으로 mapping의 위치가 변경되었다.

코드 설명 :

결과 :

img

 

요약

아래의 표에 함수들을 요약하였다.

라이브러리목적방법코드
Base이변량 상관관계피어슨cor(dfx2, method = "pearson")
Base이변량 상관관계Spearmancor(dfx2, method = "spearman")
Base다변량 상관관계피어슨cor(df, method = "pearson")
Base다변량 상관관계Spearmancor(df, method = "spearman")
HmiscP-값 rcorr(as.matrix(data[,1:9]))[["P"]]
Ggally열 지도 ggcorr(df)
 다변량 플롯 cf code below