파이썬 상관계수 함수 종류 및 사용법
안녕하세요. 이번 글에서는 파이썬의 scipy 패키지를 이용하여
두 데이터의 피어슨 및 스피어만 상관계수 그리고 kendall 상관계수를
손쉽게 구하는 방법에 대하여 살펴보도록 하겠습니다.
먼저, 아래와 같이 0~9 숫자의 x1 데이터와 0~9의 제곱수에 2를 나눈 x2 데이터가
있다고 가정해보도록 하겠습니다.
import numpy as np
import matplotlib.pyplot as plt
x1 = np.arange(10)
x2 = x1 ** 2 / 2
plt.scatter(x1, x1, color = 'red', label = 'x1', alpha = 0.55)
plt.scatter(x1, x2, color = 'blue', label = 'x2', alpha = 0.55)
plt.legend()
plt.show()
이제 x1과 x2 데이터 사이에서의 피어슨, 스피어만 그리고 켄달타우 상관계수를 구해보겠습니다.
피어슨 상관계수 함수 : stats.pearsonr
from scipy import stats
stats.pearsonr(x1, x2)
# (0.9626907371412556, 8.103391267431583e-06)
피어슨 상관계수는 위와 같이 scipy 내 stats 라이브러리의 pearsonr 함수를 이용하여
손쉽게 구하는 것이 가능합니다.
위에서는 input으로 리스트를 넣었으나, np.array나 pd.Series 등 자료형도 가능합니다.
output의 첫 숫자는 상관계수 숫자를 의미하는 것이며, 약 0.963 정도로
매우 강한 양의 상관관계를 의미하고 있습니다.
(0.7 이상 정도면 매우 큰 상관관계를 의미합니다.)
두번째 숫자는 두 집단 간의 상관관계가 얼마나 유의미한지를 나타내는 p-value 값으로
보통 0.05 혹은 0.01 이하 정도면 유의미한 상관이 있다고 간주합니다.
여기서는 약 10^-5 이하로 두 집단은 거의 종속이라고 봐야할 정도의 작은 값이 나왔습니다.
스피어만 상관계수 함수 : stats.spearmanr
stats.spearmanr(x1, x2)
# SpearmanrResult(correlation=0.9999999999999999, pvalue=6.646897422032013e-64)
스피어만 상관계수도 spearmanr 함수를 이용하여 마찬가지 방식으로 구할 수 있습니다.
첫 숫자는 상관계수, 두번째 값은 p-value를 의미하는 점은 동일합니다.
x1과 x2는 뒤쪽으로 갈수록 단조 증가하는 패턴이 동일하여 순위 척도가 매우 유사하기에
1에 거의 근접한 상관계수가 관찰된 점을 알 수 있었습니다.
Kendall 상관계수 함수 : stats.kendalltau
stats.kendalltau(x1, x2)
# KendalltauResult(correlation=0.9999999999999999, pvalue=5.511463844797178e-07)
마지막으로, 켄달타우 상관계수도 같은 방법으로 사용 및 결과 해석을 진행하시면 됩니다.
스피어만 상관계수와 마찬가지로, 꾸준히 증가하는 패턴이 동일하여
거의 1에 해당하는 값이 등장하였습니다.
'Python > Scipy' 카테고리의 다른 글
[Scipy] 파이썬 p-value 찾기 방법 정리(T-test, 회귀 분석) (0) | 2022.07.13 |
---|---|
[Scipy] 파이썬 정규분포 확률밀도함수, 누적분포함수, 백분위수 찾기 : pdf, cdf, ppf (0) | 2022.06.04 |
[Scipy] 파이썬 t-검정 정리 : 단일표본, 독립표본, 대응표본 (2) | 2022.02.27 |