반응형

[R] 스피어만 상관 계수, 켄달의 타우 (Spearman's rank correlation coefficient, Kendall's tau) - cor.test()

 

 세상의 많은 지표들은 서로 상관되어있는 경우가 많다. 비흡연자에 비해 흡연자가 폐암에 잘 걸리고, 부모의 키가 클수록 아이의 키도 크다. 소득 수준이 높은 나라일수록 평균 수명도 길고, 수학 점수가 높은 학생은 물리 점수가 높으며, 식당에서 음식을 많이 시킬수록 계산해야 하는 금액도 커진다.

 그런데, 세상만사 칼같이 딱딱 떨어지는 게 아니다. 폐암에 걸리지 않는 꼴초도 있는가 하면, 부모의 키는 크지만 아이의 키는 작을 수 있다. 수학만 잘하고 물리는 못 할 수도 있다. 이렇게 예외가 있는 관계가 있는가 하면, 예외가 있을 수 없는 관계도 있다. $10,000$원짜리 삼겹살을 $x$인분 시키면 계산해야 하는 금액은 반드시 $10,000x$가 되는 게 일례가 될 수 있다. 

불확실성이 존재하는 관계

 

예외가 없는 관계

 

 예외가 많은 부모와 자녀의 키 문제로 돌아가 보자. 부모의 키로 자녀의 키를 유추하면 틀리는 경우가 많이 생기게 된다. 다시 말해, 불확실성이 높아진다. 반대로 삼겹살 주문량으로 예측한 계산 금액은 틀릴 수가 없다. 우리는 얼마나 정확하게 예측할 수 있는지를 계량하고자 한다. 그 방법 중 하나로, 두 변수가 연속 변수일 때 사용하는 피어슨 상관 계수 (Pearson's correlation coefficient)가 있다. 이는 이전 포스팅에서 다루었다. 2022.12.15 - [상관분석/R] - [R] 피어슨 상관 계수 (Pearson's correlation coefficient) - cor.test()

 

 하지만 세상 모든 변수가 연속형 변수는 아니다. "월 수입이 얼마입니까?"라는 설문에 주관식으로 "_____만원"으로 답했다면 이는 연속변수일 것이다. 하지만 "월 수입이 다음 중 어디에 속하십니까?"라는 설문에 대해 다음과 같은 객관식으로 답을 하게 되어있다면 이는 연속형 변수가 아닌 순위형 변수가 될 것이다.

 1) 100만 원 미만

 2) 100만 원 이상 300만 원 미만

 3) 300만 원 이상 700만 원 미만

 4) 700만 원 이상 1,500만 원 미만

 5) 1,500만 원 이상

 

 월 소득 50만원인 사람 A에게는 1이란 값이 부여될 것이고, 월 소득 1,700만 원인 사람 B에게는 5라는 값이 부여될 것이다. 부여된 1과 5의 평균을 구하는 것이 의미가 있을까? 만약 의미가 있다고 치고 구해보면 1과 5의 평균은 3이다. 따라서 평균 소득은 300만 원 이상 700만 원 미만일 것이라고 예측할 수 있는데, 사실  이 두 명의 평균 소득은 875만 원이므로 4번 구간에 속한다. 이런 차이가 발생하게 되므로, 점수 같은 연속형 변수 값 자체가 아니라 석차와 같은 순위형 변수의 상관관계를 보고 싶을 때에는 피어슨 상관 계수를 사용할 수 없다. 왜냐하면 피어슨 상관 계수는 평균, 표준편차, 공분산을 사용하기 때문이다. 대신에 스피어만 상관 계수 (Spearman's rank correlation coefficient)나 켄달의 타우 (Kendall's tau)를 사용해야 한다. 

 

스피어만 상관 계수 (Spearman's rank correlation coefficient - 주로 rho로 나타낸다.)나 켄달의 타우 (Kendall's tau)는 두 변수 사이의 상관관계의 정도를 나타내는 지표다. 이는 -1과 1 사이의 값을 갖는데 -1 혹은 1에 가까워질수록, 달리 표현하면 상관 계수의 절댓값이 커질수록, 즉 0에서 멀어질수록 "예측할 수 있는 정도"가 높아진다. 1에 가까워지는 것은 양의 상관관계인데 "예측도"가 증가하는 것을 의미하고, -1에 가까워지는 것은 음의 상관관계인데 "예측도"가 증가하는 것을 의미한다. 

 

*실습용 데이터는 아래 링크를 클릭하면 다운로드할 수 있습니다.

2022.08.04 - [공지사항 및 소개] - 분석용 데이터 (update 22.12.16)

 

분석용 데이터 (update 22.12.16)

2022년 12월 16일 버전입니다. 변수는 계속하여 추가될 예정입니다. 다음 카테고리에 있는 글에서 이용된 데이터입니다. - 기술 통계 - 범주형 자료 분석 - 모평균 검정 - 반복 측정 자료 분석 - 통계

medistat.tistory.com

 

코드를 보여드리기에 앞서 워킹 디렉토리부터 지정하겠다.

워킹 디렉토리에 관한 설명은 다음 링크된 포스트에서 볼 수 있다.

2022.08.05 - [통계 프로그램 사용 방법/R] - [R] 작업 디렉토리 (Working Directory) 지정 - getwd(), setwd()

setwd("C:/Users/user/Documents/Tistory_blog")

 

데이터를 불러와 df에 객체로 저장하겠다.

데이터 불러오는 방법은 다음 링크에서 볼 수 있다.

2022.08.05 - [통계 프로그램 사용 방법/R] - [R] 데이터 불러오기 : EXCEL - read_excel(), read.xlsx()

2022.08.10 - [통계 프로그램 사용 방법/R] - [R] 데이터 저장하기 : CSV 파일 - write.csv(), write_csv()

2022.08.10 - [통계 프로그램 사용 방법/R] - [R] 데이터 불러오기 : SAS file (.sas7bdat) - read.sas7bdat(), read_sas()

install.packages("readr")
library("readr")
df<-read_csv("Data.csv")

 

목표:  월 수입(순위형 변수)과 거주 지역 단위에는 관계가 있는가?

월 수입 :INC_CAT

0: 하위 3분위

1: 중앙 3분위

2: 상위 3분위

 

거주 지역 단위: RESID

0: 대도시

1: 중소도시

2: 시골

 

스피어만 상관 계수와 켄달의 타우를 구하는 코드는 다음과 같다.

 

코드

#Spearman's rank correlation coefficient
cor.test(df$RESID, df$INC_CAT, method="spearman")

#Kendall's tau
cor.test(df$RESID, df$INC_CAT, method="kendall")

cor.test(df$RESID, df$INC_CAT, method="spearman") : df데이터의 RESID와 df 데이터의 INC_CAT변수 간의 상관계수를 구하는데, Spearman's rank correlation coefficient를 구하라.
cor.test(df$RESID, df$INC_CAT, method="kendall") : df데이터의 RESID와 df 데이터의 INC_CAT변수간의 상관계수를 구하는데, Kendall의 tau를 구하라.

결과

	Spearman's rank correlation rho

data:  df$RESID and df$INC_CAT
S = 316858538, p-value < 2.2e-16
alternative hypothesis: true rho is not equal to 0
sample estimates:
       rho 
-0.9011531 


	Kendall's rank correlation tau

data:  df$RESID and df$INC_CAT
z = -30.976, p-value < 2.2e-16
alternative hypothesis: true tau is not equal to 0
sample estimates:
       tau 
-0.8711902

Spearman's rank correlation rho

data:  df$RESID and df$INC_CAT
S = 316858538, p-value < 2.2e-16
alternative hypothesis: true rho is not equal to 0
sample estimates:
       rho 
-0.9011531 


Kendall's rank correlation tau

data:  df$RESID and df$INC_CAT
z = -30.976, p-value < 2.2e-16
alternative hypothesis: true tau is not equal to 0
sample estimates:
       tau 
-0.8711902

 

-중요한 것은 맨 아래 숫자인 상관계수 -0.9011531와 -0.8711902이다. -1에 가까울수록 음의 상관관계가 존재함을 나타내는데, 이 정도면 꽤 높은 음의 상관관계가 있다고 할 수 있다.

- 따라서 대도시에 사는 사람일수록 수입이 많다고 할 수 있다.

- p value는 $2.2 \times 10^{-16}$보다 작으므로 매우 유의함을 알 수 있다. 따라서 귀무가설을 기각하고 대립 가설을 택해야 하는데, 이 검정의 귀무가설은 "상관 계수는 0"이라는 것이다. 따라서 상관 계수가 0은 아니라고 결론 내릴 수 있다.

 

얼마나 높아야 높다고 할 수 있는가?

위에서 0.79 정도면 꽤 높은 상관관계가 있다고 할 수 있다고 했는데, "얼마나 높은 것이 높은 것인가?"라는 의문이 들 수 있다. 즉, "how high is high?"라는 질문에 대한 답은 사실 정해져 있진 않다. 연구자마다 기준은 다른데, 그중 한 가지는 다음과 같다.

스피어만 상관 계수/켄달의 타우의 절댓값 $ ( \vert \rho \vert )$ 해석
$0.0<\vert \rho \vert\le0.2$ Very weak
$0.2<\vert \rho \vert\le0.4$ Weak
$0.4<\vert \rho \vert\le0.6$ Moderate
$0.6<\vert \rho \vert\le0.8$ Strong
$0.8<\vert \rho \vert\le1.0$ Very strong

 

둘 중 하나만 순위형 변수인 경우

 

만약 둘 중 하나만 순위형 변수고 다른 하나는 연속형 변수인 경우 어떻게 해야 할까? 예를 들어, 거주 지역 단위와 대기 중 미세먼지의 양 사이의 상관관계를 구하고자 할 때에도 스피어만 상관 계수 (Spearman's rank correlation coefficient)나 켄달의 타우 (Kendall's tau)를 사용해야 한다. 

 

 

스피어만 상관 계수 vs 켄달의 타우

둘 중에 어떤 것을 사용해야 할까?

스피어만 상관 계수는 tie가 없다고 가정한다. 즉, 같은 순위를 갖는 사람이 없는 것이다. 위 예시의 경우 대도시, 중소도시, 시골에 사는 사람이 1명씩은 아니니 스피어만 상관 계수는 적절하지 않다. 이럴 때에는 켄달의 타우가 더 적절하다. 또한, 표본의 수가 적을 때에도 켄달의 타우가 조금 더 적절하다.

 

[R] 스피어만 상관 계수, 켄달의 타우 (Spearman's rank correlation coefficient, Kendall's tau) 정복 완료!

 

작성일: 2022.12.16.

최종 수정일: 2023.10.17.

이용 프로그램: R 4.2.2

RStudio v2022.07.2

RStudio 2022.07.2+576 "Spotted Wakerobin" Release

운영체제: Windows 10, Mac OS 12.6.1

반응형

+ Recent posts