반응형

 

[R] 피어슨 상관 계수 (Pearson's correlation coefficient) - cor.test()

 

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

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

불확실성이 존재하는 관계

 

예외가 없는 관계

 

 예외가 많은 부모와 자녀의 키 문제로 돌아가 보자. 부모의 키로 자녀의 키를 유추하면 틀리는 경우가 많이 생기게 된다. 다시 말해, 불확실성이 높아진다. 반대로 삼겹살 주문량으로 예측한 계산 금액은 틀릴 수가 없다. 우리는 얼마나 정확하게 예측할 수 있는지를 계량하고자 한다. 그 방법 중 하나가 피어슨 상관 계수 (Pearson's correlation coefficient)다. 

 

피어슨 상관 계수 (Pearson's correlation coefficient)는 두 변수 사이의 상관관계의 정도를 나타내는 지표다. 이는 -1과 1 사이의 값을 갖는데 -1 혹은 1에 가까워질수록, 달리 표현하면 상관 계수의 절댓값이 커질수록, 즉 0에서 멀어질수록 "예측할 수 있는 정도"가 높아진다. 1에 가까워지는 것은 양의 상관관계인데 "예측도"가 증가하는 것을 의미하고, -1에 가까워지는 것은 음의 상관관계인데 "예측도"가 증가하는 것을 의미한다. 여기에서 예측하는 방법은 선형 방법이다. 즉, 한 변수의 값 $x$를 알 때, 적절한 실수 $a, b$에 대해 $y$값이 $y=ax+b$ 일 것이라고 예측할 수 있다는 것이다. 여기에서 피어슨 상관 계수에 대해 대표적으로 오해하는 점 두 가지를 들 수 있다. 

 

 1) 피어슨 상관 계수가 크면 기울기($a$값)이 크다. 기울기는 위 삼겹살 예시에서 1인분당 가격을 의미하는 것인데, 1인분 추가 주문 시 증가되는 전체 주문 금액으로 이해할 수 있다. 그런데 피어슨 상관 계수에는 이에 대한 정보가 전혀 없다. 피어슨 상관 계수는 (1) 양의 상관관계인지 음의 상관관계인지, (2) 얼마나 "예측도"가 큰지, 즉 데이터들이 얼마나 직선상에 모여있는지 에 대한 정보만 제공한다. 

 

 2) 피어슨 상관 계수가 0이면, 두 변수 사이에는 어떠한 상관 관계도 없다. 위에서 설명했듯이, 피어슨 상관 계수는 선형 방법으로 예측할 수 있는 정도를 표현한다. 따라서 선형 관계가 아닌 2차 함수 관계, 사인 함수 관계, 원형 함수 관계 등이 존재한다면, 두 변수 사이의 어떤 관련성은 분명히 존재하는 것이지만, 피어슨 상관 계수는 0일 수 있다. 

 

 본격적으로 피어슨 상관 계수를 구해보자. 

 

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

 

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

 

분석용 데이터 (update 22.12.01)

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

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")

 

목표:  혈중 ALT와 AST에는 선형 상관관계가 존재하는가?

피어슨 상관 계수 (Pearson's correlation coefficient)를 구하는 코드는 다음과 같다.

 

코드

cor.test(df$ALT, df$AST)

cor.test(df$ALT, df$AST) : df 데이터의 ALT와 df 데이터의 AST사이의 피어슨 상관 계수를 구하라. 

 

결과

	Pearson's product-moment correlation

data:  df$ALT and df$AST
t = 40.364, df = 990, p-value < 2.2e-16
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.7639495 0.8111146
sample estimates:
      cor 
0.7886897

Pearson's product-moment correlation

data:  df$ALT and df$AST

t = 40.364, df = 990, p-value < 2.2e-16

alternative hypothesis: true correlation is not equal to 0

95 percent confidence interval:  0.7639495 0.8111146

sample estimates:       

cor 

0.7886897 

 

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

- 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

 

피어슨 상관 계수 산출의 가정

 피어슨 상관 계수를 산출할 때, 기본적으로 가정은 존재하지 않는다. 수학적으로 표현하면 공분산을 각각의 표준 편차로 나눠준 것이니, 어떠한 가정도 필요하지 않다. 다만 해석에 유의해야 한다. 피어슨 상관 계수가 1 또는 -1에 가까운 값이 나왔을 때의 해석은 어디까지나 "선형 상관관계가 있다."는 것이다. 심지어 1에 가까운 값이더라도, 선형 상관관계보다 두 변수 사이의 관계를 더 잘 표현하는 관계가 있을 수 있다. 예를 들어, 어떤 변수 x와 y의 피어슨 상관 계수는 0.89로 매우 높은데, 둘 사이의 그래프는  아래와 같이 그려진다고 하자.

둘 사이의 상관 계수가 1(완벽한 선형 예측이 가능)은 아니지만, x와 y사이에는 이차 함수의 관계가 있는 것으로 보인다. "예측도"측면에서 상관 계수가 1은 아니므로 선형 예측은 완벽하지 않지만, 이차 함수의 관계로 보면 완벽하게 예측할 수 있는 관계다. 

 

또한, 피어슨 상관 계수가 0에 가까운 값이 나왔을 때의 해석은 어디까지나 "선형 상관관계가 없다."는 것이다.  예를 들어 상관계수가 0인 다음 두 변수 x와 y의 그래프는 다음과 같이 그려진다고 한다.

"예측도"측면에서 상관 계수가 0이므로 선형 예측이 불가능해야 하지만, 이차 함수의 관계로 보면 완벽하게 예측할 수 있는 관계다. 따라서 피어슨 상관 계수를 "예측도", "관련성"이라는 의미로 사용하려 한다면, 두 변수 사이의 산점도를 꼭 그려보는 것이 좋다.

 

두 변수 사이의 산점도 (플롯) 그리기.

산점도를 그리는 방법은 이전 포스팅에서 소개한 바 있다. 2022.12.07 - [[R] 그래프 작성] - [R] [plot() 함수] 산점도 그리기 (1) - plot(), colors() AST와 ALT의 산점도를 그리면 다음과 같다.

plot(df$ALT, df$AST)

어떤 선형 관계가 있는 것으로 보인다. 아마 선을 잘 그린다면 다음과 같이 그려질 것이다.

선을 그리는 코드 :&nbsp;abline(a=as.numeric(b), b=as.numeric(c), col=2, lwd=3)

 

그렇다면 우리가 산출한 피어슨 상관 계수는 AST와 ALT의 관련성을 잘 나타낸다고 할 수 있다. 즉, 이차 함수 관계 등 다른 비선형적 관계가 있는데도 불구하고 우리가 선형 상관 계수를 구해서 1보다 낮은 값이 나온 것이 아니라, 원래 선형 관계인데 어느 정도의 불확실성 때문에 1보다는 낮은 값이 나온 것이라고 결론지을 수 있다. 따라서 산점도를 꼭 그려보고 어떠한 관계 속에 있는지 확인하고 상관 계수를 해석하는 것은 매우 중요하다. 

 

가정이 정말 없는가?

 가정이 필요하다는 글, 책들이 정말 많을 것이다. 그럼에도 불구하고 나는 가정이 필요 없다는 말을 계속해왔다. 정말 가정이 없는 것일까? 답은 "그렇다"이다. 정말 없다. 하지만, Pearson's correlation coefficient가 적절할 때, 적절하지 않을 때는 분명히 존재한다. 피어슨 상관 계수는 두 변수가 연속형 변수일 때 좋다. 그리고 이상치(outlier)가 없을 때 정말 좋다. 이상치(outlier)는 피어슨 상관 계수의 값을 크게 변화시킬 수 있으며, 특히 표본의 수가 많지 않을 때 이런 일은 더 빈번하게 나타날 수 있다. 이럴 때에는 스피어만 상관 계수 (Spearman correlation coefficient)나 켄달의 타우 (Kendall's tau)가 더 적절할 수 있다. 이 두 가지 방식은 특히 순서형 변수일 때 더 큰 효용성을 갖는다. 

 아마도 위와 같은 이유로 피어슨 상관 계수 (Pearson's correlation coefficient)의 전제조건으로 정규성을 많이 이야기하는지도 모른다. 정규성을 따른다면 적어도 이상치로부터 어느 정도 자유로울 수 있고, 왜곡된 상관 계수가 산출되지 않을 수 있다.

 

[R] 피어슨 상관 계수 (Pearson's correlation coefficient) 정복 완료!

작성일: 2022.12.15.

최종 수정일: 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