상관계수( correlation coefficient, r )는 두 확률 변수 사이의 통계적 관계를 표현하기 위해 특정한 상관 관계의 정도를 수치적으로 나타낸 계수이다.
상관관계에도 정도가 있다. 명백하고도 강력한 관계가 나타나는가 하면, 관계가 있는 듯 없는 듯한 상관관계가 나타나기도 한다. 이런 차이들을 나타내기 위해서 통계학자들은 '상관계수'라는 것을 만들었다. 여러가지 고안된 방법이 있으며, 대표적으로 피어슨 상관계수(Pearson Correlation Coefficient, Pearson's r), 스피어만 상관계수(Spearman Correlation Coefficient), 크론바흐의 알파(Cronbach's Alpha)가 있다. 이 중 데이터의 성격에 따라 적용방법이 다르긴 하나 일반적으로 수치 데이터인 경우 피어슨 상관계수가 많이 사용된다.
https://support.minitab.com/ko-kr/minitab/help-and-how-to/statistics/basic-statistics/how-to/correlation/interpret-the-results/all-statistics-and-graphs/
상관관계는 데이터 간 단순 관계를 설명하는 데 유용하다. 예를 들어 산지 공원에 있는 야영지의 데이터 집합을 확인한다고 가정하자. 야영지의 고도(산지의 높이)와 여름 평균 최고 기온 간에 관계가 있는지에 대해 알아보려고 한다. 각 개별 야영지의 경우 두 가지 측도는 고도 및 온도가 있다. 상관관계가 있는 표본에서 이 두 가지 변수를 비교하면 고도가 증가함에 따라 온도가 변화하는 선형 관계를 찾을 수 있다.
피어슨 상관계수는 두 변수 간의 선형 관계의 강도와 방향을 나타내는 지표로, -1에서 1 사이의 값을 가진다.
1: 완벽한 양의 상관관계
-1: 완벽한 음의 상관관계
0: 상관관계 없음
피어슨 상관계수 계산 공식 : 𝑟 = 공분산 / 표준편차
피어슨 상관계수(r)를 해석하는 법
절대값 1에 가까울수록 두 변수 간 상관관계는 비례하고 -1에 가까울수록 반비례한다.
각 데이터가 완전히 동일하면 +1, 전혀 다르면 0, 반대방향으로 완전히 동일하면 -1의 값을 갖는다.
계수의 부호는 관계의 방향을 나타낸다. 두 변수가 함께 증가하거나 감소하는 경향(비례) 이 있으면 계수가 양수이며, 대체적으로 y=x의 그래프를 띄게 될 것이고, 한 변수가 증가할 때 다른 변수는 감소하는 경향(반비례)이 있으면 계수는 음수이며, 대체적으로 y=1/x의 그래프를 띄게 될 것이다. 따라서 부호가 없는 상관계수 값인 0인 관계가 존재하지 않으니 상관 관계 자체가 없는것이다.
산점도를 통해 시각화 한 피어슨 상관계수를 확인해보자.
🔊 JavaScript를 지원하는 simple-statistics는 다양한 통계 계산 기능을 제공하는 라이브러리로, 피어슨 상관계수를 쉽게 계산할 수 있다.
> npm install simple-statistics
simple-statistics ESM 환경에서 임포트하려면 기본 방식 말고 이름 있는 내보내기(Named Exports) 방식 사용
ex)
import * as ss from 'simple-statistics'; // ESM 방식으로 simple-statistics를 CDN에서 임포트
// import * as ss from 'https://cdn.skypack.dev/simple-statistics';
// 또는 ESM 지원 CDN을 사용하여 라이브러리를 임포트
// import * as ss from 'https://esm.sh/simple-statistics@7.7.0';
// 데이터 정의
const x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
const y = [1, 0, 5, 4, 6, 8, 4, 8, 9, 12];
// 피어슨 상관계수 계산
const correlation = ss.sampleCorrelation(x, y);
console.log(`피어슨 상관계수: ${correlation.toFixed(3)}`);
ex) html 문서에서 cdn 사용
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<!-- TensorFlow.js 로드 -->
<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs/dist/tf.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-vis/dist/tfjs-vis.umd.min.js"></script>
<!-- 통계관련 기타 (상관계수 등) 라이브러리 로드 -->
<script src="https://cdn.jsdelivr.net/npm/simple-statistics@7.7.0/dist/simple-statistics.min.js">
</head>
ex) html이 아닌 js문서에서 라이브러리 로딩
// ESM 방식으로 라이브러리 임포트 (esm.sh 사용)
import * as tf from 'https://esm.sh/@tensorflow/tfjs@latest';
import * as tfvis from 'https://esm.sh/@tensorflow/tfjs-vis@latest';
import * as ss from 'https://esm.sh/simple-statistics@7.7.0';