Pearson 상관계수 (Pearson Correlation Coefficient)
개념:
Pearson 상관계수는 두 변수 간의 선형적(linear) 관계의 정도를 측정하는 통계량입니다.
값의 범위는 −1-1부터 +1+1이며,
•
+1+1에 가까울수록 두 변수는 강한 양의 선형관계,
•
−11에 가까울수록 강한 음의 선형관계,
•
00에 가까울수록 선형관계가 약함을 의미합니다.
공식:
두 변수 XX와 YY의 Pearson 상관계수 rr는 다음과 같이 정의됩니다.
r=∑i=1n(xi−xˉ)(yi−yˉ)∑i=1n(xi−xˉ)2∑i=1n(yi−yˉ)2r = \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}}
여기서 xˉ\bar{x}, yˉ\bar{y}는 각각 XX, YY의 평균입니다.
Chatterjee 상관계수 (Chatterjee Correlation Coefficient)
개념:
Chatterjee 상관계수는 2020년 Sourav Chatterjee가 제안한 새로운 형태의 상관계수로, 두 변수 사이의 단조(montonic) 관계 정도를 측정하는 지표입니다. Pearson 상관계수가 선형 관계를 포착하는 반면, Chatterjee 상관계수는 변수 간의 단조적 관계(단조증가 혹은 단조감소)에 민감하게 반응합니다. 또한 분포에 대한 가정 없이 비모수적(nonparametric)으로 정의됩니다.
정의 개략:
표본 (X1,Y1),…,(Xn,Yn)(X_1,Y_1), \ldots, (X_n,Y_n)이 있을 때, XX를 오름차순으로 정렬한 뒤, 그 순서에 따라 YY 값의 순위(rank)를 매깁니다. 이 순위 변화량을 통해 Chatterjee 상관계수를 계산합니다. 그 공식은 다음과 같이 표현됩니다.
1.
데이터를 에 따라 정렬한다. (즉, )
XX
X(1)≤X(2)≤⋯≤X(n)X_{(1)} \le X_{(2)} \le \cdots \le X_{(n)}
2.
정렬된 순서에 따라 값을 (정렬 후 값의 순위)로 매긴다.
YY
RiR_i
YY
3.
Chatterjee 상관계수 는 대략 다음과 같이 정의된다.
ξn\xi_n
ξ^n=1−3∑i=1n−1∣Ri+1−Ri∣n2−1.\hat{\xi}_n = 1 - \frac{3 \sum_{i=1}^{n-1}|R_{i+1} - R_i|}{n^2 - 1}.
ξ^n\hat{\xi}_n은 0과 1 사이 값을 가지며, 1에 가까울수록 강한 단조 관계를 의미합니다.
(만약 완벽한 단조관계라면 ξ^n=1\hat{\xi}_n = 1, 무관하거나 상관이 거의 없는 경우 0에 근접)
예시 데이터
1.
선형 관계가 뚜렷한 경우
X=[1,2,3,4,5],Y=[2,4,6,8,10]X = [1, 2, 3, 4, 5], \quad Y = [2, 4, 6, 8, 10]
이 경우 Y=2XY = 2X로 완벽한 양의 선형관계입니다. Pearson 상관계수는 거의 1에 가까울 것이며, 이는 단조 관계이기도 하므로 Chatterjee 상관계수도 1에 가까울 것입니다.
2.
전혀 관계가 없는 경우
X=[1,2,3,4,5],Y=[2,2,2,2,2]X = [1, 2, 3, 4, 5], \quad Y = [2, 2, 2, 2, 2]
여기서 YY는 모든 관측치에 대해 동일한 값입니다. Pearson 상관계수는 0에 근접하고, 단조 관계 유무가 의미가 없으므로 Chatterjee 상관계수 역시 0에 가까울 것입니다.
3.
비선형이지만 단조 관계인 경우
X=[1,2,3,4,5],Y=[1,2,4,8,16]X = [1, 2, 3, 4, 5], \quad Y = [1, 2, 4, 8, 16]
이 경우 YY는 XX가 증가함에 따라 단조증가하지만 비선형(지수적) 관계입니다. Pearson 상관계수는 양의 값이지만 1보다는 낮을 것입니다. 반면 Chatterjee 상관계수는 단조 증가 관계를 강하게 포착하여 1에 가깝게 나올 것입니다.
Python 코드 예시
아래 코드 예시에서는
•
scipy.stats의 pearsonr 함수를 사용하여 Pearson 상관계수를 구하고,
•
Chatterjee 상관계수를 계산하기 위한 함수를 직접 구현합니다.
(현재 표준 라이브러리에 Chatterjee 상관계수 함수가 포함되어 있지 않으므로, 논문에서 제안한 공식을 바탕으로 간단히 구현하였습니다.)
import numpy as np
from scipy.stats import pearsonr, rankdata
def chatterjee_correlation(x, y):
# x에 따라 정렬한 순서에 맞추어 y를 재배열
# x를 기준으로 정렬한 인덱스를 얻는다.
idx = np.argsort(x)
x_sorted = np.array(x)[idx]
y_sorted = np.array(y)[idx]
# y_sorted에 대해 순위를 매긴다.
# rankdata: 동일값에 대해서는 평균 순위 부여
R = rankdata(y_sorted, method='average')
# Chatterjee 상관계수 계산
n = len(x)
numerator = np.sum(np.abs(np.diff(R))) # |R_{i+1}-R_i|의 합
xi = 1 - (3 * numerator) / (n**2 - 1)
return xi
# 예시 1: 선형 관계
X1 = [1, 2, 3, 4, 5]
Y1 = [2, 4, 6, 8, 10]
pearson_1, _ = pearsonr(X1, Y1)
chatterjee_1 = chatterjee_correlation(X1, Y1)
print("예시 1 (완벽한 선형 관계):")
print("Pearson 상관계수:", pearson_1)
print("Chatterjee 상관계수:", chatterjee_1)
print()
# 예시 2: 상관이 없는 경우
X2 = [1, 2, 3, 4, 5]
Y2 = [2, 2, 2, 2, 2]
pearson_2, _ = pearsonr(X2, Y2)
chatterjee_2 = chatterjee_correlation(X2, Y2)
print("예시 2 (상관성이 거의 없는 경우):")
print("Pearson 상관계수:", pearson_2)
print("Chatterjee 상관계수:", chatterjee_2)
print()
# 예시 3: 비선형이지만 단조 증가 관계
X3 = [1, 2, 3, 4, 5]
Y3 = [1, 2, 4, 8, 16] # 지수적 증가
pearson_3, _ = pearsonr(X3, Y3)
chatterjee_3 = chatterjee_correlation(X3, Y3)
print("예시 3 (비선형 단조 증가 관계):")
print("Pearson 상관계수:", pearson_3)
print("Chatterjee 상관계수:", chatterjee_3)
Python
복사
결과 해석 (실행 시 예상 결과):
•
예시 1:
◦
Pearson ≈ 1.0 (아주 강한 양의 선형관계)
◦
Chatterjee ≈ 1.0 (완벽한 단조 증가)
•
예시 2:
◦
Pearson = 0.0 (변화가 없는 Y, 선형관계 없음)
◦
Chatterjee ≈ 0 (단조 관계를 파악할 여지가 없음, 사실상 의미 없는 경우)
•
예시 3:
◦
Pearson 상관계수는 양수지만 1보다는 작음 (선형보다는 곡선 관계이므로)
◦
Chatterjee 상관계수는 1에 매우 가까움 (X 증가에 따라 Y도 단조증가)
이처럼 Pearson 상관계수는 선형적 관계를, Chatterjee 상관계수는 단조적 관계를 포착하는 특징이 있으며, 상황에 따라 더 적합한 상관계수를 선택하여 사용할 수 있습니다.